AutomationFlowsAI & RAG › LinkedIn Job Search: AI Resume Match & Cover Letter

LinkedIn Job Search: AI Resume Match & Cover Letter

Original n8n title: Linkedin Job Search: Auto-match Resume with AI + Cover Letter & Telegram Alerts

ByHojjat Jashnniloofar @jashnniloofar on n8n.io

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 update the job google sheet. You can receive daily matched linkedin job alerts by…

Cron / scheduled trigger★★★★★ complexityAI-powered33 nodesAgentOpenAI ChatGoogle DriveGoogle SheetsTelegramHTTP Request
AI & RAG Trigger: Cron / scheduled Nodes: 33 Complexity: ★★★★★ AI nodes: yes Added:
LinkedIn Job Search: AI Resume Match & Cover Letter — n8n workflow card showing Agent, OpenAI Chat, Google Drive integration

This workflow corresponds to n8n.io template #6239 — 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": "OuyF1qGJHYJaf0td",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Linkedin Job Search",
  "tags": [
    {
      "id": "kCWdmQoN72Ax6pPo",
      "name": "linkedin",
      "createdAt": "2025-07-18T14:38:35.599Z",
      "updatedAt": "2025-07-18T14:38:35.599Z"
    }
  ],
  "nodes": [
    {
      "id": "bd8ca013-eefb-439e-b15b-48b5502ffa91",
      "name": "Split Out",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        1700,
        -580
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "links"
      },
      "typeVersion": 1
    },
    {
      "id": "22a12a7d-2ef7-47d2-8a01-50d1b24b3dc8",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -240,
        0
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "4f32bc04-34d5-48d3-b87b-eb6f9e5d655b",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        -20,
        -260
      ],
      "parameters": {
        "amount": 10
      },
      "typeVersion": 1.1
    },
    {
      "id": "19bf5463-06a1-4d69-99b3-11d4e0b2c7b1",
      "name": "Score Filter",
      "type": "n8n-nodes-base.if",
      "position": [
        1900,
        -260
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "loose"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "1499f1ac-a7ae-4983-85c7-aa7b8445b2e2",
              "operator": {
                "type": "number",
                "operation": "gte"
              },
              "leftValue": "={{ $json.score }}",
              "rightValue": 50
            }
          ]
        },
        "looseTypeValidation": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "dbe8693f-b1bb-4a90-81f8-74e547da6345",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        940,
        -260
      ],
      "parameters": {
        "text": "=Hi, you are a helpful job matcher, you read my resume then analyze the given resume and job description and provide a job matching score. also write a cover letter based on my resume and the job description. cover letter must be at least 2 paragraph and ignore the name, address and signiture part from start and end.\nif you are using special character like \" use \\ to escape it. output must be parse in json without error. \n\nfor example your response should be like: {\"score\": 80, \"coverLetter\": \"sample cover letter\" }\n\njob_description: {{ $json.description }}\nmy_resume: {{ $('Extract from File').item.json.text }}",
        "options": {},
        "promptType": "define"
      },
      "typeVersion": 2
    },
    {
      "id": "8bda24dc-8a1c-43be-9dab-c64fa3902102",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        940,
        -60
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "7facf548-a5ae-40f6-9733-30b7dd18f5c6",
      "name": "Extract from File",
      "type": "n8n-nodes-base.extractFromFile",
      "position": [
        320,
        -580
      ],
      "parameters": {
        "options": {},
        "operation": "pdf"
      },
      "typeVersion": 1
    },
    {
      "id": "9ab899ad-6f37-446c-99bb-f7c92aae39e7",
      "name": "Download file",
      "type": "n8n-nodes-base.googleDrive",
      "position": [
        60,
        -580
      ],
      "parameters": {
        "fileId": {
          "__rl": true,
          "mode": "list",
          "value": "1QfsfYohELyKhzcPPEyJHv_ZlNODsIBgN",
          "cachedResultUrl": "https://drive.google.com/file/d/1QfsfYohELyKhzcPPEyJHv_ZlNODsIBgN/view?usp=drivesdk",
          "cachedResultName": "Hojjat Jashnniloofar - Senior Software Developer.pdf"
        },
        "options": {},
        "operation": "download"
      },
      "credentials": {
        "googleDriveOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 3
    },
    {
      "id": "26acf7d7-717b-4993-a35f-b8f47bacb932",
      "name": "Append or update row in sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        1620,
        -260
      ],
      "parameters": {
        "columns": {
          "value": {
            "link": "={{ $('Modify Job Attributes').item.json.applyLink }}",
            "Title": "={{ $('Modify Job Attributes').item.json.title }}",
            "score": "={{ $json.score }}",
            "Company": "={{ $('Modify Job Attributes').item.json.company }}",
            "Location": "={{ $('Modify Job Attributes').item.json.location }}",
            "description": "={{ $('Modify Job Attributes').item.json.description }}",
            "Cover Letter": "={{ $json.coverLetter }}"
          },
          "schema": [
            {
              "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": "link",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "link",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "score",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "score",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "description",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "description",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Cover Letter",
              "type": "string",
              "display": true,
              "removed": false,
              "required": false,
              "displayName": "Cover Letter",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [
            "link"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "appendOrUpdate",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Rj4C28b90cHZKg86mCAoV5PUR7OfXxolU1i1vVjMP0M/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1Rj4C28b90cHZKg86mCAoV5PUR7OfXxolU1i1vVjMP0M",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Rj4C28b90cHZKg86mCAoV5PUR7OfXxolU1i1vVjMP0M/edit?usp=drivesdk",
          "cachedResultName": "Job Search 2025"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "85b27871-88f5-4cc5-8884-a9fd8714bb16",
      "name": "Send a text message",
      "type": "n8n-nodes-base.telegram",
      "position": [
        2140,
        40
      ],
      "parameters": {
        "text": "=Title: {{ $('Modify Job Attributes').item.json.title }}\nCompany: {{ $('Modify Job Attributes').item.json.company }}\nLocation: {{ $('Modify Job Attributes').item.json.location }}\nJob Score: {{ $json.score }}\nApply: {{ $('Modify Job Attributes').item.json.applyLink }}",
        "chatId": "TELEGRAM_CHAT_ID ",
        "additionalFields": {
          "appendAttribution": false
        }
      },
      "credentials": {
        "telegramApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "04ae55dc-2c78-4bef-b76b-a6abe0d2b287",
      "name": "Get row(s) in sheet",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        680,
        -580
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 1038962310,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Rj4C28b90cHZKg86mCAoV5PUR7OfXxolU1i1vVjMP0M/edit#gid=1038962310",
          "cachedResultName": "Filter"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1Rj4C28b90cHZKg86mCAoV5PUR7OfXxolU1i1vVjMP0M",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1Rj4C28b90cHZKg86mCAoV5PUR7OfXxolU1i1vVjMP0M/edit?usp=drivesdk",
          "cachedResultName": "Job Search 2025"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "8e9679f9-f523-4ae5-933a-50f4e085f9d1",
      "name": "Create search URL",
      "type": "n8n-nodes-base.code",
      "position": [
        1000,
        -580
      ],
      "parameters": {
        "jsCode": "let url = \"https://www.linkedin.com/jobs/search/?f_TPR=r86400\"\n\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']\n\nif (keyword != \"\") {\n  url += `&keywords=${keyword}`;\n}\n\nif (location != \"\") {\n  url += `&location=${location}`;\n}\n\nif (experienceLevel !== \"\") {\n  // we have experienceLevel as a string with values like \"Internship, Entry level\"\n  // we  transform it to \"1,2,3\" where:\n  // Internship -> 1\n  // Entry level -> 2\n  // Associate -> 3\n  // Mid-Senior level -> 4\n  // Director -> 5\n  // Executive -> 6\n  const transformedExperiences = experienceLevel\n    .split(\",\")\n    .map((exp) => {\n      switch (exp.trim()) {\n        case \"Internship\":\n          return \"1\";\n        case \"Entry level\":\n          return \"2\";\n        case \"Associate\":\n          return \"3\";\n        case \"Mid-Senior level\":\n          return \"4\";\n        case \"Director\":\n          return \"5\";\n        case \"Executive\":\n          return \"6\";\n        default:\n          return \"\";\n      }\n    })\n    .filter(Boolean); // filter out any empty strings\n  url += `&f_E=${transformedExperiences.join(\",\")}`;\n}\n\nif (remote.length != \"\") {\n  // we have remote as a string with values like \"Remote, Hybrid\"\n  // we transform it to \"2,3,1\" where:\n  // On-Site -> 1\n  // Remote -> 2\n  // Hybrid -> 3\n  const transformedRemote = remote\n    .split(\",\")\n    .map((e) => {\n      switch (e.trim()) {\n        case \"Remote\":\n          return \"2\";\n        case \"Hybrid\":\n          return \"3\";\n        case \"On-Site\":\n          return \"1\";\n        default:\n          return \"\";\n      }\n    })\n    .filter(Boolean); // filter out any empty strings\n  url += `&f_WT=${transformedRemote.join(\",\")}`;\n}\n\nif (jobType != \"\") {\n  // we have jobType as a string with values like \"Full-time, Part-time\"\n  // we transform it to \"F,P\" where:\n  // Full-time -> F\n  // Part-time -> P\n  // Contract -> C\n  // Temporary -> T\n  // Other -> O\n  // Internship -> I\n  const transformedJobType = jobType.split(\",\").map((type) => type.trim().charAt(0).toUpperCase());\n  url += `&f_JT=${transformedJobType.join(\",\")}`;\n}\n\nif (easyApply != \"\") {\n  url += \"&f_EA=true\";\n}\n\nreturn {url}"
      },
      "typeVersion": 2
    },
    {
      "id": "a1261369-4939-44a5-908f-1f79cf05d275",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -240,
        -580
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 17
            }
          ]
        }
      },
      "notesInFlow": false,
      "typeVersion": 1.2
    },
    {
      "id": "bff65551-c8ab-4f3b-a6f7-1705b340a4dc",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -300,
        -680
      ],
      "parameters": {
        "height": 260,
        "content": "Worklofw executes daily at 5pm, you can change the interval and time of execution.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "5e5e4480-3608-45de-bda0-e7d36a2b20c3",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -20,
        -680
      ],
      "parameters": {
        "color": 4,
        "height": 260,
        "content": "Read user resume from google drive, you need to upload your resume in pdf format and select in **From List** section."
      },
      "typeVersion": 1
    },
    {
      "id": "b4ed86d6-8562-4738-9972-5eaa2ef296b5",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        260,
        -680
      ],
      "parameters": {
        "color": 5,
        "height": 260,
        "content": "Convert pdf file into text to AI can read content."
      },
      "typeVersion": 1
    },
    {
      "id": "5c7bb6c3-ecfa-4fdd-a6f0-e1f8da743383",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        540,
        -720
      ],
      "parameters": {
        "color": 4,
        "width": 400,
        "height": 300,
        "content": "Read search filter consiste of keywords, location, experience level, remot, job type and easy apply from google sheet.\n\nYou can download [this Template](https://docs.google.com/spreadsheets/d/1mtKVxj_z_QCLGXMx0mJVihWSgS41SzHfU1Rv4r_mRY0) and copy in your personal space."
      },
      "typeVersion": 1
    },
    {
      "id": "fc4bc16a-a825-4d26-8b9b-2254338c7d56",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        960,
        -680
      ],
      "parameters": {
        "width": 180,
        "height": 260,
        "content": "Create Linkedin search url from filter params."
      },
      "typeVersion": 1
    },
    {
      "id": "13197864-2918-4e55-8991-8861ad723455",
      "name": "Fetch Jobs from Linkedin",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1220,
        -580
      ],
      "parameters": {
        "url": "={{ $json.url }}",
        "options": {}
      },
      "typeVersion": 4.2
    },
    {
      "id": "e83ad624-2aca-4ad4-b82b-69c2ea14deb8",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1380,
        -740
      ],
      "parameters": {
        "width": 220,
        "height": 320,
        "content": "Extrat Job links from Linkdin search result"
      },
      "typeVersion": 1
    },
    {
      "id": "33939f6d-2a09-4f9f-a59c-f287ef4daf72",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1660,
        -720
      ],
      "parameters": {
        "color": 6,
        "width": 180,
        "height": 300,
        "content": "fetch jobs one by one"
      },
      "typeVersion": 1
    },
    {
      "id": "2add2540-d2ca-4903-b497-17bc141b4a18",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -60,
        -380
      ],
      "parameters": {
        "color": 3,
        "width": 180,
        "height": 260,
        "content": "Wait 10 sec between each job fetch."
      },
      "typeVersion": 1
    },
    {
      "id": "df5815da-e55c-494e-919c-07b93ec4b9fa",
      "name": "Fetch Job Page",
      "type": "n8n-nodes-base.httpRequest",
      "onError": "continueRegularOutput",
      "position": [
        180,
        -260
      ],
      "parameters": {
        "url": "={{ $json.links }}",
        "options": {}
      },
      "executeOnce": false,
      "retryOnFail": true,
      "typeVersion": 4.2,
      "waitBetweenTries": 5000
    },
    {
      "id": "33b9404e-ca19-48f5-b55d-c62d6c5d4507",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        360,
        -380
      ],
      "parameters": {
        "color": 6,
        "width": 380,
        "height": 300,
        "content": "Parse job HTML page, extract **title**, **company**, **location**, **jobDescription** and **applyLink** from it"
      },
      "typeVersion": 1
    },
    {
      "id": "a5c28135-f232-4fee-8127-646ec8f20854",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        760,
        -380
      ],
      "parameters": {
        "color": 7,
        "width": 540,
        "height": 440,
        "content": "AI model compare your resume and job description and rate your resume from 0-100, (0 does not match, 100 fully match) and also AI will write a sample cover letter based on your resume and your expriences and job description.\nI used Gemini model here, you can use othe AI model like OpenAI (chat GPT)"
      },
      "typeVersion": 1
    },
    {
      "id": "7bba7f09-fd34-477a-a4db-3c4baf3ca5af",
      "name": "Sticky Note10",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1320,
        -380
      ],
      "parameters": {
        "color": 6,
        "width": 180,
        "height": 300,
        "content": "Convert AI output to JSON."
      },
      "typeVersion": 1
    },
    {
      "id": "b20dbe40-7efa-4378-89cc-53bb392221c2",
      "name": "Sticky Note11",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1540,
        -380
      ],
      "parameters": {
        "color": 4,
        "width": 260,
        "height": 300,
        "content": "Add new job with score in google sheet.\n\nYou can download [this Template](https://docs.google.com/spreadsheets/d/1mtKVxj_z_QCLGXMx0mJVihWSgS41SzHfU1Rv4r_mRY0) and copy in your personal space."
      },
      "typeVersion": 1
    },
    {
      "id": "d5d301b7-fd22-4c4f-8523-39779ce8c88d",
      "name": "Sticky Note12",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2080,
        -60
      ],
      "parameters": {
        "color": 5,
        "width": 260,
        "height": 300,
        "content": "Send telegram message if matching score is greater than criteria defined in previuos step."
      },
      "typeVersion": 1
    },
    {
      "id": "b610e530-ad72-470a-a52e-d592797c51d4",
      "name": "Sticky Note13",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1820,
        -380
      ],
      "parameters": {
        "color": 4,
        "width": 260,
        "height": 300,
        "content": "Filter job that has score higher than 50. you can change filter criteria in this node."
      },
      "typeVersion": 1
    },
    {
      "id": "9838b440-d3ad-4665-b47b-d04e4d2cb928",
      "name": "Parse AI Output",
      "type": "n8n-nodes-base.set",
      "position": [
        1360,
        -260
      ],
      "parameters": {
        "mode": "raw",
        "options": {},
        "jsonOutput": "={{ $json.output.replaceAll(/```(?:json)?/g, \"\") }}\n",
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "a4d125b1-8d0c-4927-9470-33ab24b6706b",
      "name": "Parse Job Attributes",
      "type": "n8n-nodes-base.html",
      "position": [
        400,
        -260
      ],
      "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": "ba71d7c3-a89a-447d-aba6-7a0fdfda19dc",
      "name": "Modify Job Attributes",
      "type": "n8n-nodes-base.set",
      "position": [
        600,
        -260
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "784ead57-9d83-4e08-b83c-23fa165bf045",
              "name": "description",
              "type": "string",
              "value": "={{ $json.description.replaceAll(/\\s+/g, \" \") }}"
            },
            {
              "id": "fd3c9d2c-5ff9-46a7-b70a-f990fbc7da9d",
              "name": "jobid",
              "type": "string",
              "value": "={{ $json.jobid.split(\":\").last() }}"
            },
            {
              "id": "27a20cd2-ab0d-42b7-9cee-ea64e0e26ea3",
              "name": "applyLink",
              "type": "string",
              "value": "={{ \"https://www.linkedin.com/jobs/view/\"+ $json.jobid.split(\":\").last() }} "
            }
          ]
        },
        "includeOtherFields": true
      },
      "typeVersion": 3.4
    },
    {
      "id": "af4831f6-f9fa-4d68-aee1-d0ba38d8a46c",
      "name": "Extract Job Links",
      "type": "n8n-nodes-base.html",
      "position": [
        1440,
        -580
      ],
      "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
    }
  ],
  "active": true,
  "settings": {
    "timezone": "Europe/Berlin",
    "callerPolicy": "workflowsFromSameOwner",
    "executionOrder": "v1",
    "saveManualExecutions": true,
    "saveExecutionProgress": true
  },
  "versionId": "a7c6ba4c-44a9-4f45-8f23-ce318df31c81",
  "connections": {
    "Wait": {
      "main": [
        [
          {
            "node": "Fetch Job Page",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "AI Agent": {
      "main": [
        [
          {
            "node": "Parse AI Output",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Out": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Score Filter": {
      "main": [
        [
          {
            "node": "Send a text message",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Download file": {
      "main": [
        [
          {
            "node": "Extract from File",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Job Page": {
      "main": [
        [
          {
            "node": "Parse Job Attributes",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [],
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse AI Output": {
      "main": [
        [
          {
            "node": "Append or update row in sheet",
            "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
          }
        ]
      ]
    },
    "Send a text message": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse Job Attributes": {
      "main": [
        [
          {
            "node": "Modify Job Attributes",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Modify Job Attributes": {
      "main": [
        [
          {
            "node": "AI Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Jobs from Linkedin": {
      "main": [
        [
          {
            "node": "Extract Job Links",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Append or update row in sheet": {
      "main": [
        [
          {
            "node": "Score Filter",
            "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 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 update the job google sheet. You can receive daily matched linkedin job alerts by…

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

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

Google Drive, Google Sheets, HTTP Request +4
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