AutomationFlowsAI & RAG › Automate Cv Screening and Candidate Scoring with Gemini AI and Google Sheets

Automate Cv Screening and Candidate Scoring with Gemini AI and Google Sheets

ByAsfandyar Malik @asfandyar-malik on n8n.io

For HR professionals, recruiters, and hiring managers who want to automate the initial CV screening and candidate evaluation process. This workflow helps teams efficiently assess applicants based on submitted answers and resume data — saving hours of manual review and ensuring…

Event trigger★★★★☆ complexityAI-powered27 nodesForm TriggerGoogle DriveAgentGoogle SheetsGoogle Gemini Chat
AI & RAG Trigger: Event Nodes: 27 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #10359 — we link there as the canonical source.

This workflow follows the Agent → Form 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 →

Download .json
{
  "id": "PMlL6T0rteWLJZ81",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "CV Screaning comparison based",
  "tags": [],
  "nodes": [
    {
      "id": "2c5eefc2-dea1-4ce8-95c7-ced6a7c05496",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1728,
        -1712
      ],
      "parameters": {
        "color": 4,
        "height": 496,
        "content": "Form TRIGGER:\nPut the Answers of Question on the form and upload the CV"
      },
      "typeVersion": 1
    },
    {
      "id": "93dca7c6-1b73-4b9d-b4db-7033e3b2f332",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1472,
        -1712
      ],
      "parameters": {
        "width": 272,
        "height": 576,
        "content": "UPLOAD THE FILE:\nIncoming attachment (CV) is uploaded to the configured Google Drive folder and named from the sender."
      },
      "typeVersion": 1
    },
    {
      "id": "11e1a03b-63ab-48f3-b6cf-83e560ab7c18",
      "name": "Sticky Note13",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1184,
        -1712
      ],
      "parameters": {
        "color": 7,
        "width": 160,
        "height": 576,
        "content": "EXTRACT FROM FILE:\nExtract from File converts the CV (PDF) into plain text."
      },
      "typeVersion": 1
    },
    {
      "id": "67b1aaf1-0c9f-4df7-85ca-f2b31efa12e1",
      "name": "On form submission",
      "type": "n8n-nodes-base.formTrigger",
      "position": [
        -1616,
        -1504
      ],
      "parameters": {
        "options": {},
        "formTitle": "Senior Software Engineer Application",
        "formFields": {
          "values": [
            {
              "fieldLabel": "Name",
              "requiredField": true
            },
            {
              "fieldLabel": "Email",
              "requiredField": true
            },
            {
              "fieldType": "textarea",
              "fieldLabel": "Skills",
              "requiredField": true
            },
            {
              "fieldType": "textarea",
              "fieldLabel": "Job History",
              "requiredField": true
            },
            {
              "fieldType": "file",
              "fieldLabel": "Upload CV",
              "multipleFiles": false,
              "requiredField": true,
              "acceptFileTypes": ".pdf"
            }
          ]
        },
        "formDescription": "Fill out the details and upload your CV"
      },
      "typeVersion": 2.3
    },
    {
      "id": "e61a5cc7-888b-487d-b3a3-1c8da6f509d0",
      "name": "Upload CV to Drive",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -1472,
        -1328
      ],
      "parameters": {
        "name": "={{ $json['Upload CV'] }}",
        "driveId": {
          "__rl": true,
          "mode": "list",
          "value": "My Drive"
        },
        "options": {},
        "folderId": {
          "__rl": true,
          "mode": "list",
          "value": "18p9qvIyXOz3I-L6etwndWq9l2I9yEmb0",
          "cachedResultUrl": "Put your Drive folder",
          "cachedResultName": "Demo "
        },
        "inputDataFieldName": "Upload_CV"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "b2cf1ee8-ae9e-433b-8f8c-97986506e6ca",
      "name": "Download CV",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -1312,
        -1328
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "id",
          "value": "={{ $json.id }}"
        },
        "options": {},
        "operation": "download"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "fbf85dc4-eb37-485d-b3c9-baea539939a1",
      "name": "Extract CV Text",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        -1152,
        -1328
      ],
      "parameters": {
        "options": {},
        "operation": "pdf"
      },
      "typeVersion": 1
    },
    {
      "id": "cf300ed5-3ea2-4526-8ccf-a83a0c5d673d",
      "name": "AI Comparison & Scoring",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -624,
        -1488
      ],
      "parameters": {
        "text": "=You are an expert HR analyst evaluating a job candidate for a Senior Software Engineer position.\n\n**CANDIDATE INFORMATION:**\nName: {{ $json.candidate_name }}\nEmail: {{ $json.email_address }}\n\n---\n\n**WHAT THE CANDIDATE CLAIMS (Written in Form):**\n\nSkills Claimed:\n{{ $json.skills_claimed }}\n\nJob History Claimed:\n{{ $json.job_history_claimed }}\n\n---\n\n**WHAT THE CV ACTUALLY SAYS:**\n{{ $json.cv_actual_content }}\n\n---\n\n**YOUR EVALUATION TASK:**\n\n1. **COMPARISON ANALYSIS** (Most Important):\n   - Compare what the candidate wrote in the form vs what's in their CV\n   - Check if skills claimed match skills in CV\n   - Check if job history claimed matches experience in CV\n   - Identify any exaggerations, omissions, or inconsistencies\n   - Calculate honesty/consistency score (1-100)\n\n2. **JOB FIT ANALYSIS**:\n   - Evaluate against these requirements:\n     * 3+ years professional development experience\n     * Bachelor's in CS/Engineering/IT\n     * Strong proficiency in Next.js and Supabase\n     * SaaS application development experience\n     * SQL and database design skills\n     * Uses AI tools in development\n   - Calculate job fit score (1-100)\n\n3. **FINAL SCORE CALCULATION**:\n   - Final Score = (Consistency Score \u00d7 0.40) + (Job Fit Score \u00d7 0.60)\n   - Score range: 1-100\n\n**OUTPUT FORMAT (STRICT JSON ONLY):**\n```json\n{\n  \"consistency_score\": 85,\n  \"job_fit_score\": 70,\n  \"final_score\": 76,\n  \"educational_qualification\": \"Brief summary from CV\",\n  \"job_history_summary\": \"Brief summary from CV\",\n  \"skill_set_summary\": \"Brief summary from CV\",\n  \"consistency_analysis\": \"Are form answers consistent with CV? List any discrepancies.\",\n  \"justification\": \"Why this final score? Focus on comparison results and job fit.\"\n}\n```",
        "options": {
          "systemMessage": "You are a professional HR analyst. Your PRIMARY task is to compare form answers with CV content. Always respond with valid JSON only. Be thorough in checking consistency between claimed skills/experience and actual CV content."
        },
        "promptType": "define"
      },
      "typeVersion": 2.2
    },
    {
      "id": "39b6c6d4-d99a-4303-aeb9-45e29c3c7194",
      "name": "Parse AI Results",
      "type": "n8n-nodes-base.code",
      "position": [
        -320,
        -1488
      ],
      "parameters": {
        "jsCode": "// Get AI output (only one input expected)\nconst item = $input.item.json;\n\nlet aiOutput = {};\n\ntry {\n  const text = item.output || \"\";\n\n  // Extract JSON from markdown code blocks or fallback to plain JSON\n  const jsonMatch =\n    text.match(/```json\\s*([\\s\\S]*?)```/) ||\n    text.match(/```\\s*([\\s\\S]*?)```/) ||\n    [null, text];\n\n  aiOutput = JSON.parse(jsonMatch[1] || jsonMatch[0]);\n} catch (e) {\n  // Fallback: parse manually if JSON parsing fails\n  const text = item.output || \"\";\n  const finalScoreMatch = text.match(/\"final_score\"\\s*:\\s*(\\d+)/);\n  const consistencyMatch = text.match(/\"consistency_score\"\\s*:\\s*(\\d+)/);\n  const fitMatch = text.match(/\"job_fit_score\"\\s*:\\s*(\\d+)/);\n\n  aiOutput = {\n    final_score: finalScoreMatch ? parseInt(finalScoreMatch[1]) : 0,\n    consistency_score: consistencyMatch ? parseInt(consistencyMatch[1]) : 0,\n    job_fit_score: fitMatch ? parseInt(fitMatch[1]) : 0,\n    educational_qualification: \"Parse error\",\n    job_history_summary: \"Parse error\",\n    skill_set_summary: \"Parse error\",\n    consistency_analysis: \"Parse error: \" + e.message,\n    justification: \"Parse error\",\n  };\n}\n\n// Return only AI parsed data\nreturn [\n  {\n    json: {\n      consistency_score: aiOutput.consistency_score || 0,\n      job_fit_score: aiOutput.job_fit_score || 0,\n      final_score: aiOutput.final_score || 0,\n      educational_qualification: aiOutput.educational_qualification || \"\",\n      job_history_summary: aiOutput.job_history_summary || \"\",\n      skill_set_summary: aiOutput.skill_set_summary || \"\",\n      consistency_analysis: aiOutput.consistency_analysis || \"\",\n      justification: aiOutput.justification || \"\",\n    },\n  },\n];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "eac75239-6849-4def-9498-a0067dafd42d",
      "name": "Get All Rows",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        224,
        -1488
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1ivfo6QQqw7H-2F10g1h0SR2Z6I4ApHOHYsxgH_7Mdlo/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1ivfo6QQqw7H-2F10g1h0SR2Z6I4ApHOHYsxgH_7Mdlo",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1ivfo6QQqw7H-2F10g1h0SR2Z6I4ApHOHYsxgH_7Mdlo/edit?usp=drivesdk",
          "cachedResultName": "CV Data"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "007f90d7-449f-4c01-a94b-08fd1a3c1970",
      "name": "Sort by Final Score",
      "type": "n8n-nodes-base.code",
      "position": [
        400,
        -1488
      ],
      "parameters": {
        "jsCode": "// Sort all rows by final_score (highest to lowest)\nconst items = $input.all();\n\nitems.sort((a, b) => {\n  const scoreA = parseInt(a.json.final_score) || 0;\n  const scoreB = parseInt(b.json.final_score) || 0;\n  return scoreB - scoreA;\n});\n\nreturn items;"
      },
      "typeVersion": 2
    },
    {
      "id": "d933071d-3ac8-435d-b806-7e73566b32c0",
      "name": "Clear Sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        576,
        -1488
      ],
      "parameters": {
        "operation": "clear",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1ivfo6QQqw7H-2F10g1h0SR2Z6I4ApHOHYsxgH_7Mdlo"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "a7d7948c-71de-4f18-a6b7-956d1ba22ad9",
      "name": "Write Sorted Data",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        752,
        -1488
      ],
      "parameters": {
        "columns": {
          "value": {},
          "schema": [
            {
              "id": "candidate_name",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "candidate_name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "email_address",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "email_address",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "educational_qualification",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "educational_qualification",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Job_History",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Job_History",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "skill_set",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "skill_set",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "justification",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "justification",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "consistency_check",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "consistency_check",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "score",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "score",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "autoMapInputData",
          "matchingColumns": [
            "row_number"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1ivfo6QQqw7H-2F10g1h0SR2Z6I4ApHOHYsxgH_7Mdlo/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1ivfo6QQqw7H-2F10g1h0SR2Z6I4ApHOHYsxgH_7Mdlo",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1ivfo6QQqw7H-2F10g1h0SR2Z6I4ApHOHYsxgH_7Mdlo/edit?usp=drivesdk",
          "cachedResultName": "CV Data"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "4ca956b4-c726-434c-952a-51c83a41337d",
      "name": "Merge Form + CV1",
      "type": "n8n-nodes-base.merge",
      "position": [
        -976,
        -1488
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combineBy": "combineAll"
      },
      "typeVersion": 3.2
    },
    {
      "id": "2f209679-9ec9-4332-967f-1345f4c96b7d",
      "name": "Google Gemini Chat Model1",
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "position": [
        -576,
        -1280
      ],
      "parameters": {
        "options": {}
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "1c385e5b-1459-4a3a-979b-a1215d642a7e",
      "name": "Getting Score",
      "type": "n8n-nodes-base.code",
      "position": [
        -144,
        -1488
      ],
      "parameters": {
        "jsCode": "// Get parsed AI results\nconst item = $input.item.json;\n\n// Convert to desired table-like format\nreturn [\n  {\n    json: {\n      Candidate: item.candidate_name || \"Unknown\",\n      \"Answer Quality\": item.consistency_score || 0,\n      \"CV Match\": item.job_fit_score || 0,\n      \"Fit Summary\": item.final_score || 0,\n      \"Final Score\": item.final_score || 0,\n    },\n  },\n];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "3fea28de-e1ce-4cd5-b458-c8f1de1ae527",
      "name": "Comparison Data",
      "type": "n8n-nodes-base.code",
      "position": [
        -800,
        -1488
      ],
      "parameters": {
        "jsCode": "// Combine form data with CV text for comparison\nconst items = $input.all();\n\nlet formData = {};\nlet cvText = \"\";\n\nfor (const item of items) {\n  const data = item.json;\n  \n  if (data.Name || data.Email) {\n    formData = data;\n  }\n  \n  if (data.text && typeof data.text === 'string' && data.text.length > 50) {\n    cvText = data.text;\n  }\n}\n\nreturn {\n  json: {\n    candidate_name: formData.Name || \"\",\n    email_address: formData.Email || \"\",\n    skills_claimed: formData.Skills || \"\",\n    job_history_claimed: formData['Job History'] || \"\",\n    cv_actual_content: cvText || \"[ERROR: No CV text found]\",\n    timestamp: new Date().toISOString()\n  }\n};"
      },
      "typeVersion": 2
    },
    {
      "id": "a7404cf7-ee31-46cf-b21f-62965b8afb3f",
      "name": "Save to Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        32,
        -1488
      ],
      "parameters": {
        "columns": {
          "value": {
            "CV match": "={{ $json['CV Match'] }}",
            "Final Score": "={{ $json['Final Score'] }}",
            "Fit Summary": "={{ $json['Fit Summary'] }}",
            "email_address": "={{ $('Comparison Data').item.json.email_address }}",
            "candidate_name": "={{ $('Comparison Data').item.json.candidate_name }}",
            "Answers Quality": "={{ $json['Answer Quality'] }}"
          },
          "schema": [
            {
              "id": "candidate_name",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "candidate_name",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "email_address",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "email_address",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Answers Quality",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Answers Quality",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "CV match",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "CV match",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Fit Summary",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Fit Summary",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Final Score",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Final Score",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1ivfo6QQqw7H-2F10g1h0SR2Z6I4ApHOHYsxgH_7Mdlo/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1ivfo6QQqw7H-2F10g1h0SR2Z6I4ApHOHYsxgH_7Mdlo",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1ivfo6QQqw7H-2F10g1h0SR2Z6I4ApHOHYsxgH_7Mdlo/edit?usp=drivesdk",
          "cachedResultName": "CV Data"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "a305785f-ac90-446e-9aef-a24fe5a2aaa1",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1008,
        -1712
      ],
      "parameters": {
        "color": 5,
        "width": 166,
        "height": 576,
        "content": "Merge node to combine the CV data and Answers of Question"
      },
      "typeVersion": 1
    },
    {
      "id": "bed2791f-0183-44c1-97f2-e9e44ee531c8",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -832,
        -1712
      ],
      "parameters": {
        "color": 3,
        "width": 166,
        "height": 576,
        "content": "compare the incoming data \"Answers of Question and the CV data\""
      },
      "typeVersion": 1
    },
    {
      "id": "e5e6261f-a800-47f6-995d-b7680be6220e",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -656,
        -1712
      ],
      "parameters": {
        "color": 2,
        "width": 288,
        "height": 576,
        "content": "AI Agent node : \nWrite the summary on the bases of compare data"
      },
      "typeVersion": 1
    },
    {
      "id": "3cd73546-3a4c-45cf-835a-2e10aee4baa8",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -352,
        -1712
      ],
      "parameters": {
        "color": 4,
        "width": 336,
        "height": 576,
        "content": "Code node : \nGet the AI Results and the mark the score"
      },
      "typeVersion": 1
    },
    {
      "id": "731f3d2f-74b6-4d46-965d-519c030472d5",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        -1712
      ],
      "parameters": {
        "color": 3,
        "width": 166,
        "height": 576,
        "content": "Sava data in the google sheet"
      },
      "typeVersion": 1
    },
    {
      "id": "24512dd9-c364-48e9-9d5c-29717202a28f",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        176,
        -1712
      ],
      "parameters": {
        "color": 5,
        "width": 166,
        "height": 576,
        "content": "Get all the rows "
      },
      "typeVersion": 1
    },
    {
      "id": "d6bcf2f6-9ab8-4d2e-a58f-3eb784136709",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        352,
        -1712
      ],
      "parameters": {
        "width": 166,
        "height": 576,
        "content": "Sort the data based on the scoring"
      },
      "typeVersion": 1
    },
    {
      "id": "5dcfb8eb-da59-46be-8329-67011031eeba",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        544,
        -1712
      ],
      "parameters": {
        "color": 7,
        "width": 336,
        "height": 576,
        "content": "Clear the sheet and again save the data based on the scoring"
      },
      "typeVersion": 1
    },
    {
      "id": "378342c4-f97f-49b5-90dd-f654e3c6a230",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1072,
        -1936
      ],
      "parameters": {
        "width": 1168,
        "content": "# Automated AI-Powered CV Screening and Candidate Scoring System"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "8cd5ca24-38d3-4e20-b05a-beadf2d2acef",
  "connections": {
    "Clear Sheet": {
      "main": [
        [
          {
            "node": "Write Sorted Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download CV": {
      "main": [
        [
          {
            "node": "Extract CV Text",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get All Rows": {
      "main": [
        [
          {
            "node": "Sort by Final Score",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Getting Score": {
      "main": [
        [
          {
            "node": "Save to Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Save to Sheets": {
      "main": [
        [
          {
            "node": "Get All Rows",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Comparison Data": {
      "main": [
        [
          {
            "node": "AI Comparison & Scoring",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract CV Text": {
      "main": [
        [
          {
            "node": "Merge Form + CV1",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Merge Form + CV1": {
      "main": [
        [
          {
            "node": "Comparison Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse AI Results": {
      "main": [
        [
          {
            "node": "Getting Score",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "On form submission": {
      "main": [
        [
          {
            "node": "Upload CV to Drive",
            "type": "main",
            "index": 0
          },
          {
            "node": "Merge Form + CV1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Upload CV to Drive": {
      "main": [
        [
          {
            "node": "Download CV",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Sort by Final Score": {
      "main": [
        [
          {
            "node": "Clear Sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Comparison & Scoring": {
      "main": [
        [
          {
            "node": "Parse AI Results",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model1": {
      "ai_languageModel": [
        [
          {
            "node": "AI Comparison & Scoring",
            "type": "ai_languageModel",
            "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.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

For HR professionals, recruiters, and hiring managers who want to automate the initial CV screening and candidate evaluation process. This workflow helps teams efficiently assess applicants based on submitted answers and resume data — saving hours of manual review and ensuring…

Source: https://n8n.io/workflows/10359/ — original creator credit. Request a take-down →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

Streamline your recruitment process with AI-powered resume analysis that goes beyond keyword matching.

Form Trigger, Google Drive, Google Gemini Chat +7
AI & RAG

This workflow automates batch video publishing prep from a Google Drive folder with AI-generated, platform-specific copy and a simple approval queue in Google Sheets. Perfect for Agencies, content cre

Form Trigger, Google Drive, Google Gemini +5
AI & RAG

This workflow helps HR teams, career coaches, and training programs collect candidate data and automatically generate CV improvement recommendations and a cover letter draft. Candidates submit their L

Form Trigger, Google Sheets, Google Gemini Chat +4
AI & RAG

🎯 Create viral TikToks, Shorts, Reels, podcasts, and ASMR videos in minutes — all on autopilot.

OpenAI, HTTP Request, Form Trigger +7
AI & RAG

Resume Screening & Behavioral Interviews with Gemini, Elevenlabs, & Notion ATS copy. Uses outputParserStructured, chainLlm, googleDrive, stickyNote. Webhook trigger; 67 nodes.

Output Parser Structured, Chain Llm, Google Drive +9