AutomationFlowsAI & RAG › Extract Structured Candidate Data From Resumes with Gpt AI

Extract Structured Candidate Data From Resumes with Gpt AI

ByAngel Menendez @djangelic on n8n.io

This workflow is perfect for HR teams, recruiters, and hiring platforms that need to automate the extraction of key candidate details—like name, email, skills, and education—from resume files submitted in various formats.

Chat trigger trigger★★★★☆ complexityAI-powered20 nodesChat TriggerAgentOpenAI ChatOutput Parser StructuredGoogle Sheets
AI & RAG Trigger: Chat trigger Nodes: 20 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Agent → Chat 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
{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "98df1ef4-b57a-43a6-a928-d765559f747c",
      "name": "When chat message received",
      "type": "@n8n/n8n-nodes-langchain.chatTrigger",
      "position": [
        -100,
        1140
      ],
      "parameters": {
        "options": {
          "allowFileUploads": true
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "94e30376-80da-497e-830f-21dae01580f5",
      "name": "Switch",
      "type": "n8n-nodes-base.switch",
      "position": [
        120,
        1014
      ],
      "parameters": {
        "rules": {
          "values": [
            {
              "outputKey": "CSV",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "fcf85095-1221-4490-9d30-e10d7c3b686c",
                    "operator": {
                      "type": "string",
                      "operation": "contains"
                    },
                    "leftValue": "={{ $json.files[0].fileName.toLowerCase() }}",
                    "rightValue": ".csv"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "HTML",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "58e60d14-1beb-47b8-8789-6cee2b2bb224",
                    "operator": {
                      "type": "string",
                      "operation": "contains"
                    },
                    "leftValue": "={{ $json.files[0].fileName.toLowerCase() }}",
                    "rightValue": ".html"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "ODS",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "afce5705-212f-4e56-ac34-8b99e15a0806",
                    "operator": {
                      "type": "string",
                      "operation": "contains"
                    },
                    "leftValue": "={{ $json.files[0].fileName.toLowerCase() }}",
                    "rightValue": ".ods"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "PDF",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "bb223b8a-826c-488b-9eb7-b1b50a6aef7f",
                    "operator": {
                      "type": "string",
                      "operation": "contains"
                    },
                    "leftValue": "={{ $json.files[0].fileName.toLowerCase() }}",
                    "rightValue": ".pdf"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "RTF",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "29d5bf9a-69fb-4e01-8ea9-2ca7c8b3fc9c",
                    "operator": {
                      "type": "string",
                      "operation": "contains"
                    },
                    "leftValue": "={{ $json.files[0].fileName.toLowerCase() }}",
                    "rightValue": ".rtf"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "TXT",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "d2e22acb-adbb-43d9-8a18-70851be20ea5",
                    "operator": {
                      "type": "string",
                      "operation": "contains"
                    },
                    "leftValue": "={{ $json.files[0].fileName.toLowerCase() }}",
                    "rightValue": ".txt"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "XML",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "257adc56-8632-4671-9237-4e233b95e3fe",
                    "operator": {
                      "type": "string",
                      "operation": "contains"
                    },
                    "leftValue": "={{ $json.files[0].fileName.toLowerCase() }}",
                    "rightValue": ".xml"
                  }
                ]
              },
              "renameOutput": true
            },
            {
              "outputKey": "XLS",
              "conditions": {
                "options": {
                  "version": 2,
                  "leftValue": "",
                  "caseSensitive": true,
                  "typeValidation": "strict"
                },
                "combinator": "and",
                "conditions": [
                  {
                    "id": "d4673034-eaca-4f4c-9c37-104ffe0bb170",
                    "operator": {
                      "type": "string",
                      "operation": "contains"
                    },
                    "leftValue": "={{ $json.files[0].fileName.toLowerCase() }}",
                    "rightValue": ".xls"
                  }
                ]
              },
              "renameOutput": true
            }
          ]
        },
        "options": {
          "fallbackOutput": "extra"
        }
      },
      "typeVersion": 3.2
    },
    {
      "id": "e16c87a4-86d0-4878-96bb-a0228ca621b0",
      "name": "Edit Fields",
      "type": "n8n-nodes-base.set",
      "position": [
        780,
        1040
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "70ba1c39-f90f-44ac-9fdc-9a8a8d188484",
              "name": "text",
              "type": "string",
              "value": "={{ $json.text }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "b752e83e-3052-43d1-9418-4d433e351614",
      "name": "AI Agent1",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1000,
        1040
      ],
      "parameters": {
        "text": "={{ $json.text }}",
        "options": {
          "systemMessage": "You are a helpful assistant that extracts email, name, skills, and education from resume text. "
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.9
    },
    {
      "id": "0944cce4-d5b7-4e48-a466-1aa8f3b76e26",
      "name": "OpenAI Chat Model1",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1028,
        1260
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "58a42607-b1b4-43e0-884f-5a13e706edf8",
      "name": "Structured Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        1148,
        1260
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"name\": \"Angel Menendez\",\n  \"email\": \"user@example.com\",\n  \"skills\": \"JavaScript, Node.js, n8n, Docker, REST APIs\",\n  \"education\": \"B.S. in Computer Science, University of Arizona, 2010\"\n}\n"
      },
      "typeVersion": 1.2
    },
    {
      "id": "42d5ebda-7d49-40ef-8c44-2fa57ec68f3e",
      "name": "Validate Output",
      "type": "n8n-nodes-base.set",
      "onError": "continueErrorOutput",
      "position": [
        1376,
        1040
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "4a062055-7dde-447e-ada1-0032f46af02a",
              "name": "output.name",
              "type": "string",
              "value": "={{ $json.output.name }}"
            },
            {
              "id": "bf28519f-f8e3-4b26-bee4-7758340df194",
              "name": "output.email",
              "type": "string",
              "value": "={{ $json.output.email }}"
            },
            {
              "id": "24975388-f25a-4c86-a995-9ec2cf819c13",
              "name": "output.skills",
              "type": "string",
              "value": "={{ $json.output.skills }}"
            },
            {
              "id": "c410f2d2-00e1-499b-9346-553164881465",
              "name": "output.education",
              "type": "string",
              "value": "={{ $json.output.education }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "1235bbab-c227-4054-b8ce-007f39a805f5",
      "name": "Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "disabled": true,
      "position": [
        1596,
        940
      ],
      "parameters": {
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "bc4ca090-6c51-49e8-989a-147a6e720411",
      "name": "Edit Fields1",
      "type": "n8n-nodes-base.set",
      "position": [
        1596,
        1140
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "3fb8fe8f-a5f5-4c00-a8d2-39cd3e35615e",
              "name": "output",
              "type": "string",
              "value": "Unable to parse the agent outputs"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "7b0211f3-1925-4709-b274-e8d23437bb12",
      "name": "Edit Fields2",
      "type": "n8n-nodes-base.set",
      "position": [
        340,
        1890
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "3fb8fe8f-a5f5-4c00-a8d2-39cd3e35615e",
              "name": "output",
              "type": "string",
              "value": "Unable to parse the file data"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "8b178bfb-ff80-4600-b6e2-1fe252c11f45",
      "name": "Edit Fields3",
      "type": "n8n-nodes-base.set",
      "position": [
        1816,
        940
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "3fb8fe8f-a5f5-4c00-a8d2-39cd3e35615e",
              "name": "output",
              "type": "string",
              "value": "=Name: {{ $json.output.name }}\nEmail: {{ $json.output.email }}\nSkills: {{ $json.output.skills }}\nEducation: {{ $json.output.education }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "5d4372fc-d63b-49d2-a2b6-70fd194ba550",
      "name": "Extract from CSV",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        340,
        340
      ],
      "parameters": {
        "options": {},
        "binaryPropertyName": "data0"
      },
      "typeVersion": 1
    },
    {
      "id": "2eb2d95e-5453-47ad-a548-dbeaa32e3dbb",
      "name": "Extract from HTML",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        560,
        540
      ],
      "parameters": {
        "options": {},
        "operation": "html",
        "binaryPropertyName": "data0"
      },
      "typeVersion": 1
    },
    {
      "id": "45c74d33-e46b-43ca-a71f-e16aa28910a2",
      "name": "Extract from ODS",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        560,
        740
      ],
      "parameters": {
        "options": {},
        "operation": "ods",
        "binaryPropertyName": "data0"
      },
      "typeVersion": 1
    },
    {
      "id": "a2bf9dbe-94d0-4432-b8cc-5db69451e013",
      "name": "Extract from PDF",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        560,
        940
      ],
      "parameters": {
        "options": {},
        "operation": "pdf",
        "binaryPropertyName": "data0"
      },
      "typeVersion": 1
    },
    {
      "id": "1bc7dbd2-1ce0-4244-8454-29eeb7b5fb64",
      "name": "Extract from RTF",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        560,
        1140
      ],
      "parameters": {
        "options": {},
        "operation": "rtf",
        "binaryPropertyName": "data0"
      },
      "typeVersion": 1
    },
    {
      "id": "279cc40d-373a-48e3-9f53-4498d0181302",
      "name": "Extract from TXT",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        560,
        1340
      ],
      "parameters": {
        "options": {},
        "operation": "text",
        "destinationKey": "text",
        "binaryPropertyName": "data0"
      },
      "typeVersion": 1
    },
    {
      "id": "7aa0c6f1-2630-4e0d-90e8-cd0d060327b2",
      "name": "Extract from XLS",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        560,
        1740
      ],
      "parameters": {
        "options": {},
        "operation": "xls",
        "binaryPropertyName": "data0"
      },
      "typeVersion": 1
    },
    {
      "id": "f65cf46c-3482-4757-a087-3f48cb19c30b",
      "name": "Extract from XML",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        560,
        1540
      ],
      "parameters": {
        "options": {},
        "operation": "xml",
        "destinationKey": "text",
        "binaryPropertyName": "data0"
      },
      "typeVersion": 1
    },
    {
      "id": "209e973c-a4ac-49bc-b977-90f2d1de487c",
      "name": "Aggregate",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        560,
        340
      ],
      "parameters": {
        "options": {},
        "aggregate": "aggregateAllItemData",
        "destinationFieldName": "text"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Switch": {
      "main": [
        [
          {
            "node": "Extract from CSV",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Extract from HTML",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Extract from ODS",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Extract from PDF",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Extract from RTF",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Extract from TXT",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Extract from XML",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Extract from XLS",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Edit Fields2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent1": {
      "main": [
        [
          {
            "node": "Validate Output",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate": {
      "main": [
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields": {
      "main": [
        [
          {
            "node": "AI Agent1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Google Sheets": {
      "main": [
        [
          {
            "node": "Edit Fields3",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Validate Output": {
      "main": [
        [
          {
            "node": "Google Sheets",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Edit Fields1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract from CSV": {
      "main": [
        [
          {
            "node": "Aggregate",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract from ODS": {
      "main": [
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract from PDF": {
      "main": [
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract from RTF": {
      "main": [
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract from TXT": {
      "main": [
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract from XLS": {
      "main": [
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract from XML": {
      "main": [
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract from HTML": {
      "main": [
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model1": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent1",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "AI Agent1",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "When chat message received": {
      "main": [
        [
          {
            "node": "Switch",
            "type": "main",
            "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

This workflow is perfect for HR teams, recruiters, and hiring platforms that need to automate the extraction of key candidate details—like name, email, skills, and education—from resume files submitted in various formats.

Source: https://n8n.io/workflows/5752/ — 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

HDW Lead Geländewagen. Uses chatTrigger, lmChatOpenAi, memoryBufferWindow, outputParserStructured. Chat trigger; 92 nodes.

Chat Trigger, OpenAI Chat, Memory Buffer Window +5
AI & RAG

Who’s it for Creators who want to create faceless videos automatically, while keeping human oversight and quality control.

Read Write File, Agent, OpenAI Chat +7
AI & RAG

The Best Linkedin Posting System. Uses httpRequest, lmChatOpenAi, agent, chatTrigger. Chat trigger; 49 nodes.

HTTP Request, OpenAI Chat, Agent +8
AI & RAG

Who is this workflow for? This workflow is designed for SEO analysts, content creators, marketing agencies, and developers who need to index a website and then interact with its content as if it were

Agent, OpenAI Chat, Memory Buffer Window +10
AI & RAG

This project is an automation workflow that generates a personalized resume and cover letter for each job listing. Generates an HTML resume from your data. Hosts it live on GitHub Pages. Converts it t

HTTP Request, Agent, OpenAI Chat +10