This workflow corresponds to n8n.io template #9303 — 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": "dc1dcca4-8789-4403-841a-690878eb0a53",
"name": "Each post",
"type": "n8n-nodes-base.httpRequest",
"position": [
576,
-96
],
"parameters": {
"url": "={{ $json[\"jobLink\"] }}",
"options": {
"batching": {
"batch": {
"batchSize": 10,
"batchInterval": 5000
}
}
}
},
"typeVersion": 4.2
},
{
"id": "3b059cf0-931e-4ce1-8354-11382920d3d0",
"name": "Extract title & description",
"type": "n8n-nodes-base.html",
"position": [
864,
-240
],
"parameters": {
"options": {},
"operation": "extractHtmlContent",
"extractionValues": {
"values": [
{
"key": "jobDescription",
"attribute": "content",
"cssSelector": "meta[property=\"og:description\"]",
"returnValue": "attribute"
},
{
"key": "jobTitle",
"attribute": "content",
"cssSelector": "meta[property=\"og:title\"]",
"returnValue": "attribute"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "6b041491-47c6-4194-98ab-c410631b16e7",
"name": "Last 7 days",
"type": "n8n-nodes-base.filter",
"position": [
352,
32
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "551c6c94-a861-47b7-8850-32fadf883736",
"operator": {
"type": "dateTime",
"operation": "after"
},
"leftValue": "={{ $json.date }}",
"rightValue": "={{$now.minus({days: 7})}} "
}
]
}
},
"typeVersion": 2.2
},
{
"id": "16422542-708f-4af7-8ecc-b0633fa55beb",
"name": "Get list page",
"type": "n8n-nodes-base.httpRequest",
"position": [
-320,
32
],
"parameters": {
"url": "https://community.n8n.io/c/jobs/13",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "971564de-3d6b-4f55-bfd8-4c4c80635885",
"name": "Extract posts",
"type": "n8n-nodes-base.html",
"position": [
-96,
32
],
"parameters": {
"options": {},
"operation": "extractHtmlContent",
"extractionValues": {
"values": [
{
"key": "jobLink",
"attribute": "href",
"cssSelector": ".raw-link",
"returnArray": true,
"returnValue": "attribute"
},
{
"key": "date",
"cssSelector": ".topic-list-item td:last-child",
"returnArray": true
}
]
}
},
"typeVersion": 1.2
},
{
"id": "d69d273d-f319-4473-8322-846bdd6c85b7",
"name": "Merge objects",
"type": "n8n-nodes-base.code",
"position": [
128,
32
],
"parameters": {
"jsCode": "// Input data from previous node is available in items array\nconst jobLinks = items[0].json[\"jobLink\"];\nconst dates = items[0].json.date;\n\n// Create new array of merged objects\nconst merged = jobLinks.map((link, index) => ({\n \"jobLink\": link,\n \"date\": dates[index],\n \"source\": \"n8n-forum\"\n}));\n\n// Return the merged data\nreturn merged.map(item => ({ json: item }));\n"
},
"typeVersion": 2
},
{
"id": "1237545b-bc8f-4e40-a1f9-be7715d88a1a",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
944,
288
],
"parameters": {
"jsonSchemaExample": "{\n\t\"summary\": \"What the client is looking to build\"\n}"
},
"typeVersion": 1.2
},
{
"id": "86eb1d6b-5fe5-4468-995c-6890286d6432",
"name": "OpenRouter Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"position": [
816,
288
],
"parameters": {
"model": "openai/gpt-5-mini",
"options": {}
},
"credentials": {
"openRouterApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "d3bbfe52-65a6-489c-9cba-bd6cf79f0bf2",
"name": "Generate Job Summary",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
800,
64
],
"parameters": {
"text": "=<content> {{ $('Each post').item.json.data }} </content>",
"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 n8n\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
},
"executeOnce": false,
"typeVersion": 1.5
},
{
"id": "f4ff7c72-e1e9-4473-9a4a-a9e48f464bd1",
"name": "Combine Job Data & Summary",
"type": "n8n-nodes-base.merge",
"position": [
1152,
48
],
"parameters": {
"mode": "combine",
"options": {
"includeUnpaired": false
},
"combineBy": "combineByPosition",
"numberInputs": 3
},
"typeVersion": 3
},
{
"id": "84d23d82-e136-4465-8966-4fdbf107dded",
"name": "Format Summary Output",
"type": "n8n-nodes-base.code",
"position": [
1376,
64
],
"parameters": {
"jsCode": "return $input.all().map((item) => ({...item.json, summary:item.json.output.summary, output: undefined}))\n"
},
"typeVersion": 2
},
{
"id": "d61c6515-a368-4ee5-bd4d-5508f2b5ff51",
"name": "Aggregate All Jobs",
"type": "n8n-nodes-base.code",
"position": [
1600,
64
],
"parameters": {
"jsCode": "const items = $input.all().map((item) => {\n const itemJson = item.json;\n return {\n ...itemJson\n }\n})\n\nreturn {data: items}\n"
},
"typeVersion": 2
},
{
"id": "2e493107-b36c-4908-b37e-9fe43133e3fd",
"name": "Send Weekly Job Digest",
"type": "n8n-nodes-base.emailSend",
"position": [
1824,
64
],
"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": "250a3bdf-9a6c-4c86-a837-1ba70c6c0161",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-656,
-240
],
"parameters": {
"width": 320,
"height": 224,
"content": "## \ud83c\udfaf WORKFLOW START\nThis workflow scrapes job postings from the n8n community forum,\nuses AI to summarize each opportunity, and emails you a digest.\n"
},
"typeVersion": 1
},
{
"id": "caf3a804-e37d-4286-abb8-018933fd10b4",
"name": "Run Weekly on Monday Morning",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-544,
32
],
"parameters": {
"rule": {
"interval": [
{
"field": "cronExpression",
"expression": "0 9 * * 1"
}
]
}
},
"typeVersion": 1.2
},
{
"id": "4b548276-a148-4678-820f-9eef6743f5ed",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
240,
-240
],
"parameters": {
"width": 256,
"height": 208,
"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": "d3a054f0-121d-4120-b485-271e3119d5b3",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
784,
432
],
"parameters": {
"width": 320,
"height": 176,
"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": "2d894203-70de-4283-86cd-fb4c50afa800",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
1744,
-176
],
"parameters": {
"width": 256,
"height": 176,
"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
}
],
"connections": {
"Each post": {
"main": [
[
{
"node": "Extract title & description",
"type": "main",
"index": 0
},
{
"node": "Generate Job Summary",
"type": "main",
"index": 0
}
]
]
},
"Last 7 days": {
"main": [
[
{
"node": "Combine Job Data & Summary",
"type": "main",
"index": 1
},
{
"node": "Each post",
"type": "main",
"index": 0
}
]
]
},
"Extract posts": {
"main": [
[
{
"node": "Merge objects",
"type": "main",
"index": 0
}
]
]
},
"Get list page": {
"main": [
[
{
"node": "Extract posts",
"type": "main",
"index": 0
}
]
]
},
"Merge objects": {
"main": [
[
{
"node": "Last 7 days",
"type": "main",
"index": 0
}
]
]
},
"Aggregate All Jobs": {
"main": [
[
{
"node": "Send Weekly Job Digest",
"type": "main",
"index": 0
}
]
]
},
"Generate Job Summary": {
"main": [
[
{
"node": "Combine Job Data & Summary",
"type": "main",
"index": 2
}
]
]
},
"Format Summary Output": {
"main": [
[
{
"node": "Aggregate All Jobs",
"type": "main",
"index": 0
}
]
]
},
"OpenRouter Chat Model": {
"ai_languageModel": [
[
{
"node": "Generate Job Summary",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "Generate Job Summary",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Combine Job Data & Summary": {
"main": [
[
{
"node": "Format Summary Output",
"type": "main",
"index": 0
}
]
]
},
"Extract title & description": {
"main": [
[
{
"node": "Combine Job Data & Summary",
"type": "main",
"index": 0
}
]
]
},
"Run Weekly on Monday Morning": {
"main": [
[
{
"node": "Get list page",
"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
Automate your n8n community job board monitoring with this intelligent workflow that scrapes, analyzes, and delivers opportunities straight to your inbox. Perfect for freelancers, agencies, and developers looking to stay on top of n8n automation projects without manual checking.…
Source: https://n8n.io/workflows/9303/ — 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.
Animal advocates & campaigners who want a weekly briefing on animal-related bills with clear, actionable steps—no manual research needed.
This workflow is built for one core purpose: to maximize the return on your reading time. It turns your passive consumption of articles and highlights into an active system for generating original con
Who is this for? Make.com consultants, automation specialists, and freelancers who want to catch new client opportunities without manually checking the forum.
Scraping Articles Dev.to Prod. Uses itemLists, stickyNote, nocoDb, scheduleTrigger. Scheduled trigger; 44 nodes.
Automated SEO Audit in n8n – Your All-in-One Website Optimization Tool!