This workflow follows the Emailsend → HTTP Request 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 →
{
"name": "Tech Daily Digest",
"nodes": [
{
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 7
}
]
}
},
"type": "n8n-nodes-base.scheduleTrigger",
"typeVersion": 1.3,
"position": [
-240,
-288
],
"id": "b9edff6d-cec3-445b-a481-fbb76605ef1a",
"name": "Schedule Trigger"
},
{
"parameters": {
"url": "https://venturebeat.com/category/ai/feed/",
"options": {}
},
"type": "n8n-nodes-base.rssFeedRead",
"typeVersion": 1.2,
"position": [
-16,
-192
],
"id": "bca14932-93ac-4f1f-8adc-85fa06ca8b99",
"name": "Venturebeat"
},
{
"parameters": {
"url": "https://techcrunch.com/tag/artificial-intelligence/feed/",
"options": {}
},
"type": "n8n-nodes-base.rssFeedRead",
"typeVersion": 1.2,
"position": [
-16,
-384
],
"id": "690b9285-4ceb-4dcc-9542-eaed27ab293d",
"name": "Techcrunch"
},
{
"parameters": {
"jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each onez\n// for (const item of $input.all()) {\n// item.json.myNewField = 1;\n// }\n\n// return $input.all();\n\nconsole.log($input)\n\nlet output = \"\ud83e\udde0 AI DAILY DIGEST\\n\\n\";\n\n$input.all().forEach(item => {\n output += `\u2022 ${item.json.title}\\n`;\n output += `${item.json.link}\\n\\n`;\n});\n\nreturn [{ json: { text: output } }];\n\n\n"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
-240,
32
],
"id": "e14bf436-4ed2-4fa8-b02a-c5716d8647da",
"name": "Code in JavaScript"
},
{
"parameters": {
"fromEmail": "sidpai.dev@gmail.com",
"toEmail": "sidpai.dev@gmail.com",
"subject": "\ud83e\udde0 AI News Bot",
"html": "={{$json.text.replace(/\\n/g, \"<br>\")}}",
"options": {}
},
"type": "n8n-nodes-base.emailSend",
"typeVersion": 2.1,
"position": [
-16,
32
],
"id": "35e8b7be-7e9a-4e41-b353-67458839ce24",
"name": "Send an Email",
"credentials": {
"smtp": {
"name": "<your credential>"
}
}
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "loose",
"version": 3
},
"conditions": [
{
"id": "9f140a70-619a-4407-a78a-e7bb45b4b910",
"leftValue": "={{ $json.title.length}}",
"rightValue": 20,
"operator": {
"type": "number",
"operation": "gt"
}
},
{
"id": "b84ba03e-4b6e-40ae-bbc7-d24b2f78dd75",
"leftValue": "={{ $json.content.length}}",
"rightValue": 100,
"operator": {
"type": "number",
"operation": "lt"
}
}
],
"combinator": "and"
},
"looseTypeValidation": true,
"options": {}
},
"type": "n8n-nodes-base.if",
"typeVersion": 2.3,
"position": [
432,
-288
],
"id": "2d9a5e7c-9662-4bb8-a5d3-89ff6ce50834",
"name": "Basic FIlter"
},
{
"parameters": {},
"type": "n8n-nodes-base.merge",
"typeVersion": 3.2,
"position": [
208,
-288
],
"id": "ba442032-4256-44e6-baff-331f04806218",
"name": "News Merge"
},
{
"parameters": {
"method": "POST",
"url": "={{\"https://generativelanguage.googleapis.com/v1/models/gemini-2.5-flash:generateContent?key=\" + $env.GEMINI_API_KEY}}",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={\n \"contents\": [\n {\n \"role\": \"user\",\n \"parts\": [\n {\n \"text\": \"You are a news categorization system.\\n\\nYou MUST choose exactly one category using the rules below.\\nDo NOT choose Other unless none apply.\\n\\nRules (in order):\\n1. If the article mentions artificial intelligence, machine learning, AI models, LLMs, or AI startups \u2192 AI\\n2. If the article is mainly about funding, venture capital, seed/Series rounds, or early-stage companies \u2192 Startups\\n3. If the article is mainly about Google, Meta, Apple, Amazon, Microsoft, Nvidia, OpenAI, or similar \u2192 BigTech\\n4. If the article is mainly about academic studies, labs, or scientific breakthroughs \u2192 Research\\n5. If the article is about laws, regulation, courts, elections, or government policy \u2192 Policy\\n6. If the article is about hacking, cyber attacks, malware, privacy breaches, or vulnerabilities \u2192 Security\\n7. If the article is about banking, payments, crypto, fintech startups, or financial infrastructure \u2192 FinTech\\n8. If the article is about healthcare, biotech, medical devices, AI drug discovery, or health startups \u2192 HealthTech\\n9. If the article is about developer tools, programming frameworks, cloud platforms, APIs, or DevOps \u2192 DevTools\\n10. Otherwise \u2192 Other\\n\\nOutput ONLY the category name.\\nNo explanation.\\nNo punctuation.\\n\\nTitle: {{$json.title}}\\n\\nContent: {{$json.content || $json.contentSnippet}}\"\n }\n ]\n }\n ]\n}\n",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.4,
"position": [
-16,
-608
],
"id": "707f9f92-95a4-4974-9a6d-7a0d8d518904",
"name": "Gemini_Classify"
},
{
"parameters": {
"amount": 15
},
"type": "n8n-nodes-base.wait",
"typeVersion": 1.1,
"position": [
-240,
-608
],
"id": "5557631a-cc92-4517-87e2-62e888cc85b7",
"name": "Wait",
"disabled": true
},
{
"parameters": {
"method": "POST",
"url": "https://openrouter.ai/api/v1/chat/completions",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Authorization",
"value": "={{\"Bearer \" + $env.OPENROUTER_API_KEY}}"
},
{
"name": "HTTP-Referer",
"value": "https://n8n.io"
},
{
"name": "X-Title",
"value": "AI-News-Agent"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={\n \"model\": \"google/gemma-3n-e2b-it:free\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"You are a news categorization system.\\n\\nYou must output 1 things. ONE - exactly one category from this list:\\nAI, Startups, BigTech, Research, Policy, Security, FinTech, HealthTech, DevTools, Other.\\n\\nDo not explain.\\nDo not add punctuation.\\n\\nClassify the following article.\\n\\nTitle: {{$json.title}}\\n\\nContent: {{$json.content || $json.contentSnippet}}\\n\\nCreator: {{ $json.creator }}\\n\\n\"\n }\n ],\n \"temperature\": 0\n}\n",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.4,
"position": [
656,
-368
],
"id": "cabc1caf-66ba-4d1c-9a10-2b20465710ae",
"name": "OR_Classify"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "273eaf6d-c70b-4511-b588-e36d3f342d14",
"name": "category",
"value": "={{$json.choices[0].message.content.trim()}}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
880,
-368
],
"id": "4a04d810-f582-43c6-bfc6-db0df9ad78ba",
"name": "Set_Category"
},
{
"parameters": {
"method": "POST",
"url": "https://openrouter.ai/api/v1/chat/completions",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Authorization",
"value": "={{\"Bearer \" + $env.OPENROUTER_API_KEY}}"
},
{
"name": "HTTP-Referer",
"value": "https://n8n.io"
},
{
"name": "X-Title",
"value": "AI-News-Agent"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={\n \"model\": \"google/gemma-3n-e2b-it:free\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"You are a tech news analyst.\\n\\nRate the importance of this article from 1 to 5.\\n\\n1 = trivial, low impact\\n2 = minor update\\n3 = moderately relevant\\n4 = significant industry impact\\n5 = major breakthrough\\n\\nReturn ONLY a number.\\nNo explanation.\\nNo punctuation.\\n\\nTitle: {{$json.title}}\\n\\nContent: {{$json.content || $json.contentSnippet}}\\n\\nCategory: {{$json.category}}\"\n }\n ],\n \"temperature\": 0\n}\n",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.4,
"position": [
1328,
-224
],
"id": "c6951157-ee34-4f10-87ab-da206df4b5d4",
"name": "OR_Score"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "4fde2425-4ec5-4732-81aa-86a04956af2f",
"name": "score",
"value": "={{$json.choices[0].message.content.trim()}}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
1552,
-224
],
"id": "b3f9fd2d-438b-45d4-9ef2-8e25987e47ad",
"name": "Set_Score"
},
{
"parameters": {
"mode": "combine",
"combineBy": "combineByPosition",
"options": {}
},
"type": "n8n-nodes-base.merge",
"typeVersion": 3.2,
"position": [
1776,
-288
],
"id": "84242a75-cd6d-4eab-9d98-698bb0d85e3f",
"name": "Merge_Score"
},
{
"parameters": {
"conditions": {
"options": {
"caseSensitive": true,
"leftValue": "",
"typeValidation": "loose",
"version": 3
},
"conditions": [
{
"id": "80f0d241-978a-461d-8af5-5b38b44a2642",
"leftValue": "={{ $json.score }}",
"rightValue": 3,
"operator": {
"type": "number",
"operation": "gte"
}
}
],
"combinator": "and"
},
"looseTypeValidation": true,
"options": {}
},
"type": "n8n-nodes-base.if",
"typeVersion": 2.3,
"position": [
2000,
-288
],
"id": "0fbc8cba-8e98-445f-b942-04d4aff3b69d",
"name": "Score_Filter"
},
{
"parameters": {
"method": "POST",
"url": "https://openrouter.ai/api/v1/chat/completions",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Content-Type",
"value": "application/json"
},
{
"name": "Authorization",
"value": "={{\"Bearer \" + $env.OPENROUTER_API_KEY}}"
},
{
"name": "HTTP-Referer",
"value": "https://n8n.io"
},
{
"name": "X-Title",
"value": "AI-News-Agent"
}
]
},
"sendBody": true,
"specifyBody": "json",
"jsonBody": "={\n \"model\": \"google/gemma-3n-e2b-it:free\",\n \"messages\": [\n {\n \"role\": \"user\",\n \"content\": \"You are a professional tech editor.\\n\\nWrite a clean, engaging news brief in this format:\\n\\nSummary: (max 2 sentences, crisp and informative)\\nKey Points:\\n- point 1 (unique insight)\\n- point 2 (different insight)\\n- point 3 (different insight)\\nImpact: (1 short sentence on who/what is affected)\\n\\nRules:\\n- Do NOT repeat the title\\n- Avoid redundancy\\n- No filler phrases\\n- No emojis\\n- No category or score\\n- Keep under 90 words\\n\\nTitle: {{$json.title}}\\n\\nContent: {{$json.content || $json.contentSnippet}}\\n\\nCategory: {{$json.category}}\\n\\nScore: {{$json.score}}\"\n }\n ],\n \"temperature\": 0.2\n}\n",
"options": {}
},
"type": "n8n-nodes-base.httpRequest",
"typeVersion": 4.4,
"position": [
2224,
-368
],
"id": "3b1ce8db-0893-4912-94ad-bf61eef57bad",
"name": "OR_Summary"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "03830b06-e976-4586-b888-98103a22a7ea",
"name": "summary",
"value": "={{ $json.choices[0].message.content.trim() }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
2448,
-368
],
"id": "12f13379-1dc8-4d36-94b5-1eb1c0d5f908",
"name": "Set_Summary"
},
{
"parameters": {
"mode": "combine",
"combineBy": "combineByPosition",
"options": {}
},
"type": "n8n-nodes-base.merge",
"typeVersion": 3.2,
"position": [
2672,
-288
],
"id": "bb44c7de-bffa-4dba-9a4e-e45b9a1e27a1",
"name": "Merge_Summary"
},
{
"parameters": {
"jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nconst grouped = {};\n\n// Group items by category\nfor (const item of $input.all()) {\n const category = item.json.category || 'Uncategorized';\n \n if (!grouped[category]) {\n grouped[category] = {\n category: category,\n articles: []\n };\n }\n \n grouped[category].articles.push(item.json);\n}\n\n// Sort articles within each category by score (descending)\nfor (const category in grouped) {\n grouped[category].articles.sort((a, b) => {\n return (parseInt(b.score) || 0) - (parseInt(a.score) || 0);\n });\n}\n\n// Convert to array\nconst result = Object.values(grouped);\n\nreturn result.map(group => ({ json: group }));"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
2896,
-288
],
"id": "68275753-c199-4f77-ae93-1b44fa634de2",
"name": "Code in JavaScript1"
},
{
"parameters": {
"jsCode": "// Loop over input items and add a new field called 'myNewField' to the JSON of each one\nlet body = \"\";\nconst today = new Date().toLocaleDateString('en-US', { \n month: 'long', \n day: 'numeric', \n year: 'numeric' \n});\n\nbody += `<html><body style=\"font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Arial, sans-serif; max-width: 650px; margin: 0 auto; padding: 20px; background-color: #ffffff; color: #333;\">`;\n\nbody += `<div style=\"border-bottom: 3px solid #000; padding-bottom: 15px; margin-bottom: 30px;\">`;\nbody += `<h1 style=\"margin: 0; font-size: 24px; font-weight: 600;\">\ud83d\udcf0 Sid's AI News Brief</h1>`;\nbody += `<p style=\"margin: 5px 0 0 0; color: #666; font-size: 14px;\">${today}</p>`;\nbody += `</div>`;\n\nfor (const group of items) {\n body += `<div style=\"margin-bottom: 35px;\">`;\n body += `<h2 style=\"font-size: 16px; font-weight: 600; color: #000; margin-bottom: 15px; text-transform: uppercase; letter-spacing: 0.5px;\">\ud83d\udcc2 ${group.json.category}</h2>`;\n \n for (const article of group.json.articles) {\n body += `<div style=\"margin-bottom: 25px; padding-bottom: 25px; border-bottom: 1px solid #e0e0e0;\">`;\n \n // Title and score on same line\n body += `<div style=\"display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 8px;\">`;\n body += `<h3 style=\"margin: 0; font-size: 18px; font-weight: 600; color: #000; flex: 1;\">${article.title}</h3>`;\n body += `<span style=\"background: #000; color: #fff; padding: 3px 10px; border-radius: 12px; font-size: 12px; font-weight: 600; margin-left: 10px; white-space: nowrap;\">\u2b50 ${article.score}/5</span>`;\n body += `</div>`;\n \n // Summary - only first 2 lines (shortened)\n const summaryLines = article.summary.split('\\n').slice(0, 2).join('\\n');\n body += `<p style=\"margin: 10px 0; font-size: 14px; line-height: 1.5; color: #555;\">${summaryLines}</p>`;\n \n // Read more link\n body += `<a href=\"${article.link}\" style=\"display: inline-block; color: #0066cc; text-decoration: none; font-size: 14px; font-weight: 500;\">Read more \u2192</a>`;\n body += `</div>`;\n }\n body += `</div>`;\n}\n\nbody += `<div style=\"text-align: center; padding-top: 20px; border-top: 1px solid #e0e0e0; color: #999; font-size: 12px;\">`;\nbody += `\ud83d\udcec Sid's AI News Brief`;\nbody += `</div>`;\n\nbody += `</body></html>`;\n\nreturn [\n {\n json: {\n emailBody: body,\n subject: `\ud83d\udcf0 AI News Brief \u2014 ${new Date().toLocaleDateString('en-US', { month: 'short', day: 'numeric' })}`\n }\n }\n];"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
3120,
-288
],
"id": "3de48b01-819c-41e5-8ba4-3cef4674ecd0",
"name": "Build_Email"
},
{
"parameters": {
"mode": "combine",
"combineBy": "combineByPosition",
"options": {}
},
"type": "n8n-nodes-base.merge",
"typeVersion": 3.2,
"position": [
1104,
-288
],
"id": "539e5307-c532-4c2e-ad69-a3f921fd4ca5",
"name": "Merge_Category"
},
{
"parameters": {
"fromEmail": "sidpai.dev@gmail.com",
"toEmail": "sidpai.dev@gmail.com",
"subject": "={{ $json.subject }}",
"html": "={{ $json.emailBody }}",
"options": {}
},
"type": "n8n-nodes-base.emailSend",
"typeVersion": 2.1,
"position": [
3344,
-288
],
"id": "b77be919-61ac-406c-8173-84ea57f24997",
"name": "Email_User",
"credentials": {
"smtp": {
"name": "<your credential>"
}
}
}
],
"connections": {
"Schedule Trigger": {
"main": [
[
{
"node": "Techcrunch",
"type": "main",
"index": 0
},
{
"node": "Venturebeat",
"type": "main",
"index": 0
}
]
]
},
"Techcrunch": {
"main": [
[
{
"node": "News Merge",
"type": "main",
"index": 0
}
]
]
},
"Venturebeat": {
"main": [
[
{
"node": "News Merge",
"type": "main",
"index": 1
}
]
]
},
"Code in JavaScript": {
"main": [
[
{
"node": "Send an Email",
"type": "main",
"index": 0
}
]
]
},
"Basic FIlter": {
"main": [
[
{
"node": "OR_Classify",
"type": "main",
"index": 0
},
{
"node": "Merge_Category",
"type": "main",
"index": 0
}
]
]
},
"News Merge": {
"main": [
[
{
"node": "Basic FIlter",
"type": "main",
"index": 0
}
]
]
},
"Gemini_Classify": {
"main": [
[]
]
},
"Wait": {
"main": [
[
{
"node": "Gemini_Classify",
"type": "main",
"index": 0
}
]
]
},
"OR_Classify": {
"main": [
[
{
"node": "Set_Category",
"type": "main",
"index": 0
}
]
]
},
"Set_Category": {
"main": [
[
{
"node": "Merge_Category",
"type": "main",
"index": 1
}
]
]
},
"OR_Score": {
"main": [
[
{
"node": "Set_Score",
"type": "main",
"index": 0
}
]
]
},
"Set_Score": {
"main": [
[
{
"node": "Merge_Score",
"type": "main",
"index": 1
}
]
]
},
"Merge_Score": {
"main": [
[
{
"node": "Score_Filter",
"type": "main",
"index": 0
}
]
]
},
"Score_Filter": {
"main": [
[
{
"node": "OR_Summary",
"type": "main",
"index": 0
},
{
"node": "Merge_Summary",
"type": "main",
"index": 1
}
]
]
},
"OR_Summary": {
"main": [
[
{
"node": "Set_Summary",
"type": "main",
"index": 0
}
]
]
},
"Set_Summary": {
"main": [
[
{
"node": "Merge_Summary",
"type": "main",
"index": 0
}
]
]
},
"Merge_Summary": {
"main": [
[
{
"node": "Code in JavaScript1",
"type": "main",
"index": 0
}
]
]
},
"Code in JavaScript1": {
"main": [
[
{
"node": "Build_Email",
"type": "main",
"index": 0
}
]
]
},
"Build_Email": {
"main": [
[
{
"node": "Email_User",
"type": "main",
"index": 0
}
]
]
},
"Merge_Category": {
"main": [
[
{
"node": "OR_Score",
"type": "main",
"index": 0
},
{
"node": "Merge_Score",
"type": "main",
"index": 0
}
]
]
}
},
"active": false,
"settings": {
"executionOrder": "v1",
"binaryMode": "separate",
"availableInMCP": false
},
"versionId": "a2cabf7b-6efa-43e1-9b0a-5666f1d33e2f",
"meta": {
"templateCredsSetupCompleted": true
},
"id": "UuTTj7Oiap-gS9q9x4nGc",
"tags": [
{
"updatedAt": "2026-02-04T08:21:00.280Z",
"createdAt": "2026-02-04T08:21:00.280Z",
"id": "7RiSOmsgxUYO35Bd",
"name": "news feeder for self"
}
]
}
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.
smtp
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Tech Daily Digest. Uses rssFeedRead, emailSend, httpRequest. Scheduled trigger; 22 nodes.
Source: https://github.com/TheSidPai/ai-news-agent/blob/5714020816f6814bdbf798378187a3cdfc959124/workflows/n8n-workflow.json — 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.
Monitors brand mentions across Twitter/X, Reddit, and News APIs in real-time (or scheduled), fetches mentions in parallel, normalizes data, uses AI to analyze sentiment/urgency/topics, detects duplica
Daily AI Research Agent. Uses httpRequest, telegram, emailSend. Scheduled trigger; 11 nodes.
Agent Studio - Weekly Analytics Report. Uses httpRequest, emailSend. Scheduled trigger; 8 nodes.
E-Décor - AI Agent Assistant. Uses httpRequest, emailSend. Scheduled trigger; 6 nodes.
We’ve released Version 4 of our AI Powered Blog Automation workflow. We heard your complains and made a complete redesign built for serious content creators.