{
  "id": "resume-analyser-workflow",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "AI-Resume-Job-Title-Extractor-with-Google-Gemini",
  "tags": [],
  "nodes": [
    {
      "id": "sticky-overview",
      "name": "Overview",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1088,
        -992
      ],
      "parameters": {
        "color": "#FEC942",
        "width": 372,
        "height": 812,
        "content": "## AI Resume Job Title Extractor\n\nAnalyses a PDF resume using Google Gemini and extracts the candidate's current job title. Designed to run as a sub-workflow called by the Job Search automation.\n\n### How it works\n1. Triggered by a parent workflow via the Execute Workflow trigger\n2. Reads the candidate's PDF resume from the local filesystem\n3. Extracts raw text from the PDF\n4. Sends the text to Gemini with a prompt to identify the current job title\n5. Returns the extracted job title and Gemini response parts to the calling workflow\n\n### Setup\n1. **Resume File**: Update the file path in the 'Read/Write Files from Disk' node to point to your resume PDF\n2. **Google Gemini**: Connect your Google Gemini (PaLM) API credentials in the 'Message a model' node\n3. **Model**: Uses Gemma-4-31B by default \u2014 swap in any Gemini model you prefer\n\n### Customisation\n- Adjust the prompt in 'Message a model' to extract different info (skills, years of experience, etc.)\n- Edit 'Return' to pass additional fields back to the parent workflow"
      },
      "typeVersion": 1
    },
    {
      "id": "sticky-section-1",
      "name": "Setup & PDF Extraction",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -560,
        -880
      ],
      "parameters": {
        "color": "#AEADAD",
        "width": 656,
        "height": 552,
        "content": "## Setup & PDF Extraction\nTrigger the workflow from a parent automation, read the resume PDF from disk, and extract its raw text for processing."
      },
      "typeVersion": 1
    },
    {
      "id": "sticky-section-2",
      "name": "AI Analysis & Output",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        128,
        -880
      ],
      "parameters": {
        "color": "#AEADAD",
        "width": 556,
        "height": 556,
        "content": "## AI Analysis & Output\nSend the extracted resume text to Google Gemini to identify the current job title, then return the result to the calling workflow."
      },
      "typeVersion": 1
    },
    {
      "id": "c337df28-cd6e-4411-ad84-12b33356c957",
      "name": "Read/Write Files from Disk",
      "type": "n8n-nodes-base.readWriteFile",
      "position": [
        -288,
        -704
      ],
      "parameters": {
        "options": {},
        "fileSelector": "/home/node/.n8n-files/Navneet-Resume.pdf"
      },
      "typeVersion": 1.1
    },
    {
      "id": "7208b89a-301d-4bac-b73c-9a6e9f02977b",
      "name": "Extract from File",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        -64,
        -704
      ],
      "parameters": {
        "options": {},
        "operation": "pdf"
      },
      "typeVersion": 1.1
    },
    {
      "id": "5a32f956-b316-4a28-b50f-c25ec8f328f4",
      "name": "Return",
      "type": "n8n-nodes-base.set",
      "position": [
        496,
        -704
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "338084ba-f9f9-4f26-85d2-7b37d7853aa8",
              "name": "text",
              "type": "string",
              "value": "={{ $('Extract from File').item.json.text }}"
            },
            {
              "id": "c3571360-cfaa-4bd1-ad17-f25106799a3b",
              "name": "content_parts",
              "type": "string",
              "value": "={{ $json.content.parts }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "2261e908-c791-46e0-ab38-a042ee2f9a1b",
      "name": "Start",
      "type": "n8n-nodes-base.executeWorkflowTrigger",
      "position": [
        -512,
        -768
      ],
      "parameters": {
        "inputSource": "passthrough"
      },
      "typeVersion": 1.1
    },
    {
      "id": "e3bcb3c5-816d-41ad-bb53-2d07e13ddbe1",
      "name": "Message a model",
      "type": "@n8n/n8n-nodes-langchain.googleGemini",
      "position": [
        208,
        -704
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": "models/gemma-4-31b-it",
          "cachedResultName": "models/gemma-4-31b-it"
        },
        "options": {},
        "messages": {
          "values": [
            {
              "content": "=Analyse the resume text: {{ $json.text }}.\n\nIdentify the current job title.\nOutput ONLY a single search string."
            }
          ]
        },
        "builtInTools": {}
      },
      "credentials": {
        "googlePalmApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "c77e2a21-9104-495c-bff5-7b4946cea1fe",
      "name": "Setup & PDF Extraction1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -336,
        -736
      ],
      "parameters": {
        "color": "#C96464",
        "width": 192,
        "height": 360,
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nUpdate the path for the Resume:\n1. Open this node.\n2. Update the path under File(s) Selector"
      },
      "typeVersion": 1
    },
    {
      "id": "9409fbf9-0c7a-4f11-b1e7-6123c6b497e0",
      "name": "Setup & PDF Extraction2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        176,
        -736
      ],
      "parameters": {
        "color": "#C96464",
        "width": 288,
        "height": 376,
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nUpdate your Google Credentials:\n1. In Google AI Studio, create your API Key.\n2. Open this node and under Credentials, click on Create New Credentials and update the Host and the API Key"
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "shared": [
    {
      "role": "workflow:owner",
      "project": {
        "id": "gWkPS3Yo6L03U87I",
        "icon": null,
        "name": "Navneet Singh Arora <navneetsingh790@gmail.com>",
        "type": "personal",
        "createdAt": "2026-04-10T15:01:49.389Z",
        "creatorId": "fd932e6f-0271-41b5-9363-6f2454ac13dc",
        "updatedAt": "2026-04-10T15:07:46.566Z",
        "description": null
      },
      "createdAt": "2026-04-10T15:14:31.924Z",
      "projectId": "gWkPS3Yo6L03U87I",
      "updatedAt": "2026-04-10T15:14:31.924Z",
      "workflowId": "resume-analyser-workflow"
    }
  ],
  "settings": {
    "binaryMode": "separate",
    "availableInMCP": false,
    "executionOrder": "v1"
  },
  "createdAt": "2026-04-10T15:14:31.924Z",
  "updatedAt": "2026-04-15T22:00:28.793Z",
  "versionId": "b377fe59-bd35-4ee9-b1ec-c83bd14a973a",
  "isArchived": false,
  "staticData": null,
  "connections": {
    "Start": {
      "main": [
        [
          {
            "node": "Read/Write Files from Disk",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Message a model": {
      "main": [
        [
          {
            "node": "Return",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract from File": {
      "main": [
        [
          {
            "node": "Message a model",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read/Write Files from Disk": {
      "main": [
        [
          {
            "node": "Extract from File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "description": null,
  "triggerCount": 0,
  "versionCounter": 134,
  "activeVersionId": null,
  "versionMetadata": {
    "name": null,
    "description": null
  }
}