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 →
{
"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.
openRouterApismtp
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 →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
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
Visual Regression Testing With Apify And Ai Vision Model. Uses googleDrive, lmChatGoogleGemini, outputParserStructured, stickyNote. Scheduled trigger; 34 nodes.
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
Animal advocates & campaigners who want a weekly briefing on animal-related bills with clear, actionable steps—no manual research needed.
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,