AutomationFlowsAI & RAG › Analyze Your Resume Against Linkedin Jobs with Openai and Google Sheets

Analyze Your Resume Against Linkedin Jobs with Openai and Google Sheets

ByBhautik Trambadia @bhautik on n8n.io

Job seekers, career coaches, and developers looking to automate job market research and identify the exact technical skills required to land their target roles.

Cron / scheduled trigger★★★★☆ complexityAI-powered26 nodesGoogle DriveGoogle SheetsHTTP RequestItem ListsAgentOpenAI ChatTelegram
AI & RAG Trigger: Cron / scheduled Nodes: 26 Complexity: ★★★★☆ AI nodes: yes Added:

This workflow corresponds to n8n.io template #15420 — 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
{
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodes": [
    {
      "id": "da18f79f-39b8-401f-ad5d-2d632dcde25e",
      "name": "Extract from File",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        -1888,
        1008
      ],
      "parameters": {
        "options": {},
        "operation": "pdf"
      },
      "typeVersion": 1
    },
    {
      "id": "64a40f8f-82d1-4b8d-b23a-7f5573a21ab0",
      "name": "Download file",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        -2112,
        1008
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "list",
          "value": "1iBfY5oJ0ciSwYOSDz7U4aDIVXydPxiI8"
        },
        "options": {},
        "operation": "download"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "3cc04f30-318a-436c-bc67-52619815755a",
      "name": "Get row(s) in sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -1664,
        1008
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1038962310
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1If_YNfm4zYlVwlv9eGdUHtZuFrwLrfpDdBK70lr2_pA"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "2b9b0b5d-8653-438a-a01b-124c7638e188",
      "name": "Create search URL",
      "type": "n8n-nodes-base.code",
      "position": [
        -1440,
        1008
      ],
      "parameters": {
        "jsCode": "let url = \"https://www.linkedin.com/jobs/search/?f_TPR=r86400&sortBy=DD&count=10\";\nconst keyword = $input.first().json.Keyword;\nconst location = $input.first().json.Location;\nconst experienceLevel = $input.first().json['Experience Level'];\nconst remote = $input.first().json.Remote;\nconst jobType = $input.first().json['Job Type'];\nconst easyApply = $input.first().json['Easy Apply'];\nif (keyword && keyword !== \"\") { url += `&keywords=${encodeURIComponent(keyword)}`; }\nif (location && location !== \"\") { url += `&location=${encodeURIComponent(location)}`; }\nif (experienceLevel && experienceLevel !== \"\") {\n  const transformedExperiences = experienceLevel.split(\",\").map((exp) => {\n    switch (exp.trim()) { case \"Internship\": return \"1\"; case \"Entry level\": return \"2\"; case \"Associate\": return \"3\"; case \"Mid-Senior level\": return \"4\"; case \"Director\": return \"5\"; case \"Executive\": return \"6\"; default: return \"\"; }\n  }).filter(Boolean);\n  if (transformedExperiences.length > 0) { url += `&f_E=${transformedExperiences.join(\",\")}`; }\n}\nif (remote && remote !== \"\") {\n  const transformedRemote = remote.split(\",\").map((e) => {\n    switch (e.trim()) { case \"Remote\": return \"2\"; case \"Hybrid\": return \"3\"; case \"On-Site\": return \"1\"; default: return \"\"; }\n  }).filter(Boolean);\n  if (transformedRemote.length > 0) { url += `&f_WT=${transformedRemote.join(\",\")}`; }\n}\nif (jobType && jobType !== \"\") {\n  const transformedJobType = jobType.split(\",\").map((type) => {\n    switch (type.trim()) { case \"Full-time\": return \"F\"; case \"Part-time\": return \"P\"; case \"Contract\": return \"C\"; case \"Temporary\": return \"T\"; case \"Volunteer\": return \"V\"; case \"Internship\": return \"I\"; default: return \"\"; }\n  }).filter(Boolean);\n  if (transformedJobType.length > 0) { url += `&f_JT=${transformedJobType.join(\",\")}`; }\n}\nif (easyApply === true || easyApply === \"true\") { url += \"&f_EA=true\"; }\nreturn { url };"
      },
      "typeVersion": 2
    },
    {
      "id": "60d0f4a8-1dd1-4bac-8f76-645ebf2067dc",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -2336,
        1008
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 17
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "09209346-4d17-4e0b-8b9e-cd95d0a64e35",
      "name": "Fetch Jobs from Linkedin",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -1216,
        1008
      ],
      "parameters": {
        "url": "={{ $json.url }}",
        "options": {}
      },
      "typeVersion": 4.2
    },
    {
      "id": "b02e2762-c2ac-4b37-a19f-eae21a4f2613",
      "name": "Extract Job Links",
      "type": "n8n-nodes-base.html",
      "position": [
        -992,
        1008
      ],
      "parameters": {
        "options": {},
        "operation": "extractHtmlContent",
        "extractionValues": {
          "values": [
            {
              "key": "links",
              "attribute": "href",
              "cssSelector": "ul.jobs-search__results-list li div a[class*=\"base-card\"]",
              "returnArray": true,
              "returnValue": "attribute"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "0df3034d-90ed-410a-9b49-6d8da8450784",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "onError": "continueRegularOutput",
      "position": [
        -320,
        1008
      ],
      "parameters": {
        "options": {
          "reset": false
        }
      },
      "typeVersion": 3
    },
    {
      "id": "fcbf0122-4835-4dae-8acd-4d9055a3f9c9",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        -96,
        1008
      ],
      "parameters": {
        "amount": 10
      },
      "typeVersion": 1.1
    },
    {
      "id": "d9b9de7d-206c-497a-8301-7446c8d4ee10",
      "name": "Fetch Job Page",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueRegularOutput",
      "position": [
        192,
        1008
      ],
      "parameters": {
        "url": "={{ $json.links }}",
        "options": {}
      },
      "executeOnce": false,
      "retryOnFail": true,
      "typeVersion": 4.2,
      "waitBetweenTries": 5000
    },
    {
      "id": "51db6214-6176-428d-b8bd-7310e8e38293",
      "name": "Parse Job Attributes",
      "type": "n8n-nodes-base.html",
      "position": [
        480,
        1008
      ],
      "parameters": {
        "options": {},
        "operation": "extractHtmlContent",
        "extractionValues": {
          "values": [
            {
              "key": "title",
              "cssSelector": "div h1"
            },
            {
              "key": "company",
              "cssSelector": "div span a"
            },
            {
              "key": "location",
              "cssSelector": "div span[class*='topcard__flavor topcard__flavor--bullet']"
            },
            {
              "key": "description",
              "cssSelector": "div.description__text.description__text--rich"
            },
            {
              "key": "jobid",
              "attribute": "data-semaphore-content-urn",
              "cssSelector": "a[data-item-type='semaphore']",
              "returnValue": "attribute"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "52d26382-35dc-4ec5-a9a3-2826198ca928",
      "name": "Modify Job Attributes",
      "type": "n8n-nodes-base.set",
      "position": [
        704,
        1008
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "784ead57-9d83-4e08-b83c-23fa165bf045",
              "name": "description",
              "type": "string",
              "value": "={{ $json.description ? $json.description.replaceAll(/\\s+/g, ' ').substring(0, 1500) : '' }}"
            },
            {
              "id": "fd3c9d2c-5ff9-46a7-b70a-f990fbc7da9d",
              "name": "jobid",
              "type": "string",
              "value": "={{ $json.jobid ? $json.jobid.split(\":\").last() : '' }}"
            },
            {
              "id": "27a20cd2-ab0d-42b7-9cee-ea64e0e26ea3",
              "name": "applyLink",
              "type": "string",
              "value": "={{ $json.jobid ? \"https://www.linkedin.com/jobs/view/\"+ $json.jobid.split(\":\").last() : '' }}"
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "852e90cc-0e3b-4198-86a3-b401559345c6",
      "name": "Aggregate Jobs",
      "type": "n8n-nodes-base.itemLists",
      "position": [
        -96,
        712
      ],
      "parameters": {
        "options": {},
        "operation": "summarize",
        "fieldsToSummarize": {
          "values": [
            {
              "field": "title",
              "aggregation": "append"
            },
            {
              "field": "company",
              "aggregation": "append"
            },
            {
              "field": "location",
              "aggregation": "append"
            },
            {
              "field": "description",
              "aggregation": "append"
            },
            {
              "field": "jobid",
              "aggregation": "append"
            },
            {
              "field": "applyLink"
            }
          ]
        }
      },
      "typeVersion": 3
    },
    {
      "id": "7ae89a34-c569-4a3d-b23d-cbd196c84d61",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        128,
        608
      ],
      "parameters": {
        "text": "=You are an expert Senior Career Coach. \n\nGoal: Analyze the \"Delta\" between the user's current resume and the reality of the job market based on these scraped job listings.\n\nInputs:\n- User Resume: {{ $('Extract from File').first().json.text }}\n\n- Market Data (Jobs):\n\njob title :{{ $json.appended_title }}\nCompany: {{ $json.appended_company }}\nlocation : {{ $json.appended_location }} \n all job description: {{ $json.appended_description }}\n\n- My Goal: Role: {{ $('Get row(s) in sheet').item.json.Keyword }} location: \n{{ $('Get row(s) in sheet').item.json.Location }}\n\nExperince: {{ $('Get row(s) in sheet').item.json['Experience Level'] }}\n\nTask:\n1. Identify 'High-Frequency Missing Skills': Analyze the aggregated job descriptions and identify the top 3 to 5 technical skills that appear REPEATEDLY across multiple jobs but are missing from the resume. Strictly ignore unique, one-off skills that only appear in a single JD.\n2. Career Coach Analysis: Be blunt. Based on the gap between the resume and these high-frequency market demands, why is the user not landing these roles yet?\n3. 30-Day Action Plan: Create a rigorous 4-week (30-day) roadmap to close these specific gaps.\n   - Week 1 (Days 1-7): Knowledge Acquisition (Specific courses, tools, or libraries to learn the top missing skills).\n   - Week 2 (Days 8-14): Guided Practice (Small exercises or mini-projects to build muscle memory).\n   - Week 3 (Days 15-21): The Capstone Project (What specific, complex feature should they build and add to their portfolio to prove these skills?).\n   - Week 4 (Days 22-30): Market Positioning (How to rewrite the resume summary, bullet points, and LinkedIn profile to reflect this new 30-day transformation).\n\nOutput: You must return ONLY a valid JSON object.\n{\n  \"readiness_score\": 65,\n  \"high_frequency_missing_skills\": [\"Skill A\", \"Skill B\", \"Skill C\"],\n  \"coach_notes\": \"...\",\n  \"training_plan_30_days\": {\n    \"week_1_foundations\": \"...\",\n    \"week_2_practice\": \"...\",\n    \"week_3_portfolio_project\": \"...\",\n    \"week_4_repositioning\": \"...\"\n  }\n}",
        "options": {},
        "promptType": "define"
      },
      "typeVersion": 2
    },
    {
      "id": "efabf3d2-5635-4115-9d84-0d4387a602d5",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        200,
        832
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "ceb6362e-92e2-469b-b88d-435b38c26e75",
      "name": "Parse AI Output",
      "type": "n8n-nodes-base.set",
      "position": [
        480,
        712
      ],
      "parameters": {
        "mode": "raw",
        "options": {},
        "jsonOutput": "={{ $json.output.replaceAll(/```(?:json)?/g, \"\").trim() }}",
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "5d9a7b1f-c9ac-4550-852a-9d88f306b165",
      "name": "Send a text message",
      "type": "n8n-nodes-base.telegram",
      "position": [
        704,
        712
      ],
      "parameters": {
        "text": "=\ud83d\ude80 **Career Coach 30-Day Market Report** \ud83d\ude80\n\n\ud83d\udcca **Market Readiness:** {{ $json.readiness_score }}% (Based on {{ $('Aggregate Jobs').item.json.count_applyLink }} scanned)\n\n\u274c **Recurring Missing Skills:**\n{{ $json.high_frequency_missing_skills.join(', ') }}\n\n\ud83d\udca1 **Coach Advice:** \n{{ $json.coach_notes }}\n\n\ud83d\udcc5 **30-Day Transformation Plan:**\n\u2022 **Week 1 (Foundations):** {{ $json.training_plan_30_days.week_1_foundations }}\n\n\u2022 **Week 2 (Practice):** {{ $json.training_plan_30_days.week_2_practice }}\n\n\u2022 **Week 3 (Project):** {{ $json.training_plan_30_days.week_3_portfolio_project }}\n\n\u2022 **Week 4 (Positioning):** {{ $json.training_plan_30_days.week_4_repositioning }}",
        "chatId": "#Your Telegram Chat ID here#",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "d90574bf-b641-4208-8e3a-7e768388396f",
      "name": "Split Out",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        -768,
        1008
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "links"
      },
      "typeVersion": 1
    },
    {
      "id": "f32bdb85-4dc7-4db2-8062-50aa895a4d8c",
      "name": "Update Logs",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        928,
        1080
      ],
      "parameters": {
        "columns": {
          "value": {
            "jobid": "={{ $json.jobid }}",
            "title": "={{ $json.title }}",
            "company": "={{ $json.company }}",
            "location": "={{ $json.location }}",
            "applyLink": "={{ $json.applyLink }}",
            "time_stamp": "={{ $now }}",
            "description": "={{ $json.description }}"
          },
          "schema": [
            {
              "id": "description",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "description",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "jobid",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "jobid",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "applyLink",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "applyLink",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "title",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "title",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "company",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "company",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "location",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "location",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "time_stamp",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "time_stamp",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1895806376,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1VJuWKPOgBT1ic0GE1ohAh6E9uH6oyo-Z4fP16jkE_QI/edit#gid=1895806376",
          "cachedResultName": "Logs"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1VJuWKPOgBT1ic0GE1ohAh6E9uH6oyo-Z4fP16jkE_QI",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1VJuWKPOgBT1ic0GE1ohAh6E9uH6oyo-Z4fP16jkE_QI/edit?usp=drivesdk",
          "cachedResultName": "n8n Job Coach"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "0b333875-dcd7-4119-aefb-8ca1a467f8d8",
      "name": "Limit",
      "type": "n8n-nodes-base.limit",
      "position": [
        -544,
        1008
      ],
      "parameters": {
        "maxItems": 10
      },
      "typeVersion": 1
    },
    {
      "id": "d25bea3b-89af-42db-827a-64910a55b164",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2928,
        656
      ],
      "parameters": {
        "width": 464,
        "height": 704,
        "content": "### How it works\nThis workflow acts as an AI-powered Career Coach. It routinely pulls your target job preferences and future aspirations from a Google Sheet, alongside your current resume from Google Drive. \n\nIt then scrapes the latest matching job postings from LinkedIn and combines the descriptions to analyze the current market demand. Using OpenAI, it compares your resume against this market data to identify high-frequency missing skills. Finally, it generates a structured 30-day training plan and sends it directly to your Telegram so you can upskill and land your dream role.\n\n### Setup\n1. Download the [Google Sheets Template](https://docs.google.com/spreadsheets/d/e/2PACX-1vSo0HAZi8Dr73EsbECV6-lWkbCczuvaERiiUc7KVriolIP4rkO9TDsQ60OMw_X0U8NmPL3SsByJmlTT/pub?output=ods) and upload it to your Drive.\n2. Connect your **Google Drive** and **Google Sheets** credentials. Ensure your resume ID and Sheet ID are correctly mapped in the nodes.\n3. Connect your **OpenAI** account.\n4. Connect your **Telegram** bot and add your `Chat ID`.\n5. Adjust the **Schedule Trigger** to your preferred frequency (e.g., weekly).\n\n### Customization tips\n- Update the LinkedIn search URL parameters in the `Create search URL` code node if you need stricter location or remote/hybrid filters.\n- If you scrape more than 10 jobs at once, ensure you use `gpt-4o` or a model with a large context window to handle the combined text volume."
      },
      "typeVersion": 1
    },
    {
      "id": "ac0cc3c6-d219-401b-8637-90c822ed6fa7",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -2360,
        864
      ],
      "parameters": {
        "color": 7,
        "width": 1712,
        "height": 304,
        "content": "## 1. Input & Search Setup\nFetches your resume, reads target job criteria from Sheets, and scrapes the  matching LinkedIn job links."
      },
      "typeVersion": 1
    },
    {
      "id": "f760267f-c7c8-4d24-bde2-120f91d7e96b",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -352,
        824
      ],
      "parameters": {
        "color": 7,
        "width": 1408,
        "height": 416,
        "content": "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n## 2. Process Job Postings\nLoops through each individual job link to scrape, clean, and format the full job descriptions."
      },
      "typeVersion": 1
    },
    {
      "id": "4c4958d2-75ae-4818-974a-805a433b0e6d",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -368,
        488
      ],
      "parameters": {
        "color": 7,
        "width": 1296,
        "height": 384,
        "content": "## 3. Career Coach AI & Notification\nAggregates all job descriptions into one batch, runs the AI gap analysis, and sends the 30-day plan to Telegram."
      },
      "typeVersion": 1
    },
    {
      "id": "7fe583d3-a775-424f-b059-24b78b335bc5",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -627,
        832
      ],
      "parameters": {
        "color": "#E61414",
        "width": 262,
        "height": 336,
        "content": "\u26a0\ufe0f **Cost Safeguard**\nThis node limits the data payload. Do not bypass this, or large scrapes will cause high API token usage!"
      },
      "typeVersion": 1
    },
    {
      "id": "6263eef1-a2ae-480a-80f1-fa9d894a7342",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        640,
        576
      ],
      "parameters": {
        "height": 288,
        "content": "Update your Chat ID in this telegram node"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Wait": {
      "main": [
        [
          {
            "node": "Fetch Job Page",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Limit": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent": {
      "main": [
        [
          {
            "node": "Parse AI Output",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out": {
      "main": [
        [
          {
            "node": "Limit",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Logs": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download file": {
      "main": [
        [
          {
            "node": "Extract from File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate Jobs": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Job Page": {
      "main": [
        [
          {
            "node": "Parse Job Attributes",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [
          {
            "node": "Aggregate Jobs",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse AI Output": {
      "main": [
        [
          {
            "node": "Send a text message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Download file",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create search URL": {
      "main": [
        [
          {
            "node": "Fetch Jobs from Linkedin",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract Job Links": {
      "main": [
        [
          {
            "node": "Split Out",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract from File": {
      "main": [
        [
          {
            "node": "Get row(s) in sheet",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "AI Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Get row(s) in sheet": {
      "main": [
        [
          {
            "node": "Create search URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse Job Attributes": {
      "main": [
        [
          {
            "node": "Modify Job Attributes",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Modify Job Attributes": {
      "main": [
        [
          {
            "node": "Update Logs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Jobs from Linkedin": {
      "main": [
        [
          {
            "node": "Extract Job Links",
            "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

Job seekers, career coaches, and developers looking to automate job market research and identify the exact technical skills required to land their target roles.

Source: https://n8n.io/workflows/15420/ — 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 n8n workflow is designed for content creators, digital marketers, and social media managers who want to automate their entire content creation and publishing process across multiple platforms. It

Google Sheets, WordPress, Edit Image +13
AI & RAG

This n8n templates helps you to authomatically search Linkeding jobs. It uses AI (Gemini or OpenAPI) to match your resume with each job description and write a sample cover letter for each job and upd

Agent, OpenAI Chat, Google Drive +3
AI & RAG

Generate AI viral videos with NanoBanana & VEO3, shared on socials via Blotato 2. Uses @blotato/n8n-nodes-blotato, googleSheets, lmChatOpenAi, toolThink. Event-driven trigger; 94 nodes.

@Blotato/N8N Nodes Blotato, Google Sheets, OpenAI Chat +9
AI & RAG

This n8n automation workflow automates the creation, scripting, production, and posting of YouTube videos. It leverages AI (OpenAI), image generation (PIAPI), video rendering (Shotstack), and platform

Agent, OpenAI Chat, Airtable Tool +7
AI & RAG

This workflow is designed for: Content creators and marketers E-commerce and product-based businesses Agencies producing social media visuals and videos Automation builders looking for AI-powered crea

HTTP Request, Edit Image, Google Drive +7