anaksor-ocr
Sokheng · Kit
Reads Khmer and English text from documents, receipts and photos of signs, using a detector for text lines and a recogniser for each line. Suits developers who…
An n8n workflow with a CV form: an applicant sends a name, an email address and a PDF. OpenAI pulls out the details, summarizes them and votes from 1 to 10 against your profile, and one row per applicant lands in a Google Sheet.
Job applicant CV scored by AI and logged to Google Sheets is an n8n workflow in the Business category, listed by Mindket. It is free. This is version 1, last updated on . Download it on this page or copy its JSON, then import it into an n8n canvas. Nothing runs until you activate it in n8n.
CV form
It starts when someone sends the Send CV form with:
One row for each applicant in your sheet, with contact details, career facts, a summary, a vote and its reasons
What you need before you start.
Language model
Runs gpt-4o-mini four times for each CV: to pull out the personal data, to pull out the career, to summarize, and to vote against the profile.
NeedsOpenAI API key
CV storage
Saves each PDF in a folder, named with the date and the original file name.
NeedsA Google account, for a Google Drive OAuth2 credential, and a folder
Applicant log
Takes one new row for each applicant, filled by column header.
NeedsA Google account, for a Google Sheets OAuth2 credential, and a sheet with twelve headers
Checked by Mindket on 13 Nov 2026
This n8n workflow scores job applicants from their CVs. Someone sends a form with a name, an email address and a PDF. An OpenAI model reads the text and pulls out the phone number, city and birthdate, then the education, job history and skills. A summary of 100 words or less is compared with a profile you wrote, and the model gives a vote from 1 to 10 with its reasons. One row per applicant is added to a Google Sheet, and the PDF is saved to a Drive folder on the way. Twelve nodes do the work, beside six sticky notes.
Small companies, agencies and recruiters who collect CVs through a careers page and keep their shortlist in a Google Sheet. It gives a first sorted view of a pile of applications. Skip it if nobody should see a score before reading the CV, or if the place you hire in limits automated screening. The profile in the file looks for a web developer.
| Industry | Who uses it | How they use it | Example |
|---|---|---|---|
| Web and software agencies | Owners and office managers | Put the form on a careers page and get a row for each applicant | An agency hiring a full-stack developer sorts twenty applicants by VOTE. |
| Recruitment | Agency recruiters | Keep one copy of the workflow for each open role, each with its own Profile Wanted text | A recruiter runs a copy for every role a client has open. |
| Small business | Founders | Hire a first support or operations person without an HR team | A founder opens the sheet each morning and reads the reasons beside each vote. |
| Freelance and project hiring | Team leads | Get a quick skills list from a stack of CVs | A lead scans the SKILLS column to see who knows the tools a project needs. |
You need some n8n: importing a file, adding three credentials and building a sheet whose twelve headers match the file. Nothing in the file states a setup time.
Any n8n that can reach OpenAI and Google will run it. Plan where the CVs and the sheet live, since both hold personal data.
Google Sheets to alert the person who hiresDownload saves a zip with workflow.json and Mindket’s setup notes in your downloads folder. Build the sheet and the folder before you import the file.
| Need | Detail |
|---|---|
| n8n | On n8n Cloud or on a server of your own |
| OpenAI | An API key. The one chat model node uses gpt-4o-mini |
| An account for a Google Drive OAuth2 credential and a Google Sheets OAuth2 credential | |
| A Drive folder | Where the CVs are saved |
| A sheet | A first row with DATA, NAME, PHONE, CITY, EMAIL, DATA NASCITA, EDUCATIONAL, JOB HISTORY, SKILLS, SUMMARIZE, VOTE and CONSIDERATION, spelled as written |
workflow.json.OpenAI. That one node serves all four AI steps.Upload CV. Replace YOUR_FOLDER_ID with your folder’s ID, the part of its address after /folders/.Google Sheets. Replace YOUR_SHEET_ID with the sheet’s ID, the part of its address between /d/ and /edit.Profile Wanted and write the profile you are hiring for.Share the form’s address with applicants. Each one types a name and an email address and attaches a PDF. The form confirms at once, and the run goes on behind it. Open the sheet for the row. Open the run under Executions to see what each step returned.
| To change | Where |
|---|---|
| The profile | The text in Profile Wanted |
| The scoring rule | The message in HR Expert, which asks for a vote from 1 to 10 and its reasons, in Italian |
| What is pulled out | The attributes of Qualifications and the schema of Personal Data |
| The summary | The prompt in Summarization Chain, which asks for 100 words or less |
| The model | OpenAI, shared by all four steps |
A web agency keeps the profile that ships in the file, a full-stack developer who knows PHP, Python and JavaScript and lives in northern Italy. An applicant sends a PDF that lists those three languages and two years at another agency in Milan.
One row lands in the sheet. It holds today’s date, the name and email from the form, and the phone, city and birthdate from the CV. The career fields follow, then the summary, a vote and the reasons for it. The prompt is in Italian, so expect the reasons in Italian until you translate it.
If you are new. n8n draws a workflow as boxes joined by lines, and each box, a node, does one job. The form feeds two branches, one that saves the PDF and one that reads it. Two AI steps pull facts out of the text, Merge joins them, and two more write the summary and the vote. Test it with your own CV first, then open HR Expert in the run to see how it reasoned.
For experts. One chat model node feeds four chains, and the vote comes back as structured JSON.
| Node | What it does | What to know |
|---|---|---|
Qualifications and Personal Data | Two Information Extractor nodes read the same PDF text | Both answer under output, so Merge folds them into one output object |
Summarization Chain | Summarization 2 with its own prompt, which carries the merged fields | The text lands in response.text, which HR Expert and the sheet read |
HR Expert | A basic LLM chain with a Structured Output Parser | Its answer is vote, a string, and consideration |
Google Sheets | Appends with the columns defined below | Version 4.5 compares the sheet’s headers with the node’s column list and stops when one is missing |
A vote is a model’s opinion, and each run sends a CV to OpenAI.
Upload CV is a branch of its own, so the sheet holds no link to the saved PDFgpt-4o-mini and names gpt-6-luna as its replacement. Pick the replacement in OpenAI before thenPersonal Data, Qualifications, Summarization Chain and HR ExpertNome and filled a column called TELEFONO, which left two columns empty. Mindket’s copy fixes bothAn n8n workflow with a CV form. An applicant sends a name, an email address and a PDF. The workflow keeps the PDF in
Google Drive, has an OpenAI model pull out the contact details and the career, summarizes them, and scores the applicant
from 1 to 10 against a profile you wrote. One row per applicant lands in a Google Sheet.
workflow.json: the workflow as n8n exports it, 12 nodes beside 6 sticky notes. It holds no credential.README.md: these notes.The copy Mindket started from had two slips that left a column empty. Mindket fixed both:
Google Sheets read the applicant's name from Nome, but the form's field is called Name, so the NAME columnName.TELEFONO, while the sheet's column list in the file calls it PHONE. A row isPHONE.The sheet's address and the Drive folder's address belonged to the original copy's own account. They now readYOUR_SHEET_ID and YOUR_FOLDER_ID, and the cached names of that sheet are gone.
gpt-4o-mini.DATA, NAME, PHONE,CITY, EMAIL, DATA NASCITA, EDUCATIONAL, JOB HISTORY, SKILLS, SUMMARIZE, VOTE and CONSIDERATION. Theworkflow.json.OpenAI. That one node serves all four AI steps.Upload CV. Replace YOUR_FOLDER_ID with your folder's ID,/folders/.Google Sheets. Replace YOUR_SHEET_ID with the sheet's ID,/d/ and /edit. The node writes to the sheet's first tab.Profile Wanted and replace its text with the profile you are hiring for.On form submission is the form, titled Send CV. It takes Name, Email and CV, which must be a .pdf.Upload CV saves the PDF in your Drive folder as CV- plus the date and the original file name.Extract from File reads the text out of the PDF.Personal Data asks the model for the telephone number, the city and the birthdate. Qualifications asks for theMerge joins the two answers into one item.Summarization Chain writes a summary of 100 words or less, in a conversational tone.Profile Wanted holds the profile text. It ships with a web agency looking for a full-stack developer in northernHR Expert compares the summary with that profile. A Structured Output Parser makes it answer with a vote and aconsideration.Google Sheets appends one row: the date, the name, the phone, the city, the email, the birthdate, the education, theProfile Wanted.HR Expert. It asks for a vote, where the top mark is the ideal candidate, andconsideration. It is written in Italian, as are the labels Profilo ricercato and Candidato.Qualifications and the schema of Personal Data.Summarization Chain.Google Sheets node and the sheet's first row, which must stay in step.OpenAI.Upload CV is a branch of its own. Nothing later reads the saved file, so the sheet holds no link to it.gpt-4o-minigpt-6-luna as its replacement. Pick the replacement in OpenAI before then.Personal Data, Qualifications,Summarization Chain and HR Expert.Profile Wanted text is an example for the original copy's own search.NOTICE.md 639 B README.md 5 KB workflow.json 18 KB
Sokheng · Kit
Reads Khmer and English text from documents, receipts and photos of signs, using a detector for text lines and a recogniser for each line. Suits developers who…
Qwen · Kit
Qwen2.5-7B-Instruct as GGUF files in eight quantization sizes, to chat with locally through llama.cpp. For people who want a capable 7.6B model on their own co…
ACE-Step · Kit
Generates music from text with a 4B diffusion decoder, 50 steps and guidance control, aiming for higher audio quality than the base. For creators with a GPU of…
perplexity-ai · Kit
Picks the best option for a decision from text and images, such as which team should handle a request, with a probability for each choice, for developers who b…
numind · Kit
Reads documents as text or images and fills a JSON template with the fields you ask for, or converts the pages to Markdown. A 4B model for teams that process s…
nace-ai · Kit
Scores yes or no, multiple choice and rating questions about a document in one pass, with a probability for every option. An 8B decision model from Nace.AI tha…