AutomationFlowsWeb Scraping › Automatically Scrape Make.com Job Board with Gpt-5-mini Summaries & Email Digest

Automatically Scrape Make.com Job Board with Gpt-5-mini Summaries & Email Digest

ByJulian Kaiser @jksr on n8n.io

Who is this for? Make.com consultants, automation specialists, and freelancers who want to catch new client opportunities without manually checking the forum.

Cron / scheduled trigger★★★★☆ complexityAI-powered18 nodesOutput Parser StructuredOpenRouter ChatHTTP RequestChain LlmEmail Send
Web Scraping Trigger: Cron / scheduled Nodes: 18 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Chainllm → Emailsend 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": "65c33726-bacc-4180-b62f-15701697516d",
      "name": "Structured Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        1488,
        400
      ],
      "parameters": {
        "jsonSchemaExample": "{\n\t\"summary\": \"What the client is looking to build\"\n}"
      },
      "typeVersion": 1.2
    },
    {
      "id": "652bb452-ea0e-4719-813d-994436d15960",
      "name": "OpenRouter Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
      "position": [
        1360,
        400
      ],
      "parameters": {
        "model": "openai/gpt-5-mini",
        "options": {}
      },
      "credentials": {
        "openRouterApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "c92e0da2-85ff-4a57-970f-1b9f636b8a1b",
      "name": "Fetch Main Job Board",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        224,
        144
      ],
      "parameters": {
        "url": "https://community.make.com/tag/professional-service",
        "options": {}
      },
      "typeVersion": 4.2
    },
    {
      "id": "45216826-c35d-4724-808a-0fc119fb60f4",
      "name": "Extract Job Post Links",
      "type": "n8n-nodes-base.html",
      "position": [
        448,
        144
      ],
      "parameters": {
        "options": {},
        "operation": "extractHtmlContent",
        "extractionValues": {
          "values": [
            {
              "key": "jobTitle",
              "cssSelector": ".topic-list-item .main-link .link-top-line a",
              "returnArray": true
            },
            {
              "key": "jobLink",
              "attribute": "href",
              "cssSelector": ".topic-list-item .main-link .link-top-line a",
              "returnArray": true,
              "returnValue": "attribute"
            },
            {
              "key": "date",
              "cssSelector": ".topic-list-item td:last-child",
              "returnArray": true
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "3fb97846-8387-430c-bc8a-a20528978a46",
      "name": "Filter New/Valid Jobs",
      "type": "n8n-nodes-base.filter",
      "position": [
        896,
        144
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "9db031ce-cbcc-4ccf-8f68-ca6fee8cd510",
              "operator": {
                "type": "dateTime",
                "operation": "after"
              },
              "leftValue": "={{ $json.date }}",
              "rightValue": "={{$now.minus({days: 7})}} "
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "bdabba9a-ba1f-4261-8b97-d8e19987a730",
      "name": "Get Individual Job Page",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1120,
        32
      ],
      "parameters": {
        "url": "={{ $json.jobLink }}",
        "options": {}
      },
      "typeVersion": 4.2
    },
    {
      "id": "0bcf04e4-f4c6-4530-8f42-58baa8e7f19d",
      "name": "Get Page HTML for LLM",
      "type": "n8n-nodes-base.html",
      "position": [
        1408,
        -128
      ],
      "parameters": {
        "options": {},
        "operation": "extractHtmlContent",
        "extractionValues": {
          "values": [
            {
              "key": "jobDescription",
              "attribute": "content",
              "cssSelector": "meta[property=\"og:description\"]",
              "returnValue": "attribute"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "d16a28e9-c6cd-4aa9-9ed6-c25f3a8a6ea6",
      "name": "Extract Job Details with AI",
      "type": "@n8n/n8n-nodes-langchain.chainLlm",
      "position": [
        1344,
        176
      ],
      "parameters": {
        "text": "={{ $json.data }}",
        "messages": {
          "messageValues": [
            {
              "message": "=<prompt>\n    <purpose>\n        Based on this HTML your task is to provide a summary of what the client is looking to build with the automation software make.com\n    </purpose>\n\n    <instructions>\n        <instruction>Output in json format</instruction>\n        <instruction>Give a high level summary of what the client wants to build</instruction>\n        <instruction>Make sure to only distill the relevant text from all the HTML input</instruction>\n    </instructions>\n</prompt>"
            }
          ]
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 1.5
    },
    {
      "id": "eb84699b-e02c-4ef8-b37a-2ffaf395396e",
      "name": "Combine AI Data & URL",
      "type": "n8n-nodes-base.merge",
      "position": [
        1696,
        160
      ],
      "parameters": {
        "mode": "combine",
        "options": {},
        "combineBy": "combineByPosition",
        "numberInputs": 3
      },
      "typeVersion": 3
    },
    {
      "id": "c598080e-3716-4ac4-b1a3-e18c3acb4ba5",
      "name": "Format Job List Items",
      "type": "n8n-nodes-base.code",
      "position": [
        672,
        144
      ],
      "parameters": {
        "jsCode": "const titles = items[0].json[\"jobTitle\"];\nconst links = items[0].json[\"jobLink\"];\nconst dates = items[0].json[\"date\"];\n\nconst merged = titles.map((link, index) => ({\n  \"jobTitle\": link,\n  \"jobLink\": links[index],\n  \"date\": dates[index],\n  \"source\": \"make-forum\"\n}));\n\nreturn merged.map(item => ({ json: item }));\n"
      },
      "typeVersion": 2
    },
    {
      "id": "9f811105-07b4-4c4e-ba7d-85183b718e1f",
      "name": "Clean AI Response",
      "type": "n8n-nodes-base.code",
      "position": [
        1920,
        176
      ],
      "parameters": {
        "jsCode": "return $input.all().map((item) => ({...item.json, summary:item.json.output.summary, output: undefined}))\n"
      },
      "typeVersion": 2
    },
    {
      "id": "1ce88c89-4780-4c6f-9781-0c065ff6473f",
      "name": "Aggregate All Jobs",
      "type": "n8n-nodes-base.code",
      "position": [
        2144,
        176
      ],
      "parameters": {
        "jsCode": "const items = $input.all().map((item) => {\n    const itemJson = item.json;\n    return {\n        ...itemJson\n    }\n})\n\nconsole.log(items.length)\n\nreturn {data: items}\n"
      },
      "typeVersion": 2
    },
    {
      "id": "16173a79-9c23-47b6-8582-ee2c870fdc1a",
      "name": "Send Weekly Job Digest",
      "type": "n8n-nodes-base.emailSend",
      "position": [
        2368,
        176
      ],
      "parameters": {
        "html": "={{(() => {\n  const grouped = $json.data.sort((a,b) => new Date(b.date.replace(/\\s/, 'T')) - new Date(a.date.replace(/\\s/, 'T'))).reduce((acc, job) => {\n    const source = job.source === 'n8n-forum' ? 'n8n-forum' : \n                  job.source === 'make-forum' ? 'make-forum' : \n                  'reddit';\n    if (!acc[source]) acc[source] = [];\n    acc[source].push(job);\n    return acc;\n  }, {});\n  \n  return Object.entries(grouped).reduce((html, [source, jobs]) => \n    html + '<div class=\"section\"><h2>' + \n    (source === 'n8n-forum' ? 'n8n Forum Jobs' : \n     source === 'make-forum' ? 'Make Forum Jobs' : \n     'Reddit Jobs') + '</h2>' +\n    jobs.map(job => \n      '<div class=\"job-item\"><h3><a href=\"' + job.jobLink + '\">' + \n      job.jobTitle + '</a></h3><div class=\"date\">Posted: ' + \n      job.date + '</div><div class=\"source\">Source: ' + \n      (job.source === 'n8n-forum' ? 'n8n Forum' : \n       job.source === 'make-forum' ? 'Make Forum' : \n       'Reddit - ' + job.origin) + '</div><p class=\"summary\">' + \n      job.summary + '</p></div>'\n    ).join('') + '</div>',\n    '<!DOCTYPE html><html><head><style>body{font-family:Arial,sans-serif;line-height:1.6;color:#333;max-width:800px;margin:0 auto;padding:20px}.section{margin-bottom:30px}.job-item{border:1px solid #ddd;margin-bottom:20px;padding:15px;border-radius:5px}h2{color:#2c5282;border-bottom:2px solid #2c5282;padding-bottom:10px;margin-top:30px}h3{color:#2c5282;margin:0 0 10px}a{color:#2b6cb0;text-decoration:none}a:hover{text-decoration:underline}.date,.source{color:#666;font-size:0.9em;margin-bottom:8px}.summary{background:#f8f9fa;padding:10px;border-left:4px solid #4299e1;margin:10px 0}</style></head><body><h1>Latest Job Opportunities</h1><p>Generated on: ' + new Date().toLocaleString() + '</p>'\n  ) + '</body></html>';\n})()}}\n",
        "options": {},
        "subject": "Job Opportunities",
        "toEmail": "test@example.com",
        "fromEmail": "test@example.com"
      },
      "credentials": {
        "smtp": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "ebe89e2a-da83-4150-9204-db0313daf256",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -96,
        -64
      ],
      "parameters": {
        "width": 336,
        "height": 176,
        "content": "## \ud83d\udccb WORKFLOW OVERVIEW\nThis automation scrapes Make.com's professional services forum for job postings, uses AI to summarize each opportunity, and emails you a digest of jobs from the last 7 days.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "e5334bb7-116e-4227-b938-3a4ae1c8c540",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        784,
        -64
      ],
      "parameters": {
        "height": 176,
        "content": "## \u23f1\ufe0f DATE FILTERING\nOnly processes jobs posted within the last 7 days.\nAdjust the filter condition to change this timeframe.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "33890a9f-ae80-4dcf-a430-3924fdc6c891",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1312,
        544
      ],
      "parameters": {
        "width": 320,
        "height": 208,
        "content": "## \ud83e\udd16 AI EXTRACTION\nUses GPT-5-mini to read the job posting HTML and extract a clear summary \nof what the client wants to build. This makes scanning opportunities much faster!\n"
      },
      "typeVersion": 1
    },
    {
      "id": "e19f09cd-617a-45f9-bc2c-47b1ec92a608",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2304,
        -64
      ],
      "parameters": {
        "height": 192,
        "content": "## \ud83d\udce7 EMAIL FORMATTING\nCreates a beautiful HTML email with jobs organized by source.\nUpdate the fromEmail and toEmail parameters to your addresses.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "050341ef-70f2-4e06-9e44-61d519a8910e",
      "name": "Run Weekly on Monday Morning",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        0,
        144
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "cronExpression",
              "expression": "0 9 * * 1"
            }
          ]
        }
      },
      "typeVersion": 1.2
    }
  ],
  "connections": {
    "Clean AI Response": {
      "main": [
        [
          {
            "node": "Aggregate All Jobs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Aggregate All Jobs": {
      "main": [
        [
          {
            "node": "Send Weekly Job Digest",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Main Job Board": {
      "main": [
        [
          {
            "node": "Extract Job Post Links",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Combine AI Data & URL": {
      "main": [
        [
          {
            "node": "Clean AI Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter New/Valid Jobs": {
      "main": [
        [
          {
            "node": "Get Individual Job Page",
            "type": "main",
            "index": 0
          },
          {
            "node": "Combine AI Data & URL",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Format Job List Items": {
      "main": [
        [
          {
            "node": "Filter New/Valid Jobs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Page HTML for LLM": {
      "main": [
        [
          {
            "node": "Combine AI Data & URL",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenRouter Chat Model": {
      "ai_languageModel": [
        [
          {
            "node": "Extract Job Details with AI",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Extract Job Post Links": {
      "main": [
        [
          {
            "node": "Format Job List Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Get Individual Job Page": {
      "main": [
        [
          {
            "node": "Get Page HTML for LLM",
            "type": "main",
            "index": 0
          },
          {
            "node": "Extract Job Details with AI",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "Extract Job Details with AI",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Extract Job Details with AI": {
      "main": [
        [
          {
            "node": "Combine AI Data & URL",
            "type": "main",
            "index": 2
          }
        ]
      ]
    },
    "Run Weekly on Monday Morning": {
      "main": [
        [
          {
            "node": "Fetch Main Job Board",
            "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

Who is this for? Make.com consultants, automation specialists, and freelancers who want to catch new client opportunities without manually checking the forum.

Source: https://n8n.io/workflows/9300/ — original creator credit. Request a take-down →

More Web Scraping workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Web Scraping

Instead of guessing or relying on shallow placeholders, it scrapes real website content, summarizes it intelligently, and feeds that context into an LLM to produce outreach that feels relevant and hum

Chain Llm, Output Parser Structured, HTTP Request +3
Web Scraping

Visual Regression Testing With Apify And Ai Vision Model. Uses googleDrive, lmChatGoogleGemini, outputParserStructured, stickyNote. Scheduled trigger; 34 nodes.

Google Drive, Google Gemini Chat, Output Parser Structured +4
Web Scraping

This n8n workflow is a proof-of-concept template exploring how we might work with multimodal LLMs and their multi-image analysis capabilities. In this demo, we compare 2 screenshots of a webpage taken

Google Drive, Google Gemini Chat, Output Parser Structured +4
Web Scraping

Animal advocates & campaigners who want a weekly briefing on animal-related bills with clear, actionable steps—no manual research needed.

OpenRouter Chat, HTTP Request, Information Extractor +3
Web Scraping

This n8n workflow automates the process of collecting job and decision-maker data, crafting AI-generated referral messages, and drafting them in Gmail—all using a combination of Apify, Google Sheets,

Google Sheets, Chain Llm, Google Gemini Chat +3