AutomationFlowsGeneral › AI CV-JD Matching Workflow

AI CV-JD Matching Workflow

Original n8n title: Cv Filter Worklow

CV_filter_worklow. Uses chainLlm, lmChatGoogleGemini, readWriteFile, formTrigger. Event-driven trigger; 9 nodes.

Event trigger★★★★☆ complexityAI-powered9 nodesChain LlmGoogle Gemini ChatRead Write FileForm Trigger
General Trigger: Event Nodes: 9 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow follows the Chainllm → 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
{
  "name": "CV_filter_worklow",
  "nodes": [
    {
      "parameters": {
        "mode": "chooseBranch"
      },
      "type": "n8n-nodes-base.merge",
      "typeVersion": 3.2,
      "position": [
        288,
        -16
      ],
      "id": "b20edc2b-0240-4baa-b84b-cc37a73db895",
      "name": "Merge"
    },
    {
      "parameters": {
        "assignments": {
          "assignments": [
            {
              "id": "79dca875-ef11-4c04-aaa3-a7930ff5f4d0",
              "name": "jd_text",
              "value": "={{ $node['Extract_JD'].json.text }}",
              "type": "string"
            },
            {
              "id": "f923b3b4-d3a1-4225-bb08-ee6c602b363b",
              "name": "=cv_text",
              "value": "={{ $node['Extract_CV'].json.text }}",
              "type": "string"
            },
            {
              "id": "2bd94f77-6642-46c5-adb9-a981584f44b5",
              "name": "",
              "value": "",
              "type": "string"
            }
          ]
        },
        "includeOtherFields": true,
        "options": {}
      },
      "type": "n8n-nodes-base.set",
      "typeVersion": 3.4,
      "position": [
        464,
        -16
      ],
      "id": "391a9573-a294-477c-877e-2dee60ebdfeb",
      "name": "Edit Fields"
    },
    {
      "parameters": {
        "operation": "pdf",
        "binaryPropertyName": "JD_file",
        "options": {}
      },
      "type": "n8n-nodes-base.extractFromFile",
      "typeVersion": 1.1,
      "position": [
        0,
        -96
      ],
      "id": "8b07cbd2-216d-486b-95da-c82a5bdbe51f",
      "name": "Extract_JD"
    },
    {
      "parameters": {
        "operation": "pdf",
        "binaryPropertyName": "CV_file",
        "options": {}
      },
      "type": "n8n-nodes-base.extractFromFile",
      "typeVersion": 1.1,
      "position": [
        0,
        96
      ],
      "id": "52b79d0f-be4b-45cd-8dbf-1a9ebf642005",
      "name": "Extract_CV"
    },
    {
      "parameters": {
        "promptType": "define",
        "text": "=Instruction: \nYou are an expert resume evaluator.\n\nI will provide you with:\n\n1. Job Description (JD) : {{ $json.jd_text }}\n\n2. Candidate Resume : {{ $json.cv_text }}\n\nYour task:\n\n- Compare the resume against the JD.\n- Identify skill match, experience match, technology match, and role responsibilities match.\n- Calculate a match percentage (0\u2013100%) based on how closely the resume aligns with the JD.\n- Then give the final result using the following rules:\n\nIf matched % >= 80:\n   result : most suitable candidate\n   matched % : <percentage>\n\nIf matched % >= 60 and < 80:\n   result : suitable candidate\n   matched % : <percentage>\n\nIf matched % < 60:\n   result : not suitable candidate\n   matched % : <percentage>\n\nOutput Format: need json as output (Strictly follow this):\nname : <candidate name>\nContact number: <candidate contact number>\nresult : <result_text>\nmatched % : <percentage>\nmatched skill: <list of skill from grater to lower matched percentage>",
        "messages": {
          "messageValues": [
            {
              "message": "You are an expert resume evaluator. compare JD and CV fairly."
            }
          ]
        },
        "batching": {}
      },
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "typeVersion": 1.7,
      "position": [
        704,
        -16
      ],
      "id": "49597227-6942-4466-a8f6-ea14b1883096",
      "name": "Basic LLM Chain"
    },
    {
      "parameters": {
        "options": {}
      },
      "type": "@n8n/n8n-nodes-langchain.lmChatGoogleGemini",
      "typeVersion": 1,
      "position": [
        704,
        208
      ],
      "id": "ab13dc88-1a5f-48d4-a918-548430ae3543",
      "name": "Google Gemini Chat Model",
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "toJson",
        "binaryPropertyName": "=result",
        "options": {}
      },
      "type": "n8n-nodes-base.convertToFile",
      "typeVersion": 1.1,
      "position": [
        1088,
        -16
      ],
      "id": "0b40f7fa-578b-428e-9cae-6892b1d8d9de",
      "name": "Convert to File"
    },
    {
      "parameters": {
        "operation": "write",
        "fileName": "E:/Study/genAI/n8n/shortListed_resume/result.json",
        "dataPropertyName": "=result",
        "options": {
          "append": true
        }
      },
      "type": "n8n-nodes-base.readWriteFile",
      "typeVersion": 1,
      "position": [
        1312,
        -16
      ],
      "id": "408a15f3-ccf3-43ac-8495-c48b20b092d1",
      "name": "Write Files to Disk"
    },
    {
      "parameters": {
        "formTitle": "Upload pdf files here",
        "formFields": {
          "values": [
            {
              "fieldLabel": "JD file",
              "fieldType": "file",
              "multipleFiles": false,
              "acceptFileTypes": ".pdf",
              "requiredField": true
            },
            {
              "fieldLabel": "CV file",
              "fieldType": "file",
              "acceptFileTypes": ".pdf",
              "requiredField": true
            }
          ]
        },
        "options": {}
      },
      "type": "n8n-nodes-base.formTrigger",
      "typeVersion": 2.3,
      "position": [
        -288,
        0
      ],
      "id": "d5213675-833c-4ca4-a23e-3032e9e442b4",
      "name": "On form submission"
    }
  ],
  "connections": {
    "Merge": {
      "main": [
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract_JD": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract_CV": {
      "main": [
        [
          {
            "node": "Merge",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Edit Fields": {
      "main": [
        [
          {
            "node": "Basic LLM Chain",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Gemini Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Basic LLM Chain",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Basic LLM Chain": {
      "main": [
        [
          {
            "node": "Convert to File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Convert to File": {
      "main": [
        [
          {
            "node": "Write Files to Disk",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Write Files to Disk": {
      "main": [
        []
      ]
    },
    "On form submission": {
      "main": [
        [
          {
            "node": "Extract_JD",
            "type": "main",
            "index": 0
          },
          {
            "node": "Extract_CV",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": true,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "60ad19e9-8a76-4349-858c-ba433b94cb61",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "id": "jt96LFkqype40o8u",
  "tags": []
}

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

CV_filter_worklow. Uses chainLlm, lmChatGoogleGemini, readWriteFile, formTrigger. Event-driven trigger; 9 nodes.

Source: https://github.com/YashNigam65/gitfolder/blob/29b3339855203c779cd567af7719ceb1788784aa/n8n/n8n_for_upload/CV_filter_worklow.json — original creator credit. Request a take-down →

More General workflows → · Browse all categories →

Related workflows

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

General

High-Level Service Page SEO Blueprint Report. Uses formTrigger, splitInBatches, httpRequest, lmChatGoogleGemini. Event-driven trigger; 33 nodes.

Form Trigger, HTTP Request, Google Gemini Chat +1
General

Brand Content Extract, Summarize & Sentiment Analysis with Bright Data. Uses manualTrigger, stickyNote, chainLlm, informationExtractor. Event-driven trigger; 23 nodes.

Chain Llm, Information Extractor, HTTP Request +3
General

Structured Data Extract, Data Mining with Bright Data & Google Gemini. Uses manualTrigger, stickyNote, chainLlm, httpRequest. Event-driven trigger; 18 nodes.

Chain Llm, HTTP Request, Google Gemini Chat +2
General

This workflow uses AI to automatically generate clear and descriptive names for every node in your n8n workflows. It analyzes each node's type, parameters, and connections to create meaningful names,

n8n, Chain Llm, Output Parser Structured +4
General

Code Editimage. Uses manualTrigger, lmChatGoogleGemini, sort, stickyNote. Event-driven trigger; 20 nodes.

Google Gemini Chat, Google Drive, HTTP Request +4