AutomationFlowsAI & RAG › Automated Job Intelligence System with Decodo, AI Analysis, and Email Alerts

Automated Job Intelligence System with Decodo, AI Analysis, and Email Alerts

ByYaron Been @yaron-nofluff on n8n.io

Stay ahead in your job search with this Automated Job Intelligence System! This workflow scans company career pages daily for new job listings, uses AI to analyze job relevance and seniority levels, and sends personalized email alerts for high-priority opportunities while…

Cron / scheduled trigger★★★★☆ complexityAI-powered28 nodesOutput Parser StructuredOpenAI ChatAgentGoogle Sheets@Decodo/N8N Nodes DecodoSlackGmail
AI & RAG Trigger: Cron / scheduled Nodes: 28 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Agent → Gmail 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": "panAgqcY7IDoFukj",
  "name": "Automated Job Intelligence System using decodo",
  "tags": [
    {
      "id": "uMBvoK3U8QYbRWJ5",
      "name": "done",
      "createdAt": "2025-11-18T13:27:52.572Z",
      "updatedAt": "2025-11-18T13:27:52.572Z"
    }
  ],
  "nodes": [
    {
      "id": "1bdce8b3-a80a-48fb-8d65-fd343dea6a14",
      "name": "Structured Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        1488,
        816
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"relevance_score\": 9,\n  \"seniority_level\": \"Executive\",\n  \"tech_stack_summary\": \"Enterprise systems, cloud platforms, microservices, architecture patterns, DevOps\"\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "e6afc4ed-1a56-4b4c-b730-af858095da18",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1680,
        192
      ],
      "parameters": {
        "width": 368,
        "height": 624,
        "content": "## How it works\nThis workflow checks company career pages every day at 9 AM for new job listings. It uses a web scraper to get job titles and links, then AI analyzes how relevant each job is to you. If a job scores high (8/10 or more), it sends you an email alert and saves all jobs to Google Sheets.\n\n## Setup steps\n\nPut company career page URLs in Google Sheets\n\nConnect your Decodo, OpenAI, Gmail, and Slack accounts\n\nMake sure your job tracking sheet is set up\n\nTurn on the workflow for daily checking\n\nCheck your email for high-relevance job alerts\n\n## Use Coupon Code \"YARON\" and get free decodo credits\n\n### https://decodo.com/"
      },
      "typeVersion": 1
    },
    {
      "id": "5621bbc8-811f-4613-a9b2-b81e6b989a83",
      "name": "OpenAI Job Analyzer",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -560,
        800
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "b647b01b-e8a6-48fc-a876-da59d0118b6a",
      "name": "Convert Job Data to Items",
      "type": "n8n-nodes-base.code",
      "position": [
        -16,
        688
      ],
      "parameters": {
        "jsCode": "// This function assumes the input item (from Job Data Parser)\n// looks like this:\n// {\n//   \"output\": {\n//     \"company_name\": \"TechSolutions Inc.\",\n//     \"job_listings\": [\"Job Title 1\", \"Job Title 2\", ...],\n//     \"links\": [\"Link 1\", \"Link 2\", ...]\n//   }\n// }\n\nconst inputItem = $input.first().json;\nconst jobData = inputItem.output; // Adjust 'output' if the structure is slightly different\n\n// Extract the parallel arrays and company name\nconst jobTitles = jobData.job_listings || [];\nconst links = jobData.links || [];\nconst company = jobData.company_name || '';\n\nconst newJobItems = [];\n\n// Loop through the job titles and create a new item for each one\nfor (let i = 0; i < jobTitles.length; i++) {\n  // Ensure both job title and link exist for this index\n  if (jobTitles[i] && links[i]) {\n    newJobItems.push({\n      json: {\n        company: company,\n        job_listing: jobTitles[i],\n        link: links[i],\n      }\n    });\n  }\n}\n\n// Return the array of new n8n items\nreturn newJobItems;"
      },
      "typeVersion": 2
    },
    {
      "id": "9c354576-0645-4bbf-88a8-99cde6a8cea7",
      "name": "Job Relevance Analyzer",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1200,
        528
      ],
      "parameters": {
        "text": "=assign a Relevance Score (1-10), Seniority Level, and a Tech Stack Summary based on the job title.\n\nJob title: {{ $json.job_listing }}",
        "options": {},
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "f2b40e0c-0de8-482e-912b-e843f4d9f7e9",
      "name": "OpenAI Relevance Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1296,
        816
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4.1-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "5cd85cff-e1a3-459f-96c7-32ce1fba1c69",
      "name": "Enrich Job Data with AI Insights",
      "type": "n8n-nodes-base.set",
      "position": [
        1568,
        528
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "ad21bef1-106c-4c8a-841f-c5f8df0dee85",
              "name": "company",
              "type": "string",
              "value": "={{ $('Split New Jobs for AI').item.json.company }}"
            },
            {
              "id": "03efe6bc-365e-4d95-839d-c53067791950",
              "name": "job_listing",
              "type": "string",
              "value": "={{ $('Split New Jobs for AI').item.json.job_listing }}"
            },
            {
              "id": "af207b42-c475-4a2d-b674-a24768385562",
              "name": "link",
              "type": "string",
              "value": "={{ $('Split New Jobs for AI').item.json.link }}"
            },
            {
              "id": "543c0430-b315-4d5e-ab0c-a271917f9682",
              "name": "output.relevance_score",
              "type": "number",
              "value": "={{ $json.output.relevance_score }}"
            },
            {
              "id": "6c7dbb82-e8d1-42f9-a478-678e2fb1ccf6",
              "name": "output.seniority_level",
              "type": "string",
              "value": "={{ $json.output.seniority_level }}"
            },
            {
              "id": "c2f240a0-ad73-43f4-b752-11bf717a109e",
              "name": "output.tech_stack_summary",
              "type": "string",
              "value": "={{ $json.output.tech_stack_summary }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "7ec93134-3946-4035-bd75-09f7d3d9f992",
      "name": "Check High Relevance Jobs",
      "type": "n8n-nodes-base.if",
      "position": [
        1776,
        528
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "4e770d00-82a8-4948-8700-6800635ce80d",
              "operator": {
                "type": "number",
                "operation": "gt"
              },
              "leftValue": "={{ $json.output.relevance_score }}",
              "rightValue": 8
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "9071ab27-32d8-4271-a093-92be92cb392c",
      "name": "Daily Job Scan Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -1184,
        512
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 9
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "7b042193-e2f6-4ae0-92ff-7e1e31db6858",
      "name": "Get Company URLs",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        -976,
        512
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1bihAkufqP9EVYsQo9CdyMGCF7e5w-mgBmPSmzwsAA3I/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1bihAkufqP9EVYsQo9CdyMGCF7e5w-mgBmPSmzwsAA3I",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1bihAkufqP9EVYsQo9CdyMGCF7e5w-mgBmPSmzwsAA3I/edit?usp=drivesdk",
          "cachedResultName": "Companies list"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "beb98d56-ca96-448d-a0c1-994efc795036",
      "name": "Split Companies",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -784,
        512
      ],
      "parameters": {
        "options": {},
        "batchSize": 1
      },
      "typeVersion": 1
    },
    {
      "id": "5e2ab438-c3ff-4d9e-9e1d-b05a56c6888d",
      "name": "Job Listing Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        -448,
        512
      ],
      "parameters": {
        "text": "=Use Decodo to scrape new job listings from the current company's career page, record the company name, job titles, and links. The URL is: {{ $json.URL_Column_Name }}",
        "options": {},
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2.2
    },
    {
      "id": "b2e26f1d-c05c-4c1d-ada5-acbebaa01c80",
      "name": "Decodo Job Scraper",
      "type": "@decodo/n8n-nodes-decodo.decodoTool",
      "position": [
        -352,
        800
      ],
      "parameters": {
        "url": "={{ /*n8n-auto-generated-fromAI-override*/ $fromAI('URL', ``, 'string') }}"
      },
      "credentials": {
        "decodoApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "9fbca348-1b9f-4db1-b20e-e0ac3d310c22",
      "name": "Job Data Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        -160,
        800
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"company_name\": \"Arbisoft\",\n  \"job_listings\": [\n    \"Junior Java Developer\",\n    \"Full Stack Engineer\"\n  ],\n  \"links\": [\n    \"https://arbisoft.hirestream.io/careers/\"\n  ]\n}\n"
      },
      "typeVersion": 1.3
    },
    {
      "id": "4c51d2bf-2c0d-4e4e-b3a5-a09bc0b8d10c",
      "name": "Get All Existing Jobs",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        320,
        656
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 828928514,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1bihAkufqP9EVYsQo9CdyMGCF7e5w-mgBmPSmzwsAA3I/edit#gid=828928514",
          "cachedResultName": "Jobs"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1bihAkufqP9EVYsQo9CdyMGCF7e5w-mgBmPSmzwsAA3I",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1bihAkufqP9EVYsQo9CdyMGCF7e5w-mgBmPSmzwsAA3I/edit?usp=drivesdk",
          "cachedResultName": "Companies list"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "52745546-33f7-4d9b-b0c3-cc586236e301",
      "name": "Slack Error Alert",
      "type": "n8n-nodes-base.slack",
      "position": [
        368,
        48
      ],
      "parameters": {
        "text": "=New job listings at {{ $json.output.company_name }}\n\nJobs\n\n{{ $json.output.job_listings }}",
        "otherOptions": {}
      },
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2
    },
    {
      "id": "ab70c3ca-43cb-4802-974a-e7f5d3469d65",
      "name": "Merge New/Existing Data",
      "type": "n8n-nodes-base.merge",
      "position": [
        576,
        800
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "50008250-37fc-4c6d-bdd5-118f6eedd7a3",
      "name": "Compare and Filter Jobs",
      "type": "n8n-nodes-base.code",
      "position": [
        768,
        800
      ],
      "parameters": {
        "jsCode": "// The input is a single list containing items from both\n// 'Create Job Item List (7)' (new jobs) and\n// 'Get All Existing Jobs (8)' (existing jobs, which have a 'row_number').\n\nconst allItems = $input.all().map(item => item.json);\n\n// Separate the items based on the presence of the 'row_number' property\n// Existing jobs from Google Sheets always have 'row_number'.\n// New scraped jobs do not.\nconst newJobs = allItems.filter(item => !item.row_number);\nconst existingJobs = allItems.filter(item => item.row_number);\n\n// Create a set of existing job titles for efficient lookup.\n// We look for 'job_listing' in the existing jobs array.\nconst existingTitles = new Set(existingJobs.map(row => (row.job_listing || '').trim().toLowerCase()));\n\n// Filter out only unique new jobs (not already in the sheet)\nconst uniqueNewJobs = newJobs.filter(job => {\n  const jobTitle = (job.job_listing || '').trim().toLowerCase();\n  \n  // A job is unique and should be kept if:\n  // 1. Its title is not empty.\n  // 2. Its title is NOT present in the set of existing job titles.\n  return jobTitle.length > 0 && !existingTitles.has(jobTitle);\n});\n\n// Return results in n8n format\nreturn uniqueNewJobs.map(job => ({ json: job }));"
      },
      "typeVersion": 2
    },
    {
      "id": "0509c73d-5730-4a21-8cc6-9ffd176305c1",
      "name": "Split New Jobs for AI",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        992,
        800
      ],
      "parameters": {
        "options": {},
        "batchSize": 1
      },
      "typeVersion": 1
    },
    {
      "id": "c9fbcea5-431e-4885-9bcf-db3e44dc5a20",
      "name": "Append to Sheet (All New Jobs)",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2112,
        512
      ],
      "parameters": {
        "columns": {
          "value": {
            "link": "={{ $json.link }}",
            "company": "={{ $json.company }}",
            "job_listing": "={{ $json.job_listing }}"
          },
          "schema": [
            {
              "id": "company",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "company",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "job_listing",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "job_listing",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "link",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "link",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": 828928514,
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1bihAkufqP9EVYsQo9CdyMGCF7e5w-mgBmPSmzwsAA3I/edit#gid=828928514",
          "cachedResultName": "Jobs"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1bihAkufqP9EVYsQo9CdyMGCF7e5w-mgBmPSmzwsAA3I",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1bihAkufqP9EVYsQo9CdyMGCF7e5w-mgBmPSmzwsAA3I/edit?usp=drivesdk",
          "cachedResultName": "Companies list"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "ded39c1f-bfe6-4e2a-a3eb-d2db08866ade",
      "name": "Merge All Paths",
      "type": "n8n-nodes-base.merge",
      "position": [
        2272,
        800
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "71c8154c-5b47-4e90-a657-5f04a864c228",
      "name": "Send Personalized Email",
      "type": "n8n-nodes-base.gmail",
      "position": [
        2496,
        800
      ],
      "parameters": {
        "sendTo": "user@example.com",
        "message": "=<h3>\ud83d\ude80 Today's Top Job Alerts</h3>\n\nCompany: {{ $json.company }}\n\nJob: {{ $json.job_listing }}\n\nLink: {{ $json.link }}",
        "options": {},
        "subject": "Daily High-Relevance Job Alerts"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "d7f66b84-05fd-40cb-b374-d8750d6df909",
      "name": "Final Success Confirmation",
      "type": "n8n-nodes-base.noOp",
      "position": [
        2752,
        800
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "8c49e149-3f5b-4f0c-978f-84b4ac5eada0",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1232,
        352
      ],
      "parameters": {
        "color": 7,
        "width": 576,
        "height": 336,
        "content": "## Company Setup\nThis starts the workflow every day at 9 AM. It gets the list of companies to check from Google Sheets and prepares them one by one for job scanning."
      },
      "typeVersion": 1
    },
    {
      "id": "13d19688-e078-441b-9cfc-0a7fea46b660",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "disabled": true,
      "position": [
        -592,
        352
      ],
      "parameters": {
        "color": 7,
        "width": 720,
        "height": 608,
        "content": "## Collect Jobs\nThis part visits each company's career page and copies all job listings. It gets the job titles, company names, and application links, then prepares them for checking."
      },
      "typeVersion": 1
    },
    {
      "id": "c9c5cff3-55a7-4abe-8d30-b8ff80d68c70",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "disabled": true,
      "position": [
        272,
        512
      ],
      "parameters": {
        "color": 7,
        "width": 832,
        "height": 464,
        "content": "## Process Jobs\nThis checks new jobs against your existing job database. It removes duplicate jobs you already have and keeps only the new ones for AI analysis."
      },
      "typeVersion": 1
    },
    {
      "id": "1e85aba1-eafe-468e-981e-62fc3b44a945",
      "name": "Sticky Note11",
      "type": "n8n-nodes-base.stickyNote",
      "disabled": true,
      "position": [
        1184,
        304
      ],
      "parameters": {
        "color": 7,
        "width": 736,
        "height": 672,
        "content": "## AI Job Analysis\nThe AI looks at each job title and gives it a score from 1-10. It also finds the seniority level and tech skills needed. Jobs scoring 8 or higher are marked as high priority."
      },
      "typeVersion": 1
    },
    {
      "id": "5c38ec8e-eeb6-4f09-8252-2fe3a760ae06",
      "name": "Sticky Note12",
      "type": "n8n-nodes-base.stickyNote",
      "disabled": true,
      "position": [
        2080,
        352
      ],
      "parameters": {
        "color": 7,
        "width": 800,
        "height": 608,
        "content": "## Save & Alert\nThis saves all new jobs to Google Sheets and sends email alerts for high-scoring jobs. It makes sure everything finishes correctly."
      },
      "typeVersion": 1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "daac43f3-8acc-4d43-b463-5159f0499f4f",
  "connections": {
    "Job Data Parser": {
      "ai_outputParser": [
        [
          {
            "node": "Job Listing Agent",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Merge All Paths": {
      "main": [
        [
          {
            "node": "Send Personalized Email",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split Companies": {
      "main": [
        [
          {
            "node": "Job Listing Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Company URLs": {
      "main": [
        [
          {
            "node": "Split Companies",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Job Listing Agent": {
      "main": [
        [
          {
            "node": "Get All Existing Jobs",
            "type": "main",
            "index": 0
          },
          {
            "node": "Slack Error Alert",
            "type": "main",
            "index": 0
          },
          {
            "node": "Convert Job Data to Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Decodo Job Scraper": {
      "ai_tool": [
        [
          {
            "node": "Job Listing Agent",
            "type": "ai_tool",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Job Analyzer": {
      "ai_languageModel": [
        [
          {
            "node": "Job Listing Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Get All Existing Jobs": {
      "main": [
        [
          {
            "node": "Merge New/Existing Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Split New Jobs for AI": {
      "main": [
        [
          {
            "node": "Job Relevance Analyzer",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Daily Job Scan Trigger": {
      "main": [
        [
          {
            "node": "Get Company URLs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Job Relevance Analyzer": {
      "main": [
        [
          {
            "node": "Enrich Job Data with AI Insights",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Relevance Model": {
      "ai_languageModel": [
        [
          {
            "node": "Job Relevance Analyzer",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Compare and Filter Jobs": {
      "main": [
        [
          {
            "node": "Split New Jobs for AI",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge New/Existing Data": {
      "main": [
        [
          {
            "node": "Compare and Filter Jobs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Personalized Email": {
      "main": [
        [
          {
            "node": "Final Success Confirmation",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "Job Relevance Analyzer",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Check High Relevance Jobs": {
      "main": [
        [
          {
            "node": "Append to Sheet (All New Jobs)",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Merge All Paths",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Convert Job Data to Items": {
      "main": [
        [
          {
            "node": "Merge New/Existing Data",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Append to Sheet (All New Jobs)": {
      "main": [
        [
          {
            "node": "Merge All Paths",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Enrich Job Data with AI Insights": {
      "main": [
        [
          {
            "node": "Check High Relevance Jobs",
            "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

Stay ahead in your job search with this Automated Job Intelligence System! This workflow scans company career pages daily for new job listings, uses AI to analyze job relevance and seniority levels, and sends personalized email alerts for high-priority opportunities while…

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

Created by: Peyton Leveillee Last updated: October 2025

OpenAI Chat, Google Sheets, HTTP Request +5
AI & RAG

This workflow automates end-to-end ESG (Environmental, Social, and Governance) sustainability reporting for enterprise sustainability teams, compliance officers, and green governance leads. It solves

Agent, OpenAI Chat, Output Parser Structured +12
AI & RAG

This template is designed for B2B sales teams, recruiters, and business development professionals who want to identify sales opportunities by monitoring hiring signals from target companies. It's part

@Apify/N8N Nodes Apify, Google Sheets, Agent +4
AI & RAG

Automates sales data analysis and strategic insight generation for sales managers and strategists needing actionable intelligence. Fetches multi-source data from sales, marketing, and financial system

HTTP Request, Agent, OpenAI Chat +6
AI & RAG

Decodo is a powerful public data access platform offering managed web scraping APIs and proxy infrastructure to collect structured web data at scale. It handles proxies, anti-bot protection, JavaScrip

OpenAI Chat, Agent, Slack +5