This workflow corresponds to n8n.io template #13970 — we link there as the canonical source.
This workflow follows the Agent → Gmail Trigger recipe pattern — see all workflows that pair these two integrations.
The workflow JSON
Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →
{
"id": "HwEOWc4RbJCMNlID",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Building CV automation",
"tags": [
{
"id": "ODwcqtH2rGDMvTeh",
"name": "template",
"createdAt": "2026-02-27T09:48:11.280Z",
"updatedAt": "2026-02-27T09:48:11.280Z"
}
],
"nodes": [
{
"id": "130af06a-81ea-4060-8380-8c29b23a6043",
"name": "Standardize",
"type": "n8n-nodes-base.set",
"position": [
1344,
0
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "0f387743-e1d0-4396-b9c3-7083d8a070ee",
"name": "text",
"type": "string",
"value": "={{ $json.text }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "4c14070b-a0ba-4bc3-9be6-58f9fe6efbd2",
"name": "Recruiter Agent",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
2032,
0
],
"parameters": {
"text": "=Candidates Resume:\n\n{{ $('Standardize').item.json.text }}",
"options": {
"systemMessage": "=## Overwiew\nYou are an expert technical recruiter specializing in AI, automation, and software roles. You have been given a job description and a candidate resume. Your task is to analyze the resume in relation to the job description and provide a detailed screening report.\n\nFocus specifically on how well the candidate matches the core requirements and ideal profile outlined in the job description. Evaluate both technical skill alignment and business-context understanding. Use reasoning grounded in the actual content of the resume and job post \u2014 avoid making assumptions.\n\n## Output\nYour output should follow this exact format:\n\nCandidate Strengths:\nList the top strengths or relevant qualifications the candidate brings to the table. Be specific.\n\nCandidate Weaknesses:\nList areas where the candidate is lacking or mismatched based on the job description.\n\nRisk Factor:\n\nAssign a risk score (Low / Medium / High)\n\nExplain the worst-case scenario if this candidate is hired.\n\nReward Factor:\n\nAssign a reward score (Low / Medium / High)\n\nDescribe the best-case scenario \u2014 what value could this candidate unlock?\n\nDoes the candidate appear to be a short-term or long-term fit?\n\nOverall Fit Rating (0\u201310):\nAssign a number between 0 (terrible match) and 10 (perfect match). Do not give decimals.\n\nJustification for Rating:\nExplain clearly why this candidate received that score. Reference specific resume content and how it aligns or doesn\u2019t with the job description.\n\n## Job description\n{{ $json.text }}"
},
"promptType": "define",
"hasOutputParser": true
},
"typeVersion": 2
},
{
"id": "ac444c92-b7b7-4cc8-9e4e-4d9b5b7f934a",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
2288,
208
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "o4-mini",
"cachedResultName": "o4-mini"
},
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "a9b5c2e8-b948-476a-b1aa-2a0de813677b",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
2032,
208
],
"parameters": {
"schemaType": "manual",
"inputSchema": "{\n \"name\": \"resume_screening_evaluation\",\n \"description\": \"Analyzes a candidate's resume against a job description and outputs strengths, weaknesses, risk/reward assessment, and an overall fit score.\",\n \"type\": \"object\",\n \"properties\": {\n \"candidate_strengths\": {\n \"type\": \"array\",\n \"description\": \"A list of specific strengths or qualifications that match the job description.\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"candidate_weaknesses\": {\n \"type\": \"array\",\n \"description\": \"A list of areas where the candidate falls short or lacks alignment with the job requirements.\",\n \"items\": {\n \"type\": \"string\"\n }\n },\n \"risk_factor\": {\n \"type\": \"object\",\n \"description\": \"An evaluation of the potential risks of hiring this candidate.\",\n \"properties\": {\n \"score\": {\n \"type\": \"string\",\n \"enum\": [\"Low\", \"Medium\", \"High\"],\n \"description\": \"The risk level of hiring this candidate.\"\n },\n \"explanation\": {\n \"type\": \"string\",\n \"description\": \"A brief explanation of the worst-case scenario if the candidate is hired.\"\n }\n },\n \"required\": [\"score\", \"explanation\"]\n },\n \"reward_factor\": {\n \"type\": \"object\",\n \"description\": \"An evaluation of the potential upside of hiring this candidate.\",\n \"properties\": {\n \"score\": {\n \"type\": \"string\",\n \"enum\": [\"Low\", \"Medium\", \"High\"],\n \"description\": \"The reward level of hiring this candidate.\"\n },\n \"explanation\": {\n \"type\": \"string\",\n \"description\": \"A description of the best-case scenario and whether the candidate is a short-term or long-term fit.\"\n }\n },\n \"required\": [\"score\", \"explanation\"]\n },\n \"overall_fit_rating\": {\n \"type\": \"integer\",\n \"description\": \"A rating from 0 to 10 indicating how well the candidate matches the job description.\",\n \"minimum\": 0,\n \"maximum\": 10\n },\n \"justification_for_rating\": {\n \"type\": \"string\",\n \"description\": \"A summary explaining why the candidate received the specific fit rating, referencing resume and job description alignment.\"\n }\n },\n \"required\": [\n \"candidate_strengths\",\n \"candidate_weaknesses\",\n \"risk_factor\",\n \"reward_factor\",\n \"overall_fit_rating\",\n \"justification_for_rating\"\n ]\n}\n"
},
"typeVersion": 1.2
},
{
"id": "f1e076c5-cdfd-4ad6-a401-009987213e46",
"name": "Information Extractor",
"type": "@n8n/n8n-nodes-langchain.informationExtractor",
"position": [
2384,
0
],
"parameters": {
"text": "={{ $('Standardize').item.json.text }}",
"options": {},
"attributes": {
"attributes": [
{
"name": "First name",
"required": true,
"description": "The first name of the candidate"
},
{
"name": "Last name",
"required": true,
"description": "The last name of the candidate"
},
{
"name": "email",
"required": true,
"description": "The email address of the candidate"
}
]
}
},
"typeVersion": 1.1
},
{
"id": "4bfec478-524a-4696-a9ee-8a3e4752773d",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1152,
-1680
],
"parameters": {
"color": 7,
"width": 1072,
"height": 1168,
"content": "## Who this template is for\n\nThis workflow is designed for HR teams, recruiters, and companies that receive job applications via email and want to automatically analyze and evaluate candidates using AI.\n\nIt is ideal for organizations that process a high volume of resumes and want to standardize candidate evaluation, reduce manual screening, and quickly identify the best applicants.\n\nNo advanced n8n knowledge is required, and the workflow can easily be extended with additional evaluation logic, ATS integrations, or automated interview scheduling.\n\nWhat this workflow does\n\nThis workflow automatically processes incoming job applications, extracts information from the candidate's CV, and evaluates the candidate using an AI recruiter agent.\n\nWhen a candidate sends their CV to the company email:\n\n1. The workflow detects the new email.\n\n2. The attached CV is uploaded and stored in Google Drive.\n\n3. The system detects the file type (PDF, DOCX, TXT).\n\n4. The text content of the CV is extracted.\n\n5. The extracted information is sent to an AI recruiter agent.\n\n6. The AI analyzes the candidate and evaluates:\n- Strengths\n- Weaknesses\n- Skills and knowledge\n- Potential value for the company\n\n7. The candidate receives a score from 1 to 10 based on their suitability for the role.\n\n8. The results are saved automatically in Google Sheets for easy review by the hiring team.\n\nHow it works\n\nThe workflow listens for incoming emails using a Gmail trigger. When a new email containing a CV is received, the attachment is uploaded to Google Drive for processing.\n\nA routing step detects the file format of the resume and selects the appropriate extraction method depending on whether the CV is a PDF, Word document, or text file.\n\nThe system then extracts the full textual content of the resume and standardizes it into a consistent format so it can be analyzed reliably.\n\nAn AI recruiter agent processes the candidate profile using an OpenAI chat model. The agent evaluates the candidate\u2019s background, identifies strengths and weaknesses, and estimates how well the candidate fits the role.\n\nThe evaluation is then structured using a Structured Output Parser, extracting key attributes such as candidate insights and suitability score.\n\nFinally, the results are stored in Google Sheets, creating a structured database of candidate evaluations that recruiters can easily review and filter."
},
"typeVersion": 1
},
{
"id": "9cdbdfae-665c-4ac6-9fef-96408c8bd1b8",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-128,
-448
],
"parameters": {
"width": 544,
"height": 896,
"content": "## A. Application intake & CV storage\n\nThis section monitors incoming job applications through Gmail.\n\nWhen a candidate sends an email containing a CV attachment, the workflow triggers automatically and stores the file in Google Drive. This ensures all resumes are centralized and accessible for processing."
},
"typeVersion": 1
},
{
"id": "30a709e5-d674-41fd-97d2-395ae458f855",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
416,
-448
],
"parameters": {
"width": 960,
"height": 896,
"content": "## B. File type detection\n\nThis step identifies the type of CV file received.\n\nDepending on whether the resume is a PDF, Word document, or text file, the workflow routes the file to the appropriate extraction method so the content can be processed correctly."
},
"typeVersion": 1
},
{
"id": "ba13b0ac-ebaf-46a4-85c1-ccba7ffec8ee",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1376,
-448
],
"parameters": {
"width": 576,
"height": 896,
"content": "## C. CV text extraction & standardization\n\nIn this section, the workflow extracts the full textual content of the resume and standardizes the format.\n\nThis ensures the AI agent receives a clean, structured input regardless of the original CV format."
},
"typeVersion": 1
},
{
"id": "87204d66-bf9d-44da-a0fa-faee8cb7bbb3",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
1952,
-448
],
"parameters": {
"width": 704,
"height": 896,
"content": "## D. AI recruiter evaluation\n\nThis is the core of the workflow.\n\nThe AI recruiter agent analyzes the candidate profile and evaluates:\n- Professional strengths\n- Weaknesses\n- Skills and experience\n- Potential contribution to the company\n\nThe candidate is also assigned a score from 1 to 10 indicating how well they match the role."
},
"typeVersion": 1
},
{
"id": "828dd500-51ec-4124-a766-51145efaa1cf",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
2656,
-448
],
"parameters": {
"width": 352,
"height": 896,
"content": "## E. Candidate data storage\n\nFinally, the structured evaluation results are saved to Google Sheets.\n\nThis creates a searchable database of candidate profiles and AI evaluations that recruiters can easily review and compare."
},
"typeVersion": 1
},
{
"id": "c8676ca5-fae4-4199-add4-04364ae063c7",
"name": "New CV",
"type": "n8n-nodes-base.googleDrive",
"position": [
224,
0
],
"parameters": {
"name": "={{ $json.subject }} CV",
"driveId": {
"__rl": true,
"mode": "list",
"value": "My Drive"
},
"options": {},
"folderId": {
"__rl": true,
"mode": "list",
"value": "1jtq2LEEpHYSb-LmIkVJCXtWI9R9x8HfA",
"cachedResultUrl": "https://drive.google.com/drive/folders/1jtq2LEEpHYSb-LmIkVJCXtWI9R9x8HfA",
"cachedResultName": "Automatizaciones"
},
"inputDataFieldName": "attachment_0"
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "8e0c9990-7db7-490c-9749-25d3e18067bd",
"name": "saves CV in folder",
"type": "n8n-nodes-base.googleDrive",
"position": [
1568,
0
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "list",
"value": "1giWJ-722laW-czEFpYiNcSn2sUyt2GX7DonRCB5opTM",
"cachedResultUrl": "https://docs.google.com/document/d/1giWJ-722laW-czEFpYiNcSn2sUyt2GX7DonRCB5opTM/edit?usp=drivesdk",
"cachedResultName": "Job Title: AI Solutions Architect"
},
"options": {
"googleFileConversion": {
"conversion": {
"docsToFormat": "application/pdf"
}
}
},
"operation": "download"
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "24a7e52b-53b2-4357-835c-b55d75a5a6e7",
"name": "new candidate created",
"type": "n8n-nodes-base.googleSheets",
"position": [
2752,
0
],
"parameters": {
"columns": {
"value": {
"CV": "={{ $('New CV').item.json.webViewLink }}",
"Day": "={{ $now }}",
"Name": "={{ $json.output['First name'] }}",
"Email": "={{ $json.output.email }}",
"Strength": "={{ $('Recruiter Agent').item.json.output.candidate_strengths }}",
"Last name": "={{ $json.output['Last name'] }}",
"Weaknesses": "={{ $('Recruiter Agent').item.json.output.candidate_weaknesses }}",
"Risk factor": "={{ $('Recruiter Agent').item.json.output.risk_factor }}",
"Justification": "={{ $('Recruiter Agent').item.json.output.justification_for_rating }}",
"Reward factor": "={{ $('Recruiter Agent').item.json.output.reward_factor }}"
},
"schema": [
{
"id": "Day",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Day",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "CV",
"type": "string",
"display": true,
"required": false,
"displayName": "CV",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Name",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Last name",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Last name",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Email",
"type": "string",
"display": true,
"required": false,
"displayName": "Email",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Strength",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Strength",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Weaknesses",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Weaknesses",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Risk factor",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Risk factor",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Reward factor",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Reward factor",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "General adjustment",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "General adjustment",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Justification",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Justification",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {
"useAppend": true
},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Gldxwjlk71y13pxFGQis4d8jA79t9DQ51TUZZQwd-lE/edit#gid=0",
"cachedResultName": "Hoja 1"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1Gldxwjlk71y13pxFGQis4d8jA79t9DQ51TUZZQwd-lE",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Gldxwjlk71y13pxFGQis4d8jA79t9DQ51TUZZQwd-lE/edit?usp=drivesdk",
"cachedResultName": "Evaluador CV"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.6
},
{
"id": "a9e6653e-dba4-4102-ace0-43acd08cfd74",
"name": "On New Candidate Email",
"type": "n8n-nodes-base.gmailTrigger",
"position": [
0,
0
],
"parameters": {
"simple": false,
"filters": {},
"options": {
"downloadAttachments": true
},
"pollTimes": {
"item": [
{
"mode": "everyMinute"
}
]
}
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
},
{
"id": "2e47db0c-e923-4cd6-be65-80ec25908022",
"name": "Extract Text from Docx",
"type": "n8n-nodes-base.httpRequest",
"position": [
672,
-176
],
"parameters": {
"url": "=https://www.googleapis.com/drive/v2/files/{{ $json.id }}/copy?convert=True",
"method": "POST",
"options": {},
"authentication": "predefinedCredentialType",
"nodeCredentialType": "googleDriveOAuth2Api"
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.2
},
{
"id": "39d3c368-256f-4fe9-9570-311c40d60b64",
"name": "Download Word File",
"type": "n8n-nodes-base.googleDrive",
"position": [
880,
-176
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.id }}"
},
"options": {
"googleFileConversion": {
"conversion": {
"docsToFormat": "application/pdf"
}
}
},
"operation": "download"
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "7788e1b9-b8aa-4a98-bd5d-ff8a69fea2e0",
"name": "Download PDF File",
"type": "n8n-nodes-base.googleDrive",
"position": [
672,
0
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.id }}"
},
"options": {},
"operation": "download"
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "8bfa3150-6d0c-473c-a711-8206704c2dfb",
"name": "Download TXT File",
"type": "n8n-nodes-base.googleDrive",
"position": [
672,
208
],
"parameters": {
"fileId": {
"__rl": true,
"mode": "id",
"value": "={{ $json.id }}"
},
"options": {},
"operation": "download"
},
"credentials": {
"googleDriveOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 3
},
{
"id": "f4aab73d-95e7-4ca7-8b1d-6c2ebb0e3d54",
"name": "Parse Word Content",
"type": "n8n-nodes-base.extractFromFile",
"position": [
1104,
-176
],
"parameters": {
"options": {},
"operation": "pdf"
},
"typeVersion": 1
},
{
"id": "dfee4951-2835-482e-ac82-b63fa3851252",
"name": "Parse PDF Content",
"type": "n8n-nodes-base.extractFromFile",
"position": [
880,
0
],
"parameters": {
"options": {},
"operation": "pdf"
},
"typeVersion": 1
},
{
"id": "7e5ec95c-7c8e-49d2-ace3-34498eacca62",
"name": "Parse Text Content",
"type": "n8n-nodes-base.extractFromFile",
"position": [
1104,
208
],
"parameters": {
"options": {},
"operation": "text",
"destinationKey": "text"
},
"typeVersion": 1
},
{
"id": "dd315439-2488-4023-9255-4f2ff58aeba3",
"name": "Route by File Type",
"type": "n8n-nodes-base.switch",
"position": [
448,
-16
],
"parameters": {
"rules": {
"values": [
{
"outputKey": "Word",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "f8f44eb8-4c92-4ba8-9199-81c577f54185",
"operator": {
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.mimeType }}",
"rightValue": "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
}
]
},
"renameOutput": true
},
{
"outputKey": "PDF",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "74bc19a8-c245-49c8-8ce0-e665cba936c6",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.mimeType }}",
"rightValue": "application/pdf"
}
]
},
"renameOutput": true
},
{
"outputKey": "TXT",
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "247f83d6-faf7-4ed6-bcf4-48ad6db13e62",
"operator": {
"name": "filter.operator.equals",
"type": "string",
"operation": "equals"
},
"leftValue": "={{ $json.mimeType }}",
"rightValue": "text/plain"
}
]
},
"renameOutput": true
}
]
},
"options": {}
},
"typeVersion": 3.2
},
{
"id": "c25a48b6-5900-4332-8ea3-c219267a5967",
"name": "Extract Final Text",
"type": "n8n-nodes-base.extractFromFile",
"position": [
1808,
0
],
"parameters": {
"options": {},
"operation": "pdf"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "b6990e7a-362f-4031-8766-9aa8a35d89dc",
"connections": {
"New CV": {
"main": [
[
{
"node": "Route by File Type",
"type": "main",
"index": 0
}
]
]
},
"Standardize": {
"main": [
[
{
"node": "saves CV in folder",
"type": "main",
"index": 0
}
]
]
},
"Recruiter Agent": {
"main": [
[
{
"node": "Information Extractor",
"type": "main",
"index": 0
}
]
]
},
"Download PDF File": {
"main": [
[
{
"node": "Parse PDF Content",
"type": "main",
"index": 0
}
]
]
},
"Download TXT File": {
"main": [
[
{
"node": "Parse Text Content",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "Recruiter Agent",
"type": "ai_languageModel",
"index": 0
},
{
"node": "Information Extractor",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Parse PDF Content": {
"main": [
[
{
"node": "Standardize",
"type": "main",
"index": 0
}
]
]
},
"Download Word File": {
"main": [
[
{
"node": "Parse Word Content",
"type": "main",
"index": 0
}
]
]
},
"Extract Final Text": {
"main": [
[
{
"node": "Recruiter Agent",
"type": "main",
"index": 0
}
]
]
},
"Parse Text Content": {
"main": [
[
{
"node": "Standardize",
"type": "main",
"index": 0
}
]
]
},
"Parse Word Content": {
"main": [
[
{
"node": "Standardize",
"type": "main",
"index": 0
}
]
]
},
"Route by File Type": {
"main": [
[
{
"node": "Extract Text from Docx",
"type": "main",
"index": 0
}
],
[
{
"node": "Download PDF File",
"type": "main",
"index": 0
}
],
[
{
"node": "Download TXT File",
"type": "main",
"index": 0
}
]
]
},
"saves CV in folder": {
"main": [
[
{
"node": "Extract Final Text",
"type": "main",
"index": 0
}
]
]
},
"Information Extractor": {
"main": [
[
{
"node": "new candidate created",
"type": "main",
"index": 0
}
]
]
},
"Extract Text from Docx": {
"main": [
[
{
"node": "Download Word File",
"type": "main",
"index": 0
}
]
]
},
"On New Candidate Email": {
"main": [
[
{
"node": "New CV",
"type": "main",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "Recruiter Agent",
"type": "ai_outputParser",
"index": 0
}
]
]
}
}
}
Credentials you'll need
Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.
gmailOAuth2googleDriveOAuth2ApigoogleSheetsOAuth2ApiopenAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This template is for HR teams, recruiters, and companies that receive job applications via email and want to automatically screen and evaluate candidates using AI. Ideal for organisations processing a high volume of resumes who want to reduce manual screening time.
Source: https://n8n.io/workflows/13970/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
🎯 Create viral TikToks, Shorts, Reels, podcasts, and ASMR videos in minutes — all on autopilot.
Generate AI viral videos with NanoBanana & VEO3, shared on socials via Blotato 2. Uses @blotato/n8n-nodes-blotato, googleSheets, lmChatOpenAi, toolThink. Event-driven trigger; 94 nodes.
> Note: This workflow uses sticky notes extensively to document each logical section of the automation. Sticky notes are mandatory and already included to explain OCR, AI parsing, folder logic, dup
This template is designed for marketers, content creators, and e-commerce brands who want to automate the creation of professional ad videos at scale. It’s ideal for teams looking to generate consiste
This comprehensive n8n workflow automates the entire Meta (Facebook/Instagram) advertising process, from asset analysis to ad creation. It combines AI-powered content analysis with automated ad deploy