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": "69394736-5c78-420e-9f03-ac18501cb377",
"name": "Daily Newsletter Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"notes": "\u23f0 Triggers daily at 8 AM UTC\n\nCustomize:\n- Change triggerAtHour (0-23)\n- Add timezone settings\n- Set weekday-only schedule",
"position": [
624,
1040
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 8
}
]
}
},
"typeVersion": 1.2
},
{
"id": "1ee57ce6-d7aa-49d5-bac7-814bde5b0a65",
"name": "Configure RSS Sources",
"type": "n8n-nodes-base.set",
"notes": "\ud83d\udce1 Premium tech news RSS feeds\n\nSources:\n\u2022 TechCrunch AI\n\u2022 The Verge AI\n\u2022 MIT Tech Review\n\u2022 Wired AI\n\u2022 VentureBeat\n\u2022 ZDNet\n\u2022 Towards Data Science\n\u2022 NY Times Tech\n\u2022 Guardian Tech\n\u2022 BBC Tech",
"position": [
864,
1040
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "53097a16-a525-4c89-828e-a36c5e0c3742",
"name": "urls",
"type": "array",
"value": "[\n \"https://techcrunch.com/tag/artificial-intelligence/feed/\",\n \"https://www.theverge.com/artificial-intelligence/rss/index.xml\",\n \"https://www.technologyreview.com/feed/\",\n \"https://www.wired.com/feed/category/science/artificial-intelligence/latest/rss\",\n \"https://venturebeat.com/category/ai/feed/\",\n \"https://www.zdnet.com/topic/artificial-intelligence/rss.xml\",\n \"https://towardsdatascience.com/feed\",\n \"https://rss.nytimes.com/services/xml/rss/nyt/Technology.xml\",\n \"https://www.theguardian.com/uk/technology/rss\",\n \"https://feeds.bbci.co.uk/news/technology/rss.xml\"\n]"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "6477cbf0-790d-41ce-8b45-a273e03c9247",
"name": "Split RSS URLs",
"type": "n8n-nodes-base.splitOut",
"notes": "\ud83d\udd04 Splits URL array for parallel processing\n\nCreates individual execution paths\nfor each RSS feed URL",
"position": [
1088,
1040
],
"parameters": {
"options": {},
"fieldToSplitOut": "urls"
},
"typeVersion": 1
},
{
"id": "37cfed68-0740-4e77-a1ab-827f8f1eec28",
"name": "Fetch RSS Articles",
"type": "n8n-nodes-base.rssFeedRead",
"notes": "\ud83d\udcf0 Fetches articles from RSS feeds\n\nExtracts:\n\u2022 Title\n\u2022 Content snippet\n\u2022 Article URL\n\u2022 Publication date\n\nContinues on errors to prevent\nsingle feed failures",
"onError": "continueErrorOutput",
"position": [
1296,
1040
],
"parameters": {
"url": "={{ $json.urls }}",
"options": {}
},
"retryOnFail": false,
"typeVersion": 1.2
},
{
"id": "d7f56edb-cd31-4a53-b390-e910b7c50ce8",
"name": "Filter Articles",
"type": "n8n-nodes-base.code",
"notes": "\u2696\ufe0f Balances article sources\n\n\u2022 Max 5 articles per domain\n\u2022 Prevents single-source domination\n\u2022 Ensures diverse coverage\n\u2022 Groups by domain, then flattens",
"position": [
1504,
1040
],
"parameters": {
"jsCode": "// Limit articles per domain for balanced coverage\nconst input = $input.all();\nconst grouped = {};\n\nfor (const item of input) {\n const link = item.json.link;\n const domainMatch = link.match(/\\/\\/([^\\/]+)/);\n const domain = domainMatch ? domainMatch[1].replace(/^www\\./, '') : 'unknown';\n\n if (!grouped[domain]) grouped[domain] = [];\n if (grouped[domain].length < 5) {\n grouped[domain].push(item.json);\n }\n}\n\n// Flatten results\nconst result = [];\nfor (const domain in grouped) {\n result.push(...grouped[domain]);\n}\n\nreturn result.map(i => ({ json: i }));"
},
"typeVersion": 2
},
{
"id": "14562212-87cc-4321-8277-bd8519c1adcf",
"name": "Clean Data",
"type": "n8n-nodes-base.set",
"notes": "\ud83e\uddf9 Standardizes article structure\n\nMaps to clean format:\n\u2022 title \u2192 headline\n\u2022 content \u2192 summary\n\u2022 link \u2192 article URL\n\u2022 pubDate \u2192 timestamp",
"position": [
1712,
1040
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "568b89e0-be16-4977-8c2a-882563174c9b",
"name": "title",
"type": "string",
"value": "={{ $json.title }}"
},
{
"id": "dfbf5a07-d66a-434e-8208-5a14946193de",
"name": "content",
"type": "string",
"value": "={{ $json.contentSnippet }}"
},
{
"id": "b3f87e87-2f95-4d84-a03d-f44f3f206db4",
"name": "link",
"type": "string",
"value": "={{ $json.link }}"
},
{
"id": "74e93f7a-908b-486c-bb2f-02e4f5ff204c",
"name": "pubDate",
"type": "string",
"value": "={{ $json.pubDate }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "6769221a-1d99-4c17-9828-46ee92be5926",
"name": "Combine Articles",
"type": "n8n-nodes-base.aggregate",
"notes": "\ud83d\udcca Aggregates all articles\n\nCombines filtered articles from\nall sources into single dataset\nfor AI processing",
"position": [
1920,
1040
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData"
},
"typeVersion": 1
},
{
"id": "6c430d53-cbd3-4881-b86b-48707c9e32a5",
"name": "AI Newsletter Creator",
"type": "@n8n/n8n-nodes-langchain.openAi",
"notes": "\ud83e\udd16 AI-powered article curation\n\nAnalyzes all articles and:\n\u2022 Selects top 10 most relevant\n\u2022 Creates HTML newsletter\n\u2022 Provides article summaries\n\u2022 Focuses on trending topics\n\nRequires: OpenAI API key",
"position": [
2176,
1040
],
"parameters": {
"modelId": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini"
},
"options": {},
"messages": {
"values": [
{
"content": "You are an AI Tech News Curator. Analyze the provided articles and create an HTML newsletter with the top 10 most relevant AI/tech articles.\n\nFormat as clean HTML starting with <!DOCTYPE html>\nInclude: article title, brief summary, and link for each article.\nFocus on trending AI, machine learning, and technology topics.\n\nArticles data: {{ JSON.stringify($json.data) }}"
}
]
}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1
},
{
"id": "fb8881bc-7831-43f8-97f7-4a604a4a9806",
"name": "Send Newsletter",
"type": "n8n-nodes-base.gmail",
"notes": "\ud83d\udce7 Sends HTML newsletter via Gmail\n\nSetup:\n1. Enable Gmail API\n2. Create OAuth2 credentials\n3. Update recipient email\n\nFeatures:\n\u2022 HTML email format\n\u2022 Dynamic date in subject\n\u2022 Professional newsletter style",
"position": [
2528,
1040
],
"parameters": {
"sendTo": "user@example.com",
"message": "={{ $json.message.content }}",
"options": {
"appendAttribution": false
},
"subject": "=Daily AI Tech Digest - {{ $now.toFormat('EEEE, MMMM d, yyyy') }}"
},
"credentials": {
"gmailOAuth2": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "b43da764-1c99-4cdd-8b9c-338753c68826",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-208,
384
],
"parameters": {
"color": 5,
"width": 736,
"height": 1136,
"content": "# AI Tech News Aggregator & Newsletter\n\n### \ud83c\udfaf Key Features\n- **Premium Sources** - Curates from 14 top-tier tech publications\n- **AI Quality Control** - Intelligent article selection and summarization\n- **Balanced Coverage** - Prevents source bias with smart filtering\n- **Professional Format** - Clean HTML newsletter design\n- **Scheduled Automation** - Daily delivery at customizable times\n- **Error Resilience** - Continues processing even if some feeds fail\n\n## Setup Steps\n\n### \u2699\ufe0f Workflow Configuration\n1. **Import the workflow** into your n8n instance\n2. **Update node configurations**:\n - **Google Vertex AI Model**: Set your Google Cloud Project ID\n - **Send Newsletter Email**: Update recipient email address\n - **Daily Newsletter Trigger**: Adjust schedule time if needed\n3. **Verify credentials** are properly connected to respective nodes\n\n### \ud83d\udcf0 RSS Sources Customization (Optional)\nThe workflow includes 14 premium tech news sources:\n- TechCrunch (AI & Startups)\n- The Verge (AI section)\n- MIT Technology Review\n- Wired (AI/Science)\n- VentureBeat (AI)\n- ZDNet (AI topics)\n- AI Trends\n- Nature (Machine Learning)\n- Towards Data Science\n- NY Times Technology\n- The Guardian Technology\n- BBC Technology\n- Nikkei Asia Technology\n\n**To customize sources:**\n- Edit the \"Configure RSS Sources\" node\n- Add/remove RSS feed URLs as needed\n- Ensure feeds are active and properly formatted\n\n### \ud83d\ude80 Testing & Deployment\n1. **Manual Test**: Execute the workflow manually to verify setup\n2. **Check Email**: Confirm newsletter arrives with proper formatting\n3. **Verify AI Output**: Ensure articles are relevant and well-summarized\n4. **Schedule Activation**: Enable the daily trigger for automated operation\n"
},
"typeVersion": 1
},
{
"id": "c96013fe-cde1-4ef2-b833-683fb6269d67",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
560,
400
],
"parameters": {
"color": 3,
"width": 2192,
"height": 848,
"content": "## Workflow\n\n### \ud83d\udca1 Customization Options\n\n**Newsletter Timing:**\n- Default: 8:00 AM UTC daily\n- Modify \"triggerAtHour\" in the Schedule Trigger node\n- Add multiple daily sends if desired\n\n**Content Focus:**\n- Adjust the AI prompt in \"AI Tech News Curator\" node\n- Specify different topics (e.g., focus on startups, enterprise AI, etc.)\n- Change output language or format\n\n**Email Recipients:**\n- Update single recipient in Gmail node\n- Or modify to send to multiple addresses\n- Integrate with mailing list services\n\n**Article Limits:**\n- Current: Max 5 articles per source\n- Modify the filtering logic in \"Filter & Balance Articles\" node\n- Adjust total article count in AI prompt\n"
},
"typeVersion": 1
}
],
"connections": {
"Clean Data": {
"main": [
[
{
"node": "Combine Articles",
"type": "main",
"index": 0
}
]
]
},
"Split RSS URLs": {
"main": [
[
{
"node": "Fetch RSS Articles",
"type": "main",
"index": 0
}
]
]
},
"Filter Articles": {
"main": [
[
{
"node": "Clean Data",
"type": "main",
"index": 0
}
]
]
},
"Combine Articles": {
"main": [
[
{
"node": "AI Newsletter Creator",
"type": "main",
"index": 0
}
]
]
},
"Fetch RSS Articles": {
"main": [
[
{
"node": "Filter Articles",
"type": "main",
"index": 0
}
]
]
},
"AI Newsletter Creator": {
"main": [
[
{
"node": "Send Newsletter",
"type": "main",
"index": 0
}
]
]
},
"Configure RSS Sources": {
"main": [
[
{
"node": "Split RSS URLs",
"type": "main",
"index": 0
}
]
]
},
"Daily Newsletter Trigger": {
"main": [
[
{
"node": "Configure RSS Sources",
"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.
gmailOAuth2openAiApi
About this workflow
Awesome N8N Templates. Uses scheduleTrigger, splitOut, rssFeedRead, openAi. Scheduled trigger; 11 nodes.
Source: https://github.com/ScraperNode/awesome-n8n-templates/blob/main/templates/ai-and-llm/7874-daily-tech-news-curation-with-rss-gpt-4o-mini-and-gmail-delivery/workflow.json — original creator credit. Request a take-down →