Reads a CV PDF and writes what it says onto a fresh copy of your own Google Docs CV template.

UsesGoogle DocsGoogle DriveOpenAI

Put a CV onto your own template

ValuesSet cvFileLink to blank.Set cvFileLink to blank.
ValuesSet cvTemplateDocumentLink to blank.Set cvTemplateDocumentLink to blank.
TextTrim cvFileLink and save it as cvFile.Trim cvFileLink and save it as cvFile.
TextTrim cvTemplateDocumentLink and save it as templateLink.Trim cvTemplateDocumentLink and save it as templateLink.
Decisions & LoopsIf cvFile starts with http (ignoring case) or cvFile starts with doc_…If cvFile starts with http (ignoring case) or cvFile starts with doc_…
Yes
Decisions & LoopsStop and report a problem: The 'cvFileLink' step is neither an uploaded file nor a web address, so there is no CV to read. Upload the PDF to the step or paste a link starting with https:// that points straight at the PDF file.Stop and report a problem: The 'cvFileLink' step is neither an uploaded file nor a web address, so there is no CV to read. Upload the PDF to the step or paste a link starting with https:// that points straight at the PDF file.
No
No steps
Decisions & LoopsIf cvFile contains docs.google.com (ignoring case) or cvFile contains…If cvFile contains docs.google.com (ignoring case) or cvFile contains…
Yes
Decisions & LoopsStop and report a problem: The 'cvFileLink' step is a Google link, and a Google page is not a PDF file - the reader would fetch the sign-in page instead of the CV. Download the CV as a PDF and upload it to the step.Stop and report a problem: The 'cvFileLink' step is a Google link, and a Google page is not a PDF file - the reader would fetch the sign-in page instead of the CV. Download the CV as a PDF and upload it to the step.
No
No steps
Decisions & LoopsIf templateLink doesn't contain /d/If templateLink doesn't contain /d/
Yes
Decisions & LoopsStop and report a problem: The 'cvTemplateDocumentLink' step does not look like a Google Docs link - a Docs link contains '/d/', for example https://docs.google.com/document/d/1AbCdEf/edit.Stop and report a problem: The 'cvTemplateDocumentLink' step does not look like a Google Docs link - a Docs link contains '/d/', for example https://docs.google.com/document/d/1AbCdEf/edit.
No
No steps
ValuesSet cvFieldNames to [full name, contact details, personal profile, skills, work experience, education, certifications, languages].Set cvFieldNames to [full name, contact details, personal profile, skills, work experience, education, certifications, languages].
ValuesSet extractedFields to an empty list.Set extractedFields to an empty list.
Decisions & LoopsIf a step below fails, save the error as readErrorIf a step below fails, save the error as readError
Try
AI AgentRun an AI agent: Read the attached document and pull out each of these fields, in this order: - cvFieldNa… and save it as extraction.Run an AI agent: Read the attached document and pull out each of these fields, in this order: - cvFieldNa… and save it as extraction.
Decisions & LoopsIf extraction.output.fields is emptyIf extraction.output.fields is empty
Yes
Decisions & LoopsStop and report a problem: Nothing could be read out of that file, so no copy of your template has been made. Check the 'cvFileLink' step points at a readable PDF of the CV.Stop and report a problem: Nothing could be read out of that file, so no copy of your template has been made. Check the 'cvFileLink' step points at a readable PDF of the CV.
No
No steps
ValuesChange extractedFields to extraction.output.fields.Change extractedFields to extraction.output.fields.
On error
Decisions & LoopsStop and report a problem: Could not read that CV, so no copy of your template has been made. The reason given was: readError.message.Stop and report a problem: Could not read that CV, so no copy of your template has been made. The reason given was: readError.message.
ValuesSet candidateName to blank.Set candidateName to blank.
Decisions & LoopsFor each namedField in extractedFields:For each namedField in extractedFields:
ValuesSet namedFieldName to blank.Set namedFieldName to blank.
Decisions & LoopsIf a step below fails, save the error as nameFieldErrorIf a step below fails, save the error as nameFieldError
Try
TextMake namedField.name lowercase and save it as namedFieldName.Make namedField.name lowercase and save it as namedFieldName.
On error
ValuesChange namedFieldName to blank.Change namedFieldName to blank.
Decisions & LoopsIf namedFieldName is full nameIf namedFieldName is full name
Yes
Decisions & LoopsIf a step below fails, save the error as nameValueErrorIf a step below fails, save the error as nameValueError
Try
TextTrim namedField.value and save it as candidateName.Trim namedField.value and save it as candidateName.
On error
TextJoin namedField.value with a space and save it as candidateName.Join namedField.value with a space and save it as candidateName.
No
No steps
Decisions & LoopsIf candidateName is emptyIf candidateName is empty
Yes
ValuesChange candidateName to Unnamed candidate.Change candidateName to Unnamed candidate.
No
No steps
ValuesSet newCvLink to blank.Set newCvLink to blank.
Decisions & LoopsIf a step below fails, save the error as copyErrorIf a step below fails, save the error as copyError
Try
Google DriveGoogle DriveDuplicate templateLink. Save it as copy.Duplicate templateLink. Save it as copy.
TextTrim copy.duplicate_link and save it as newCvLink.Trim copy.duplicate_link and save it as newCvLink.
On error
Decisions & LoopsStop and report a problem: Could not copy your template, so nothing has been written. Your own template has not been touched. The reason given was: copyError.message.Stop and report a problem: Could not copy your template, so nothing has been written. Your own template has not been touched. The reason given was: copyError.message.
Decisions & LoopsIf newCvLink doesn't contain /d/If newCvLink doesn't contain /d/
Yes
Decisions & LoopsStop and report a problem: The copy was made but Google did not return a link that identifies it, so it cannot be filled in. Look in your Drive for the new document and fill it in by hand.Stop and report a problem: The copy was made but Google did not return a link that identifies it, so it cannot be filled in. Look in your Drive for the new document and fill it in by hand.
No
No steps
ListsGet the first item of the last item of newCvLink split by /d/ split by / and save it as newCvId.Get the first item of the last item of newCvLink split by /d/ split by / and save it as newCvId.
ValuesSet sectionsWithNoPlace to an empty list.Set sectionsWithNoPlace to an empty list.
ValuesSet sectionsNotInCv to an empty list.Set sectionsNotInCv to an empty list.
Decisions & LoopsFor each wantedField in cvFieldNames:For each wantedField in cvFieldNames:
ValuesSet placeholder to {{wantedField with replaced by _}}.Set placeholder to {{wantedField with replaced by _}}.
ValuesSet fieldValue to blank.Set fieldValue to blank.
Decisions & LoopsFor each extractedField in extractedFields:For each extractedField in extractedFields:
ValuesSet extractedName to blank.Set extractedName to blank.
Decisions & LoopsIf a step below fails, save the error as extractedNameErrorIf a step below fails, save the error as extractedNameError
Try
TextMake extractedField.name lowercase and save it as extractedName.Make extractedField.name lowercase and save it as extractedName.
On error
ValuesChange extractedName to blank.Change extractedName to blank.
Decisions & LoopsIf extractedName is wantedFieldIf extractedName is wantedField
Yes
Decisions & LoopsIf a step below fails, save the error as extractedValueErrorIf a step below fails, save the error as extractedValueError
Try
TextTrim extractedField.value and save it as fieldValue.Trim extractedField.value and save it as fieldValue.
On error
TextJoin extractedField.value with a new line and save it as fieldValue.Join extractedField.value with a new line and save it as fieldValue.
No
No steps
ValuesSet valueToWrite to fieldValue.Set valueToWrite to fieldValue.
Decisions & LoopsIf fieldValue is emptyIf fieldValue is empty
Yes
ValuesChange valueToWrite to Not stated in the CV.Change valueToWrite to Not stated in the CV.
ListsAdd wantedField to the end of sectionsNotInCv and save it as sectionsNotInCv.Add wantedField to the end of sectionsNotInCv and save it as sectionsNotInCv.
No
No steps
ValuesSet landed to false.Set landed to false.
Decisions & LoopsIf a step below fails, save the error as replaceErrorIf a step below fails, save the error as replaceError
Try
Google DocsGoogle DocsReplace placeholder with valueToWrite in newCvId. Save it as replaceResult.Replace placeholder with valueToWrite in newCvId. Save it as replaceResult.
MathSet occurrences to replaceResult.occurrences_changed multiplied by 1.Set occurrences to replaceResult.occurrences_changed multiplied by 1.
Decisions & LoopsIf occurrences is greater than or equal to 1 and occurrences is less than or…If occurrences is greater than or equal to 1 and occurrences is less than or…
Yes
ValuesChange landed to true.Change landed to true.
No
No steps
On error
ValuesChange landed to false.Change landed to false.
Decisions & LoopsIf landed is no and fieldValue isn't emptyIf landed is no and fieldValue isn't empty
Yes
ListsAdd wantedField - add placeholder to your templateAdd wantedField - add placeholder to your template fieldValue to the end of sectionsWithNoPlace and save it as sectionsWithNoPlace.
No
No steps
ListsCount the items in sectionsWithNoPlace and save it as noPlaceCount.Count the items in sectionsWithNoPlace and save it as noPlaceCount.
Decisions & LoopsIf noPlaceCount is greater than 0If noPlaceCount is greater than 0
Yes
Google DocsGoogle DocsAdd text to newCvId.Add text to newCvId.FROM THE CV BUT NOT PLACED Your template has no placeholder for the sections below, so they are written out here rather than dropped. Add the placeholder named beside each heading to your template and run it again to have them filled in place. sectionsWithNoPlace joined by a b...
No
No steps
ValuesShow in the output: Wrote the CV of candidateName onto a copy of your template: newCvLinkShow in the output: Wrote the CV of candidateName onto a copy of your template: newCvLink Sections your template had no placeholder for, written out at the end instead: noPlaceCount Sections the CV does not contain, marked as not stated: sectionsNotInCv joined by , .