{
  "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
          }
        ]
      ]
    }
  }
}