AutomationFlowsAI & RAG › Classify Emails & Extract Structured Data From Job Applications with Gpt-4o

Classify Emails & Extract Structured Data From Job Applications with Gpt-4o

BySleak @sleak on n8n.io

This workflow template is designed for business owners and HR professionals to automatically detect and structure unstructured job applications received through email. Additionally, other email categories can be added, each with it's own workflow. Every time a new email is…

Manual trigger★★★☆☆ complexityAI-powered10 nodesEmail Read ImapText ClassifierInformation ExtractorOpenAI Chat
AI & RAG Trigger: Manual Nodes: 10 Complexity: ★★★☆☆ AI nodes: yes Added:

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

This workflow follows the Informationextractor → OpenAI Chat 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": "39KuujB1fbOvx8Al",
  "name": "OpenAI e-mail classification - application",
  "tags": [],
  "nodes": [
    {
      "id": "6156844f-d1ba-413d-9ab2-02148bef5bf0",
      "name": "Email trigger",
      "type": "n8n-nodes-base.emailReadImap",
      "position": [
        -440,
        120
      ],
      "parameters": {
        "format": "resolved",
        "options": {},
        "postProcessAction": "nothing",
        "dataPropertyAttachmentsPrefixName": "attachment"
      },
      "credentials": {
        "imap": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "1aedaa56-d988-469b-86b9-61d50e707950",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        0
      ],
      "parameters": {
        "height": 200,
        "content": "### Change or add any category you want\nEach category can be assigned it's own specific workflow"
      },
      "typeVersion": 1
    },
    {
      "id": "d41ba844-2b99-42bb-80df-cff1b97dcbb9",
      "name": "Classify email",
      "type": "@n8n/n8n-nodes-langchain.textClassifier",
      "position": [
        0,
        120
      ],
      "parameters": {
        "options": {},
        "inputText": "={{ $('Email trigger').first().json.text }}\n\nattachment:\n{{ $('Extract data from attachment').first().json.text }}\n",
        "categories": {
          "categories": [
            {
              "category": "job_application",
              "description": "for job applications"
            },
            {
              "category": "inbound_lead",
              "description": "for sales inquiries or requests for more information about our products/services"
            },
            {
              "category": "invoice",
              "description": "for invoices"
            },
            {
              "category": "other",
              "description": "for all other sorts of emails"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "b63a864f-f968-4e7e-9da4-d704f3ffa022",
      "name": "Extract variables - email & attachment",
      "type": "@n8n/n8n-nodes-langchain.informationExtractor",
      "position": [
        440,
        20
      ],
      "parameters": {
        "text": "={{ $('Email trigger').first().json.text }}\n\nResume:\n{{ $('Extract data from attachment').first().json.text }}\n",
        "options": {},
        "attributes": {
          "attributes": [
            {
              "name": "first_name",
              "description": "first name of the applicant"
            },
            {
              "name": "last_name",
              "description": "last name of the applicant"
            },
            {
              "name": "age",
              "description": "age of the applicant"
            },
            {
              "name": "residence",
              "description": "residence of the applicant"
            },
            {
              "name": "study",
              "description": "relevant completed study of the applicant"
            },
            {
              "name": "work_experience",
              "description": "relevant work experience of the applicant"
            },
            {
              "name": "personal_character",
              "description": "personal characteristics of the applicant"
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "398b9240-0d9c-416e-af3b-31ba9e1ac9b2",
      "name": "Extract data from attachment",
      "type": "n8n-nodes-base.extractFromFile",
      "onError": "continueRegularOutput",
      "position": [
        -220,
        120
      ],
      "parameters": {
        "options": {},
        "operation": "pdf",
        "binaryPropertyName": "attachment0"
      },
      "typeVersion": 1,
      "alwaysOutputData": false
    },
    {
      "id": "9f949aac-1681-4f04-983e-8bd5c949987a",
      "name": "OpenAI Chat Model 2",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        660,
        200
      ],
      "parameters": {
        "model": "gpt-4o",
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "c7a61afe-d68d-407e-8653-46cb123877e9",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        100,
        320
      ],
      "parameters": {
        "model": "gpt-4o",
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "5a22e81b-8b60-443e-985b-47d493724389",
      "name": "Workflow 2",
      "type": "n8n-nodes-base.noOp",
      "position": [
        440,
        180
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "808e4f35-604e-4354-ab8b-3ba68940016b",
      "name": "Workflow 3",
      "type": "n8n-nodes-base.noOp",
      "position": [
        600,
        360
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "d793675d-c68d-4f73-a99d-6451be5bea30",
      "name": "workflow 4",
      "type": "n8n-nodes-base.noOp",
      "position": [
        440,
        360
      ],
      "parameters": {},
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "errorWorkflow": "rkMQmtrfcSF3XpMF",
    "executionOrder": "v1"
  },
  "versionId": "28448ab7-6d45-41df-9de3-aad0e187edc5",
  "connections": {
    "Email trigger": {
      "main": [
        [
          {
            "node": "Extract data from attachment",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Classify email": {
      "main": [
        [
          {
            "node": "Extract variables - email & attachment",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Workflow 2",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Workflow 3",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "workflow 4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Classify email",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model 2": {
      "ai_languageModel": [
        [
          {
            "node": "Extract variables - email & attachment",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Extract data from attachment": {
      "main": [
        [
          {
            "node": "Classify email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract variables - email & attachment": {
      "main": [
        []
      ]
    }
  }
}

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 template is designed for business owners and HR professionals to automatically detect and structure unstructured job applications received through email. Additionally, other email categories can be added, each with it's own workflow. Every time a new email is…

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

Detects new unread Gmail messages Extracts sender name for personalized replies Classifies the email into one of four categories Applies the correct Gmail label and either sends an auto-reply, creates

Gmail Trigger, OpenAI Chat, Gmail +4
AI & RAG

Workflow 3545. Uses informationExtractor, lmChatOpenAi, microsoftOutlook, microsoftOutlookTrigger. Event-driven trigger; 22 nodes.

Information Extractor, OpenAI Chat, Microsoft Outlook +2
AI & RAG

Data entry jobs with user-submitted XLSX forms are time consuming, incredibly mundane but necessary tasks which in likelihood are inherited and critical to business operation.

Information Extractor, OpenAI Chat, Microsoft Outlook +2
AI & RAG

Email Automation. Uses gmailTrigger, textClassifier, lmChatOpenAi, openAi. Event-driven trigger; 13 nodes.

Gmail Trigger, Text Classifier, OpenAI Chat +5
AI & RAG

This template automates the extraction of structured data from Thai government letters received via LINE or uploaded to Google Drive. It uses Mistral AI for OCR and OpenAI for information extraction,

HTTP Request, Google Drive Trigger, Google Drive +4