This workflow corresponds to n8n.io template #5400 — we link there as the canonical source.
This workflow follows the Chainllm → 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 →
{
"id": "D52UhboStgsiDVAm",
"meta": {
"templateCredsSetupCompleted": true
},
"name": "Newsletter_Automation",
"tags": [
{
"id": "t8g1bzyYGQM5ggH6",
"name": "Gmail",
"createdAt": "2025-06-26T18:21:38.576Z",
"updatedAt": "2025-06-26T18:21:38.576Z"
},
{
"id": "qIGNsK2mwRhrvcaf",
"name": "Postgres",
"createdAt": "2025-06-26T18:21:42.917Z",
"updatedAt": "2025-06-26T18:21:42.917Z"
},
{
"id": "clxg6SupwN47TnEt",
"name": "RSS",
"createdAt": "2025-06-26T18:21:48.079Z",
"updatedAt": "2025-06-26T18:21:48.079Z"
},
{
"id": "cYOPW2d1pSfhhhgG",
"name": "n8n-local",
"createdAt": "2025-06-26T18:22:07.129Z",
"updatedAt": "2025-06-26T18:22:07.129Z"
}
],
"nodes": [
{
"id": "123481d3-0b79-4714-9a0e-25029d68342e",
"name": "When clicking \u2018Execute workflow\u2019",
"type": "n8n-nodes-base.manualTrigger",
"position": [
-2000,
-540
],
"parameters": {},
"typeVersion": 1
},
{
"id": "4ef0bcc5-7dca-41e6-adb5-0ef214c1e775",
"name": "RSS Read",
"type": "n8n-nodes-base.rssFeedRead",
"position": [
-1640,
-520
],
"parameters": {
"url": "https://www.all-ai.de/index.php?option=com_jmap&view=sitemap&format=rss",
"options": {}
},
"typeVersion": 1.1
},
{
"id": "ae5263dc-0d4a-433a-9a8a-fc40603cea53",
"name": "Reduce informations",
"type": "n8n-nodes-base.set",
"position": [
-1040,
-400
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "b99f2b41-0485-4100-a5fd-7d3a37134753",
"name": "title",
"type": "string",
"value": "={{ $json.title }}"
},
{
"id": "ed255d97-648b-4ee5-8752-4eb7656d288c",
"name": "link",
"type": "string",
"value": "={{ $json.link }}"
},
{
"id": "9ba890ae-c693-46b9-9082-f342cae52ba4",
"name": "isoDate",
"type": "string",
"value": "={{ $json.isoDate }}"
},
{
"id": "e2837fee-e337-47b9-8fd3-39c8cf1e25fd",
"name": "content",
"type": "string",
"value": "={{ $json.content }}"
},
{
"id": "00c5dbec-9f43-4cf2-b1d4-d14e56cc2075",
"name": "word_count",
"type": "string",
"value": "={{ $json.word_count }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "153c2704-db7a-437f-b86e-afcc81fef4f1",
"name": "Parse Output to JSON",
"type": "n8n-nodes-base.code",
"position": [
-300,
-580
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "const input = $json.text || $json.data || $json.body || $input.item.json.text;\nconst match = input.match(/{[\\s\\S]*?}/);\n\nif (!match) {\n throw new Error(\"No JSON object found in the input text.\");\n}\n\nlet parsed;\ntry {\n parsed = JSON.parse(match[0]);\n} catch (e) {\n throw new Error(\"Failed to parse JSON: \" + e.message);\n}\n\n// Return a single object (not an array!) in 'Run Once for Each Item' mode\nreturn { json: parsed };\n"
},
"typeVersion": 2
},
{
"id": "e7067f37-1574-4340-85e5-d34c2e441b03",
"name": "Merge Data LLM+RSS",
"type": "n8n-nodes-base.merge",
"position": [
-360,
-120
],
"parameters": {
"mode": "combine",
"options": {},
"fieldsToMatchString": "title"
},
"typeVersion": 3.2
},
{
"id": "b3647c5b-2d39-4592-bcfa-1a59602e8e78",
"name": "Rating 7+",
"type": "n8n-nodes-base.if",
"position": [
-80,
-580
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "c0ce5ff3-8686-4c97-a314-26e1163fb80c",
"operator": {
"type": "number",
"operation": "gte"
},
"leftValue": "={{ $json.rating }}",
"rightValue": 7
}
]
}
},
"typeVersion": 2.2
},
{
"id": "821473dc-ec1b-4abc-9256-7db14ca6df04",
"name": "No Operation, do nothing1",
"type": "n8n-nodes-base.noOp",
"position": [
-300,
-400
],
"parameters": {},
"typeVersion": 1
},
{
"id": "51469de3-d400-4410-93f9-30bfe3df7a1b",
"name": "Parse Output JSON",
"type": "n8n-nodes-base.code",
"onError": "continueErrorOutput",
"position": [
180,
-300
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "// Try to get the input text from common fields\nconst input =\n $json.text ||\n $json.data ||\n $json.body ||\n $json.content ||\n $input.item.json.text ||\n $input.item.json.content ||\n \"\";\n\n// Regex to match the first JSON object in the text (non-greedy)\nconst match = input.match(/{[\\s\\S]*?}/);\n\nif (!match) {\n throw new Error(\"No JSON object found in the input text.\");\n}\n\nlet jsonString = match[0];\n\n// Clean up: Remove unescaped line breaks and fix bad escape sequences\njsonString = jsonString\n // Replace unescaped line breaks inside JSON strings with \\n\n .replace(/([^\\\\])\\\\n/g, '$1\\\\\\\\n') // double-escape existing \\n\n .replace(/\\\\(?![\"\\\\/bfnrtu])/g, '\\\\\\\\') // escape lone backslashes\n .replace(/[\\r\\n]+/g, ' '); // replace all CR/LF with space\n\nlet parsed;\ntry {\n parsed = JSON.parse(jsonString);\n} catch (e) {\n throw new Error(\"Failed to parse JSON: \" + e.message + \"\\nCleaned JSON: \" + jsonString);\n}\n\n// Only return title and summary\nreturn {\n title: parsed.title,\n summary: parsed.summary\n};\n"
},
"retryOnFail": true,
"typeVersion": 2
},
{
"id": "98a20c9b-c1e8-4f3e-a7e2-0c834f3e040f",
"name": "Merge Data Summary + rest",
"type": "n8n-nodes-base.merge",
"onError": "continueRegularOutput",
"position": [
420,
-140
],
"parameters": {
"mode": "combine",
"options": {},
"fieldsToMatchString": "title"
},
"retryOnFail": true,
"typeVersion": 3.2
},
{
"id": "2146269b-3af2-4b27-9935-9cb78254466b",
"name": "No Operation, do nothing2",
"type": "n8n-nodes-base.noOp",
"position": [
420,
-340
],
"parameters": {},
"typeVersion": 1
},
{
"id": "f3a0385f-ccc0-4c33-8990-e06d5d602dcc",
"name": "Format HTML EMail",
"type": "n8n-nodes-base.code",
"position": [
780,
-500
],
"parameters": {
"jsCode": "let html = `<h1>Dein KI-Newsletter</h1>`;\nfor (const item of items) {\n html += `\n <h2>${item.json.title}</h2>\n <hr>\n <p>${item.json.tags}</p>\n <p>${item.json.isoDate}</p>\n <p>${item.json.summary}</p>\n <p><a href=\"${item.json.link}\">Link zum Thema</a></p>\n <hr>`;\n}\nreturn [{ json: { newsletter: html } }];\n"
},
"typeVersion": 2
},
{
"id": "040c7f49-3516-43d2-8bff-55b7bf7dbe6d",
"name": "Send Email Newsletter",
"type": "n8n-nodes-base.gmail",
"position": [
1020,
-500
],
"parameters": {
"message": "=Hello AI Nerd,\n\nhere is your weekly dose of AI News.\n\n{{ $json.newsletter }}",
"options": {},
"subject": "AI News"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "cecc8919-8b7b-4a09-9d55-8d62520954b1",
"name": "Model QWEN3 14B-q4",
"type": "@n8n/n8n-nodes-langchain.lmChatOllama",
"position": [
-620,
-320
],
"parameters": {
"model": "qwen3:14b-q4_K_M",
"options": {}
},
"credentials": {
"ollamaApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "5c8d5c75-30ff-47d3-8f68-c7e237c06584",
"name": "Model Gemma3 4B",
"type": "@n8n/n8n-nodes-langchain.lmChatOllama",
"position": [
-180,
-20
],
"parameters": {
"model": "gemma3:latest",
"options": {}
},
"credentials": {
"ollamaApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "a3c98eb4-dfe8-4e85-a0ed-2414c98f560f",
"name": "Rating & Tagging Articles",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"onError": "continueErrorOutput",
"maxTries": 2,
"position": [
-700,
-560
],
"parameters": {
"text": "=You are an AI assistant. Here is an article:\nTitle: {{ $('Reduce informations').item.json.title }}\nContent: {{ $('Reduce informations').item.json.content }}\n\n{{ $json.my_interests }}\n\nTask:\n- Rate how well this article matches any of my interests (1 = not relevant, 10 = extremely relevant).\n- List which interests match.\n- Suggest 2-3 relevant tags.\n\nOutput JSON: \n{\n \"title\": \"{{ $('Reduce informations').item.json.title }}\"\n \"rating\": <1-10>,\n \"matching_interests\": [...], \n \"tags\": [...]\n}",
"batching": {},
"promptType": "define"
},
"retryOnFail": true,
"typeVersion": 1.7,
"waitBetweenTries": 3000
},
{
"id": "3b144818-7855-4fd4-8d45-05fded3e34c3",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1500,
-660
],
"parameters": {
"color": 3,
"width": 560,
"height": 800,
"content": "## Compare Datasets and reduce data\n- Word_count Code node is just for future Dashboards\n\n\n"
},
"typeVersion": 1
},
{
"id": "d2da2a34-c000-4e01-815b-4209d58c6d60",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-720,
-660
],
"parameters": {
"color": 5,
"width": 1040,
"height": 800,
"content": "## Rate Articles, summarize. Just keep articles who have a rating 7+\n- Download from Ollama: Model QWEN3 14B-q4 and Model gemma3:latest or choose one of your local models"
},
"typeVersion": 1
},
{
"id": "3ae51830-1f60-4dee-9635-d517797576d5",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
340,
-660
],
"parameters": {
"color": 4,
"width": 380,
"height": 800,
"content": "## Save data\n- save the low rated and high rated articles into the table"
},
"typeVersion": 1
},
{
"id": "c72d432b-c327-46b1-8366-7709cd9f8345",
"name": "Create DB and Schema if not exists",
"type": "n8n-nodes-base.postgres",
"position": [
-1780,
-380
],
"parameters": {
"query": "CREATE SCHEMA IF NOT EXISTS ai_references;\n\nCREATE TABLE IF NOT EXISTS ai_references.n8n_newsletter (\n id SERIAL PRIMARY KEY,\n title VARCHAR(255) NOT NULL,\n word_count INTEGER,\n import_date TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,\n pup_date TIMESTAMPTZ,\n relevant BOOLEAN NOT NULL DEFAULT false,\n score INTEGER NOT NULL DEFAULT 1 CHECK (score BETWEEN 1 AND 10)\n);",
"options": {},
"operation": "executeQuery"
},
"credentials": {
"postgres": {
"name": "<your credential>"
}
},
"typeVersion": 2.6
},
{
"id": "082655e9-3e98-4f99-bf16-65122d4de2ab",
"name": "Postgres",
"type": "n8n-nodes-base.postgres",
"position": [
-1460,
-160
],
"parameters": {
"limit": 500,
"table": {
"__rl": true,
"mode": "list",
"value": "n8n_newsletter",
"cachedResultName": "n8n_newsletter"
},
"schema": {
"__rl": true,
"mode": "list",
"value": "ai_references",
"cachedResultName": "ai_references"
},
"options": {},
"operation": "select"
},
"credentials": {
"postgres": {
"name": "<your credential>"
}
},
"typeVersion": 2.6
},
{
"id": "2df777fb-9f0e-426d-b545-ef09bdd52aa8",
"name": "Compare Datasets",
"type": "n8n-nodes-base.compareDatasets",
"position": [
-1240,
-300
],
"parameters": {
"options": {},
"mergeByFields": {
"values": [
{
"field1": "title",
"field2": "title"
}
]
}
},
"typeVersion": 2.3
},
{
"id": "a0b43f07-0bf8-4868-a910-cddf252150f6",
"name": "Summarize Article",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"onError": "continueErrorOutput",
"position": [
-180,
-240
],
"parameters": {
"text": "=You are a helpful summarizer.\n\n{{ $json.content }}\n\nGoal\nWrite a summary of maximum 170 words.\n\nRules\nDo NOT translate the text.\n\nAlways use the same language as the input text.\n\nIf the input is in German, write the summary in German. If the input is in English, write the summary in English. If the input is in another language, use that language for the summary.\n\nDo not add any explanations or comments.\n\nOutput JSON:\n{\n\"title\": \"{{ $json.title }}\",\n\"summary\": \"...\"\n}",
"batching": {},
"promptType": "define"
},
"retryOnFail": true,
"typeVersion": 1.7
},
{
"id": "268a046b-5035-4379-833b-dbd1cbcc7963",
"name": "Count words",
"type": "n8n-nodes-base.code",
"position": [
-1300,
-520
],
"parameters": {
"mode": "runOnceForEachItem",
"jsCode": "// Z\u00e4hlt die W\u00f6rter im content-Feld und f\u00fcgt das Ergebnis als word_count hinzu\nconst content = $input.item.json.content || \"\";\nconst wordCount = content\n .replace(/<[^>]*>/g, ' ') // HTML-Tags entfernen, falls vorhanden\n .trim()\n .split(/\\s+/)\n .filter(Boolean)\n .length;\n\n$input.item.json.word_count = wordCount;\nreturn $input.item;\n"
},
"typeVersion": 2
},
{
"id": "12795406-8265-4e5d-8776-69b7cfa8b007",
"name": "Merge",
"type": "n8n-nodes-base.merge",
"position": [
180,
-520
],
"parameters": {
"mode": "combine",
"options": {},
"fieldsToMatchString": "title"
},
"typeVersion": 3.2
},
{
"id": "f16b306b-0bf1-4055-8b68-ed526d5f885e",
"name": "Insert records <7",
"type": "n8n-nodes-base.postgres",
"position": [
420,
-520
],
"parameters": {
"table": {
"__rl": true,
"mode": "list",
"value": "n8n_newsletter",
"cachedResultName": "n8n_newsletter"
},
"schema": {
"__rl": true,
"mode": "list",
"value": "ai_references",
"cachedResultName": "ai_references"
},
"columns": {
"value": {
"score": "={{ $json.rating }}",
"title": "={{ $json.title }}",
"pup_date": "={{ $json.isoDate }}",
"relevant": false,
"word_count": "={{ $json.word_count }}"
},
"schema": [
{
"id": "id",
"type": "number",
"display": true,
"removed": true,
"required": false,
"displayName": "id",
"defaultMatch": true,
"canBeUsedToMatch": true
},
{
"id": "title",
"type": "string",
"display": true,
"required": true,
"displayName": "title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "word_count",
"type": "number",
"display": true,
"required": false,
"displayName": "word_count",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "import_date",
"type": "dateTime",
"display": true,
"removed": true,
"required": false,
"displayName": "import_date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "pup_date",
"type": "dateTime",
"display": true,
"required": false,
"displayName": "pup_date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "relevant",
"type": "boolean",
"display": true,
"removed": false,
"required": false,
"displayName": "relevant",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "score",
"type": "number",
"display": true,
"removed": false,
"required": false,
"displayName": "score",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"id"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {}
},
"credentials": {
"postgres": {
"name": "<your credential>"
}
},
"typeVersion": 2.6
},
{
"id": "deb81770-297e-45c1-8d8a-711533aea50e",
"name": "Insert records >=7",
"type": "n8n-nodes-base.postgres",
"position": [
600,
-340
],
"parameters": {
"table": {
"__rl": true,
"mode": "list",
"value": "n8n_newsletter",
"cachedResultName": "n8n_newsletter"
},
"schema": {
"__rl": true,
"mode": "list",
"value": "ai_references",
"cachedResultName": "ai_references"
},
"columns": {
"value": {
"score": "={{ $json.rating }}",
"title": "={{ $json.title }}",
"pup_date": "={{ $json.isoDate }}",
"relevant": true,
"word_count": "={{ $json.word_count }}"
},
"schema": [
{
"id": "id",
"type": "number",
"display": true,
"removed": true,
"required": false,
"displayName": "id",
"defaultMatch": true,
"canBeUsedToMatch": true
},
{
"id": "title",
"type": "string",
"display": true,
"required": true,
"displayName": "title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "word_count",
"type": "number",
"display": true,
"required": false,
"displayName": "word_count",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "import_date",
"type": "dateTime",
"display": true,
"removed": true,
"required": false,
"displayName": "import_date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "pup_date",
"type": "dateTime",
"display": true,
"required": false,
"displayName": "pup_date",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "relevant",
"type": "boolean",
"display": true,
"removed": false,
"required": false,
"displayName": "relevant",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "score",
"type": "number",
"display": true,
"removed": false,
"required": false,
"displayName": "score",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"id"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {}
},
"credentials": {
"postgres": {
"name": "<your credential>"
}
},
"typeVersion": 2.6
},
{
"id": "f67b0231-d8fa-4612-afa1-34a8f36092d2",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"disabled": true,
"position": [
-2000,
-340
],
"parameters": {
"rule": {
"interval": [
{
"daysInterval": 3,
"triggerAtHour": 9
}
]
}
},
"typeVersion": 1.2
},
{
"id": "045e783e-bd35-491f-8a8b-975797ce5628",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
960,
-660
],
"parameters": {
"width": 200,
"height": 340,
"content": "## Change here\n- Your Email\n- Your Google Auth2"
},
"typeVersion": 1
},
{
"id": "6b3dd7fb-e6d0-4b0a-b90e-aad30f039853",
"name": "Set your Interests",
"type": "n8n-nodes-base.set",
"position": [
-880,
-560
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "02c2b083-72a7-4f0b-9baa-811764f237f6",
"name": "my_interests",
"type": "string",
"value": "=My interests are:\n1. AI Automation\n2. MCP - Model Context Protocol\n3. RAG Retrieval Augmented Generation\n4. European AI Act\n5. No Code or Low Code AI Tools\n\n"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "12ef2f98-75b4-499a-8b9a-5e4be6b29607",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
-920,
-660
],
"parameters": {
"width": 180,
"height": 260,
"content": "## Change here\n- Your Interests"
},
"typeVersion": 1
},
{
"id": "3ce9a754-5ebb-4bb5-a4bf-ea521fd2a3e0",
"name": "Sticky Note5",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1800,
-660
],
"parameters": {
"width": 280,
"height": 500,
"content": "## Change here\n- Postgres Creds\n- RSS Feed"
},
"typeVersion": 1
},
{
"id": "5abd1d19-9285-4f2f-b183-1dc72509f52a",
"name": "Sticky Note6",
"type": "n8n-nodes-base.stickyNote",
"position": [
-2080,
-660
],
"parameters": {
"width": 260,
"height": 500,
"content": "## Change here\n- Trigger manually\n- or schedule (deactivated)"
},
"typeVersion": 1
},
{
"id": "3336f355-fe93-4d10-9f1e-3ed750dca1b3",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
740,
-660
],
"parameters": {
"width": 200,
"height": 340,
"content": "## Change here\n- Style and headline of your Newsletter"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"executionOrder": "v1"
},
"versionId": "83e66c8c-65f6-46b9-baaf-4f787baae331",
"connections": {
"Merge": {
"main": [
[
{
"node": "Insert records <7",
"type": "main",
"index": 0
}
]
]
},
"Postgres": {
"main": [
[
{
"node": "Compare Datasets",
"type": "main",
"index": 1
}
]
]
},
"RSS Read": {
"main": [
[
{
"node": "Count words",
"type": "main",
"index": 0
}
]
]
},
"Rating 7+": {
"main": [
[
{
"node": "Merge Data LLM+RSS",
"type": "main",
"index": 0
}
],
[
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
},
"Count words": {
"main": [
[
{
"node": "Compare Datasets",
"type": "main",
"index": 0
}
]
]
},
"Model Gemma3 4B": {
"ai_languageModel": [
[
{
"node": "Summarize Article",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Compare Datasets": {
"main": [
[
{
"node": "Reduce informations",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[]
]
},
"Format HTML EMail": {
"main": [
[
{
"node": "Send Email Newsletter",
"type": "main",
"index": 0
}
]
]
},
"Parse Output JSON": {
"main": [
[
{
"node": "Merge Data Summary + rest",
"type": "main",
"index": 0
}
],
[
{
"node": "No Operation, do nothing2",
"type": "main",
"index": 0
}
]
]
},
"Summarize Article": {
"main": [
[
{
"node": "Parse Output JSON",
"type": "main",
"index": 0
}
]
]
},
"Insert records >=7": {
"main": [
[]
]
},
"Merge Data LLM+RSS": {
"main": [
[
{
"node": "Summarize Article",
"type": "main",
"index": 0
},
{
"node": "Merge Data Summary + rest",
"type": "main",
"index": 1
}
]
]
},
"Model QWEN3 14B-q4": {
"ai_languageModel": [
[
{
"node": "Rating & Tagging Articles",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Set your Interests": {
"main": [
[
{
"node": "Rating & Tagging Articles",
"type": "main",
"index": 0
}
]
]
},
"Reduce informations": {
"main": [
[
{
"node": "Set your Interests",
"type": "main",
"index": 0
},
{
"node": "Merge Data LLM+RSS",
"type": "main",
"index": 1
},
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
},
"Parse Output to JSON": {
"main": [
[
{
"node": "Rating 7+",
"type": "main",
"index": 0
}
]
]
},
"Merge Data Summary + rest": {
"main": [
[
{
"node": "Format HTML EMail",
"type": "main",
"index": 0
},
{
"node": "Insert records >=7",
"type": "main",
"index": 0
}
]
]
},
"Rating & Tagging Articles": {
"main": [
[
{
"node": "Parse Output to JSON",
"type": "main",
"index": 0
}
],
[
{
"node": "No Operation, do nothing1",
"type": "main",
"index": 0
}
]
]
},
"Create DB and Schema if not exists": {
"main": [
[
{
"node": "RSS Read",
"type": "main",
"index": 0
},
{
"node": "Postgres",
"type": "main",
"index": 0
}
]
]
},
"When clicking \u2018Execute workflow\u2019": {
"main": [
[
{
"node": "Create DB and Schema if not exists",
"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.
gmailOAuth2ollamaApipostgres
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Collects articles from your preferred RSS feeds. Rates and tags each article using an AI model (e.g., QWEN 14B-s4), filtering for relevance and quality. Summarizes high-rated articles with a language model (e.g., Gemma3 4B) for quick, digestible reading. Checks for duplicates to…
Source: https://n8n.io/workflows/5400/ — 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.
My workflow 14. Uses lmChatOpenAi, outputParserStructured, rssFeedRead, httpRequest. Event-driven trigger; 63 nodes.
This workflow creates an automated system for monitoring and receiving notifications about new videos from your favorite YouTube channels through RSS feeds, with customizable email and Telegram notifi
Rss-Daily. Uses @mendable/n8n-nodes-firecrawl, agent, gmail, lmChatOllama. Scheduled trigger; 38 nodes.
This workflow automatically converts incoming RSS/news articles into structured, AI-enriched content records. It uses a local AI model to summarize articles, extract metadata, and classify content bef
My workflow 14. Uses rssFeedRead, chainLlm, outputParserStructured, httpRequest. Event-driven trigger; 30 nodes.