AutomationFlowsAI & RAG › Ai-powered Cv Extractor: Google Drive to Sheet with Gpt-4 + Slack for Recruiters

Ai-powered Cv Extractor: Google Drive to Sheet with Gpt-4 + Slack for Recruiters

ByTrung Tran @trungtran on n8n.io

[](https://www.youtube.com/watch?v=T9gnSsjYfvY) > This workflow automatically processes resumes (PDFs) uploaded or updated in a Google Drive folder. It extracts and structures the candidate’s information using AI, then updates or inserts the data into a Google Sheet, acting…

Event trigger★★★★☆ complexityAI-powered19 nodesOutput Parser StructuredOpenAI ChatAgentGoogle Drive TriggerGoogle DriveGoogle SheetsSlack
AI & RAG Trigger: Event Nodes: 19 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Agent → Google Drive 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": "9VCREU4uPSEXk3NC",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "CV Extractor: Google Drive to Sheet + Slack Update for Recruiters",
  "tags": [
    {
      "id": "wY9quKLFDXXYP37h",
      "name": "HR Workflow",
      "createdAt": "2025-09-08T02:33:58.226Z",
      "updatedAt": "2025-09-08T02:33:58.226Z"
    }
  ],
  "nodes": [
    {
      "id": "6377e3d8-18f1-4f07-93b1-3ec4a8f0b9bf",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1392,
        288
      ],
      "parameters": {
        "color": 5,
        "width": 604,
        "height": 528,
        "content": "## 1. Trigger workflow when new profile upload/edit (every 5 mins)\n- Workflow auto trigger when new profile uploaded to Google Drive folder\n- Workflow auto trigger when existing profile upaded in Google Drive folder"
      },
      "typeVersion": 1
    },
    {
      "id": "41adeefa-7ab5-47d9-babe-852d84a16f1a",
      "name": "json parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        2768,
        704
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"full_name\": \"\",\n  \"job_title\": \"\",\n  \"summary\": \"\",\n  \"contact\": {\n    \"email\": \"\",\n    \"phone\": \"\",\n    \"address\": \"\",\n    \"linkedin\": \"\",\n    \"website\": \"\"\n  },\n  \"education\": [\n    {\n      \"degree\": \"\",\n      \"field_of_study\": \"\",\n      \"institution\": \"\",\n      \"location\": \"\",\n      \"start_year\": \"\",\n      \"end_year\": \"\"\n    }\n  ],\n  \"certifications\": [\n    {\n      \"name\": \"\",\n      \"issuer\": \"\",\n      \"date_obtained\": \"\",\n      \"expiration_date\": \"\"\n    }\n  ],\n  \"work_experience\": [\n    {\n      \"company\": \"\",\n      \"position\": \"\",\n      \"location\": \"\",\n      \"start_date\": \"\",\n      \"end_date\": \"\",\n      \"responsibilities\": [\n        \"\"\n      ],\n      \"achievements\": [\n        \"\"\n      ]\n    }\n  ],\n  \"skills\": {\n    \"technical_skills\": [\n      \"\"\n    ],\n    \"soft_skills\": [\n      \"\"\n    ],\n    \"languages\": [\n      {\n        \"language\": \"\",\n        \"proficiency\": \"\"\n      }\n    ],\n    \"tools_and_technologies\": [\n      \"\"\n    ]\n  },\n  \"projects\": [\n    {\n      \"name\": \"\",\n      \"description\": \"\",\n      \"technologies_used\": [\n        \"\"\n      ],\n      \"role\": \"\",\n      \"duration\": \"\"\n    }\n  ],\n  \"awards\": [\n    {\n      \"title\": \"\",\n      \"issuer\": \"\",\n      \"date\": \"\",\n      \"description\": \"\"\n    }\n  ],\n  \"volunteer_experience\": [\n    {\n      \"organization\": \"\",\n      \"role\": \"\",\n      \"description\": \"\",\n      \"start_date\": \"\",\n      \"end_date\": \"\"\n    }\n  ],\n  \"additional_information\": {\n    \"availability\": \"\",\n    \"preferred_location\": \"\",\n    \"salary_expectation\": \"\",\n    \"work_authorization\": \"\",\n    \"other_notes\": \"\"\n  }\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "c6f55faa-2836-40d9-a269-3eb858cfe2d0",
      "name": "gpt4-1 model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        2592,
        704
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "a77686bd-49d9-4723-bd5e-29900065ba3b",
      "name": "Profile Analyzer Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        2608,
        512
      ],
      "parameters": {
        "text": "=Please extract all relevant information from this candiadte:\nCV Content:\n===\n{{ $json[\"text\"] }}\n===",
        "options": {
          "systemMessage": ""
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2.1
    },
    {
      "id": "ff047939-b427-4a21-96c2-b02b22db2b4e",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        304,
        288
      ],
      "parameters": {
        "width": 1040,
        "height": 2256,
        "content": "# CV Extractor: Google Drive to Sheet + Slack Update for Recruiters\n### Watch the demo video below:\n[![Watch the video](https://s3.ap-southeast-1.amazonaws.com/automatewith.me/automation-resumes-extract-n8n-workflow.jpg)](https://www.youtube.com/watch?v=T9gnSsjYfvY)\n> This workflow automatically processes resumes (PDFs) uploaded or updated in a Google Drive folder. It extracts and structures the candidate\u2019s information using AI, then updates or inserts the data into a Google Sheet, acting as a central talent database. Finally, it notifies the hiring team via Slack with a summary. Perfect for HR and TA teams, this automation eliminates the repetitive task of manually copying candidate details from CVs into spreadsheets, saving hours of admin work every week and keeping your hiring pipeline clean, fast, and up to date.\n## \ud83d\udc64 Who\u2019s it for\nThis workflow is designed for:\n- **Recruiters** and **HR coordinators** who manage candidate profiles via Google Drive.\n- **Talent Acquisition teams** who want to automate CV parsing, enrichment, and database updating.\n- **Companies or hiring agencies** using spreadsheets for candidate tracking and CRM-like HR ops.\n## \u2699\ufe0f How it works / What it does\nThis smart and fully automated workflow:\n1. **Monitors a Google Drive folder** for any uploaded or updated resumes (PDFs).\n2. **Downloads and extracts** resume content using PDF parsing.\n3. **Sends the raw text to GPT-4**, which returns a structured profile (name, title, experience, skills, etc.).\n4. **Verifies the profile** and transforms it into a clean, row-based format.\n5. **Upserts the candidate profile** into a Google Sheet (insert or update by email).\n6. **Notifies the hiring team** in Slack or email that a profile was added or updated.\n\nThis is a no-touch pipeline to keep your candidate data clean, current, and centralized.\n## \ud83d\udee0\ufe0f How to set up\n### Step 1: Prepare your Google Drive folder\n- Create a folder like `/SmartHR/cv/`\n- Upload sample resumes in `.pdf` format\n\n### Step 2: Create your Google Sheet\n- Columns to include: `Email`, `FullName`, `JobTitle`, `Phone`, `Location`, `Experience`, `Education`, `Skills`, etc.\n- Optional: Add conditional formatting to highlight updates\n\n### Step 3: Connect the n8n workflow\n- Use the **Google Drive Trigger**:\n  - `fileCreated` \u2192 new profile uploaded\n  - `fileUpdated` \u2192 existing profile modified\n- Use **Google Drive (Download file)** to fetch the resume\n- Use **Extract From PDF** to get raw content\n\n### Step 4: Configure GPT-4 node\n- Use the structured system prompt to extract profile information\n- Use `json parser` node to ensure safe formatting for next steps\n\n### Step 5: Transform & Save\n- Use a Function node to map fields to Google Sheet columns\n- Use `Append or update row` (based on email as unique key)\n- Optionally send Slack or email message to notify hiring team\n\n## \u2705 Requirements\n\n- \ud83d\udd11 OpenAI GPT-4 API key\n- \ud83d\udfe9 n8n Cloud or Self-hosted with:\n  - Google Drive integration\n  - Google Sheets integration\n  - Email/Slack credentials (optional)\n- \ud83d\udcc4 Resume files in readable PDF format\n- \ud83d\udcca Google Sheet prepared with relevant headers\n\n## \u270f\ufe0f How to customize the workflow\n\n| Part                        | Customization Options                                                                 |\n|----------------------------|----------------------------------------------------------------------------------------|\n| **GPT Prompt**             | Tune for different job levels or fields (e.g., engineers vs marketers)                |\n| **Field Mapping**          | Update transform node to include other profile fields (LinkedIn, portfolio, etc.)     |\n| **Notification**           | Switch to Microsoft Teams, Telegram, or email alerts instead of Slack                 |\n| **Data Store**             | Replace Google Sheet with Airtable, Notion, or database system                        |\n| **Trigger Source**         | Trigger from email attachments or webhook instead of Google Drive if needed           |\n| **Output Format**          | Generate PDF profile cards or summary documents using HTML \u2192 PDF node                 |"
      },
      "typeVersion": 1
    },
    {
      "id": "d3c7e68f-6ff0-4e53-9ae0-8f713311322e",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1392,
        848
      ],
      "parameters": {
        "width": 1020,
        "height": 340,
        "content": "![Alt text](https://wisestackai.s3.ap-southeast-1.amazonaws.com/Screenshot+2025-08-02+at+12.27.16%E2%80%AFPM.png \"Optional title text\")\n"
      },
      "typeVersion": 1
    },
    {
      "id": "0129be50-4384-4e88-a583-4e2753607907",
      "name": "Transform output",
      "type": "n8n-nodes-base.code",
      "position": [
        3312,
        512
      ],
      "parameters": {
        "jsCode": "const profile = $input.first().json.output\n\n// Get most recent job\nconst work = profile.work_experience || [];\nconst latest = work.length > 0 ? work[0] : {};\n\nfunction formatDate(dateStr) {\n  const date = new Date(dateStr);\n  return isNaN(date) ? dateStr : `${date.getFullYear()}-${(date.getMonth() + 1).toString().padStart(2, '0')}`;\n}\n\nfunction getExperienceYears(experiences) {\n  if (experiences.length === 0) return '';\n  const startDates = experiences.map(e => new Date(e.start_date)).filter(d => !isNaN(d));\n  const endDates = experiences.map(e => new Date(e.end_date === 'Present' ? new Date() : e.end_date)).filter(d => !isNaN(d));\n  if (startDates.length === 0 || endDates.length === 0) return '';\n  const start = new Date(Math.min(...startDates));\n  const end = new Date(Math.max(...endDates));\n  const diffYears = (end - start) / (1000 * 60 * 60 * 24 * 365);\n  return `${Math.floor(diffYears)} years`;\n}\n\nfunction formatEducation(edus) {\n  if (!edus || edus.length === 0) return '';\n  return edus.map(e => {\n    const start = new Date(e.start_year);\n    const end = new Date(e.end_year);\n    const startYear = isNaN(start) ? '' : start.getFullYear();\n    const endYear = isNaN(end) ? '' : end.getFullYear();\n    const duration = (startYear && endYear) ? `(${startYear}\u2013${endYear})` : '';\n    return `${e.degree} of ${e.field_of_study} at ${e.institution} ${duration}`;\n  }).join(' | ');\n}\n\nreturn [\n  {\n    json: {\n      FullName: profile.full_name,\n      JobTitle: profile.job_title,\n      Email: profile.contact.email.toLowerCase(),\n      Phone: profile.contact.phone,\n      Location: profile.contact.address,\n      LinkedIn: profile.contact.linkedin,\n      Education: formatEducation(profile.education),\n      Summary: profile.summary,\n      MostRecentCompany: latest.company || '',\n      MostRecentPosition: latest.position || '',\n      StartDate: formatDate(latest.start_date || ''),\n      EndDate: formatDate(latest.end_date || ''),\n      Skills: (profile.skills?.technical_skills || []).slice(0, 3).join(', '),\n      Experience: getExperienceYears(work), \n      ProfileUrl: $('Get profile detail').first().json.webContentLink\n    }\n  }\n];"
      },
      "typeVersion": 2
    },
    {
      "id": "ea1b4a83-ac3d-4c96-87e5-ac21f13ffb4d",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2048,
        304
      ],
      "parameters": {
        "color": 5,
        "width": 364,
        "height": 512,
        "content": "## 2. Extract profile information\n- Download profile form Google Drive\n- Extract profile information from PDF"
      },
      "typeVersion": 1
    },
    {
      "id": "35ddc372-fafa-4bb9-9ad7-1dca2aa6557b",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2480,
        304
      ],
      "parameters": {
        "color": 5,
        "width": 652,
        "height": 512,
        "content": "## 3. Profile Analyzer\n- Smart agent extract all the information from candidate profile and transform to expected output"
      },
      "typeVersion": 1
    },
    {
      "id": "4d98e935-f7f6-4522-adac-8b594dddb5a3",
      "name": "New profile uploaded to drive folder",
      "type": "n8n-nodes-base.googleDriveTrigger",
      "position": [
        1568,
        416
      ],
      "parameters": {
        "event": "fileCreated",
        "options": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyX",
              "unit": "minutes",
              "value": 5
            }
          ]
        },
        "triggerOn": "specificFolder",
        "folderToWatch": {
          "__rl": true,
          "mode": "list",
          "value": "1J9GnGlJ70ppf88eZGrhLIo3jxIaqT1u7",
          "cachedResultUrl": "https://drive.google.com/drive/folders/1J9GnGlJ70ppf88eZGrhLIo3jxIaqT1u7",
          "cachedResultName": "cv"
        }
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "0279bccd-e14d-471d-9206-705472035c71",
      "name": "Get profile detail",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        2096,
        512
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "url",
          "value": "={{ $json.webViewLink }}"
        },
        "options": {},
        "operation": "download"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "ca964937-f0bd-41b7-96b4-c71640fdb5ee",
      "name": "Append or update row in sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        3600,
        432
      ],
      "parameters": {
        "columns": {
          "value": {},
          "schema": [
            {
              "id": "FullName",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "FullName",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "JobTitle",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "JobTitle",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Email",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Email",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Phone",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Phone",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Location",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Location",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "LinkedIn",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "LinkedIn",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Education",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Education",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Summary",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Summary",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "MostRecentCompany",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "MostRecentCompany",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "MostRecentPosition",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "MostRecentPosition",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "StartDate",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "StartDate",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "EndDate",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "EndDate",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Skills",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Skills",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Experience",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Experience",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "ProfileUrl",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "ProfileUrl",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "autoMapInputData",
          "matchingColumns": [
            "Email"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1snHIaidALBJbA_bAxm_SQQLG8vyZ9ZkWFaEOOo3PL6o/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1snHIaidALBJbA_bAxm_SQQLG8vyZ9ZkWFaEOOo3PL6o",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1snHIaidALBJbA_bAxm_SQQLG8vyZ9ZkWFaEOOo3PL6o/edit?usp=drivesdk",
          "cachedResultName": "Processed Candidates"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "fd549ec2-36cb-4948-bbea-d58e40b6a304",
      "name": "Existing profile updated",
      "type": "n8n-nodes-base.googleDriveTrigger",
      "position": [
        1568,
        640
      ],
      "parameters": {
        "event": "fileUpdated",
        "options": {},
        "pollTimes": {
          "item": [
            {
              "mode": "everyX",
              "unit": "minutes",
              "value": 5
            }
          ]
        },
        "triggerOn": "specificFolder",
        "folderToWatch": {
          "__rl": true,
          "mode": "list",
          "value": "1J9GnGlJ70ppf88eZGrhLIo3jxIaqT1u7",
          "cachedResultUrl": "https://drive.google.com/drive/folders/1J9GnGlJ70ppf88eZGrhLIo3jxIaqT1u7",
          "cachedResultName": "cv"
        }
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "09fd43b0-55a9-427b-a874-736aef1f1439",
      "name": "Verify profile email",
      "type": "n8n-nodes-base.filter",
      "position": [
        2976,
        512
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "d03f5a71-8e0c-4196-a6e1-5d5ec7a86894",
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.output.contact.email }}",
              "rightValue": ""
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "7757bff2-7cac-4868-aa82-6171352e357a",
      "name": "Extract profile information",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        2288,
        512
      ],
      "parameters": {
        "options": {},
        "operation": "pdf"
      },
      "typeVersion": 1
    },
    {
      "id": "aab959dc-21ab-4634-bfcc-c2e44710e713",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3200,
        304
      ],
      "parameters": {
        "color": 5,
        "width": 620,
        "height": 512,
        "content": "## 4. Upsert record to google sheet\n- Candidate profile has been extract, analyze and transofrm to be able to save in a well-structured format in google sheet for later use"
      },
      "typeVersion": 1
    },
    {
      "id": "d96f6dbe-608b-479a-b5f5-015813207844",
      "name": "Let the hiring team know",
      "type": "n8n-nodes-base.slack",
      "position": [
        3600,
        624
      ],
      "parameters": {
        "text": "={{ $json.FullName }} profile has been processed and recorded in Google Drive!",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "list",
          "value": "C09E9SDE99P",
          "cachedResultName": "all-automatewithme"
        },
        "otherOptions": {}
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "945a2279-2544-496a-8bfd-5d18cf61ede4",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3840,
        656
      ],
      "parameters": {
        "color": 5,
        "width": 1020,
        "height": 244,
        "content": "![Alt text](https://wisestackai.s3.ap-southeast-1.amazonaws.com/Screenshot+2025-08-02+at+12.39.47%E2%80%AFPM.png \"Optional title text\")"
      },
      "typeVersion": 1
    },
    {
      "id": "03c6e2c5-6a14-43b0-967e-93f7d2b3f5ea",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        3840,
        304
      ],
      "parameters": {
        "color": 5,
        "width": 1020,
        "height": 340,
        "content": "![Alt text](https://wisestackai.s3.ap-southeast-1.amazonaws.com/Screenshot+2025-08-02+at+12.40.23%E2%80%AFPM.png \"Optional title text\")"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "9bfc04c8-7ff9-48d3-860e-2312982dd555",
  "connections": {
    "json parser": {
      "ai_outputParser": [
        [
          {
            "node": "Profile Analyzer Agent",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "gpt4-1 model": {
      "ai_languageModel": [
        [
          {
            "node": "Profile Analyzer Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Transform output": {
      "main": [
        [
          {
            "node": "Append or update row in sheet",
            "type": "main",
            "index": 0
          },
          {
            "node": "Let the hiring team know",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get profile detail": {
      "main": [
        [
          {
            "node": "Extract profile information",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Verify profile email": {
      "main": [
        [
          {
            "node": "Transform output",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Profile Analyzer Agent": {
      "main": [
        [
          {
            "node": "Verify profile email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Existing profile updated": {
      "main": [
        [
          {
            "node": "Get profile detail",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract profile information": {
      "main": [
        [
          {
            "node": "Profile Analyzer Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "New profile uploaded to drive folder": {
      "main": [
        [
          {
            "node": "Get profile detail",
            "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

[](https://www.youtube.com/watch?v=T9gnSsjYfvY) &gt; This workflow automatically processes resumes (PDFs) uploaded or updated in a Google Drive folder. It extracts and structures the candidate’s information using AI, then updates or inserts the data into a Google Sheet, acting…

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

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

Facebook Graph Api, HTTP Request, Google Drive +5
AI & RAG

[](https://www.youtube.com/watch?v=MD1krFvVKdU) Automatically extract, evaluate, and shortlist multiple resumes against a selected job description using GPT-4. This smart, scalable n8n workflow helps

Form Trigger, Output Parser Structured, OpenAI Chat +6
AI & RAG

A smart and reliable resume screening pipeline for modern HR teams. This workflow combines Google Drive (JD & CV storage), OpenAI (GPT-4-based evaluation), Google Sheets (position mapping + result log

Form Trigger, Output Parser Structured, OpenAI Chat +6
AI & RAG

Automated invoice processing pipeline that extracts data from PDF invoices, uses AI Agent for intelligent expense categorization, generates XML for accounting systems, and routes high-value invoices f

Google Drive Trigger, Google Drive, OpenAI Chat +5
AI & RAG

This workflow automatically converts unstructured internal documentation into clear, actionable Standard Operating Procedures (SOPs).

Google Drive Trigger, Google Drive, Agent +6