This workflow corresponds to n8n.io template #9384 — 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": "c352f6dc-9570-419d-9d48-3c94758a0104",
"name": "Fetch HN AI Stories",
"type": "n8n-nodes-base.hackerNews",
"position": [
1024,
3552
],
"parameters": {
"limit": 1000,
"resource": "all",
"additionalFields": {
"keyword": "AI"
}
},
"typeVersion": 1
},
{
"id": "2a57c491-15f9-4035-854f-9bc410e9fe5e",
"name": "Filter Last 24 Hours",
"type": "n8n-nodes-base.filter",
"position": [
1232,
3552
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "f59903f3-835c-407a-a930-060d20c8abdf",
"operator": {
"type": "dateTime",
"operation": "afterOrEquals"
},
"leftValue": "={{ $json.created_at }}",
"rightValue": "={{ $now.minus({ days: 1 }).toFormat('yyyy-MM-dd') }}"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "960d99c5-3bfa-4baa-b9eb-4cc41e6ad961",
"name": "Loop Over Items",
"type": "n8n-nodes-base.splitInBatches",
"position": [
1440,
3552
],
"parameters": {
"options": {}
},
"typeVersion": 3
},
{
"id": "9bf34ea7-64ad-4bc5-b4f7-af3a1d1fa0a0",
"name": "Scrape Article URL",
"type": "n8n-nodes-base.httpRequest",
"position": [
1648,
3632
],
"parameters": {
"url": "={{ $json.url }}",
"options": {}
},
"typeVersion": 4.2
},
{
"id": "714804a1-ebc4-474a-9de0-4e8785086129",
"name": "Convert to Markdown",
"type": "n8n-nodes-base.markdown",
"position": [
1872,
3632
],
"parameters": {
"html": "={{ $json.data }}",
"options": {}
},
"typeVersion": 1
},
{
"id": "72b3a898-bfa8-4388-9a8c-a9c9c4895020",
"name": "GPT Summarize Article",
"type": "@n8n/n8n-nodes-langchain.chainLlm",
"position": [
2064,
3632
],
"parameters": {
"text": "=Summarize the info below so that I can get a quick news snippet of what this is about in the area of AI. \n\nSimply output the main point as the heading and then 2 sentences of the summary (maybe with a link)\n\n---\n\nScraped info below: {{ $json.markdown }}",
"batching": {},
"promptType": "define"
},
"typeVersion": 1.7
},
{
"id": "dd7d375a-26bd-469f-8cea-2d68511aa1bb",
"name": "Format News Item",
"type": "n8n-nodes-base.set",
"position": [
2368,
3728
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "ec79a00c-98ba-40fc-b606-b4e40eeed15c",
"name": "news",
"type": "string",
"value": "={{ $('GPT Summarize Article').item.json.output }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "b612d024-cb1b-4f93-8761-3a4e805cb0a2",
"name": "Combine All Summaries",
"type": "n8n-nodes-base.aggregate",
"position": [
1648,
3456
],
"parameters": {
"options": {},
"fieldsToAggregate": {
"fieldToAggregate": [
{
"fieldToAggregate": "news"
}
]
}
},
"typeVersion": 1
},
{
"id": "db3ace26-4a67-4916-9f16-1719fdfbaed7",
"name": "Send Email Digest",
"type": "n8n-nodes-base.emailSend",
"position": [
1872,
3456
],
"parameters": {
"html": "=<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"UTF-8\">\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n <title>Daily News Digest</title>\n <style>\n body {\n margin: 0;\n padding: 0;\n background-color: #f5f5f5;\n font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;\n line-height: 1.5;\n color: #333;\n }\n \n .email-container {\n max-width: 600px;\n margin: 0 auto;\n background-color: white;\n padding: 0;\n }\n \n .header {\n background-color: #d97757;\n color: white;\n text-align: center;\n padding: 20px;\n border-radius: 8px 8px 0 0;\n }\n \n .header h1 {\n margin: 0;\n font-size: 18px;\n font-weight: 500;\n }\n \n .content {\n padding: 30px 40px;\n background-color: white;\n }\n \n .news-item {\n margin-bottom: 30px;\n padding-bottom: 25px;\n border-bottom: 1px solid #e0e0e0;\n }\n \n .news-item:last-child {\n border-bottom: none;\n margin-bottom: 0;\n padding-bottom: 0;\n }\n \n .news-title {\n font-size: 16px;\n font-weight: 600;\n color: #333;\n margin: 0 0 12px 0;\n line-height: 1.4;\n }\n \n .news-content {\n font-size: 14px;\n color: #666;\n line-height: 1.6;\n margin: 0;\n }\n \n .news-content a {\n color: #d97757;\n text-decoration: none;\n }\n \n .news-content a:hover {\n text-decoration: underline;\n }\n \n .footer {\n text-align: center;\n padding: 20px;\n background-color: #f9f9f9;\n color: #888;\n font-size: 12px;\n border-radius: 0 0 8px 8px;\n }\n \n @media (max-width: 600px) {\n .email-container {\n margin: 0 10px;\n }\n \n .content {\n padding: 20px 25px;\n }\n \n .header {\n padding: 15px;\n }\n }\n </style>\n</head>\n<body>\n <div class=\"email-container\">\n <div class=\"header\">\n <h1>\ud83d\udcf0 Latest AI News \u2014 {{ $now.format('MMMM d, yyyy') }}</h1>\n </div>\n \n <div class=\"content\">\n {{ $json.news.join('') }}\n </div>\n \n <div class=\"footer\">\n You're receiving this digest because you subscribed to updates.<br>\n \u00a9 2025 AI News Digest\n </div>\n </div>\n</body>\n</html>",
"options": {},
"subject": "Daily AI Digest - {{ $now.format('MMMM d, yyyy') }}",
"toEmail": "user@example.com",
"fromEmail": "AI News <noreply@example.com>"
},
"credentials": {
"smtp": {
"name": "<your credential>"
}
},
"typeVersion": 2.1
},
{
"id": "030bc0bb-c0ae-4234-9a9e-720c86ba3f0c",
"name": "Daily Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
800,
3552
],
"parameters": {
"rule": {
"interval": [
{}
]
}
},
"typeVersion": 1.2
},
{
"id": "f59da8bf-9079-46e6-a97d-63ac00da0f09",
"name": "Overview & Setup",
"type": "n8n-nodes-base.stickyNote",
"position": [
64,
3168
],
"parameters": {
"color": 4,
"width": 728,
"height": 1072,
"content": "# Daily AI News Digest from Hacker News\n\n## \ud83d\udccb What This Template Does\nFetches recent AI stories from Hacker News, filters for today, scrapes each article, summarizes with GPT into snippets, aggregates into HTML, and emails a styled daily digest.\n\n## \ud83d\udd27 Prerequisites\n- n8n instance\n- OpenAI API access\n- SMTP server (e.g., Zoho, Gmail)\n\n## \ud83d\udd11 Required Credentials\n\n### OpenAI API\n1. Get key from platform.openai.com/api-keys\n2. Add to n8n as OpenAI credential\n3. Assign to \"GPT 5 pro\" node\n\n### SMTP Setup\n1. Configure in n8n credentials (host, port, user/pass)\n2. Assign to \"Send Email Digest\" node\n3. Update fromEmail/toEmail fields\n\n## \u2699\ufe0f Configuration Steps\n1. Import JSON into n8n\n2. Assign OpenAI and SMTP credentials\n3. Update fromEmail/toEmail in \"Send Email Digest\" node\n4. Set schedule in \"Daily Schedule Trigger\" (e.g., daily at 8 AM)\n5. Activate workflow\n\n## \ud83c\udfaf Use Cases\n- Personal AI news briefing\n- Team knowledge sharing\n- Content curation for blogs\n\n## \u26a0\ufe0f Troubleshooting\n- No stories: Check keyword filter; HN API limits\n- Scraping fails: Add proxy if blocked\n- Email not sending: Verify SMTP settings\n- Summaries poor: Tweak GPT prompt"
},
"typeVersion": 1
},
{
"id": "088aeedc-3850-415e-a691-691fd3e02428",
"name": "Note: HN Fetch & Filter",
"type": "n8n-nodes-base.stickyNote",
"position": [
912,
3728
],
"parameters": {
"color": 2,
"width": 428,
"height": 304,
"content": "## \ud83d\udce5 Data Collection\n\n**Fetch HN AI Stories:**\n- Pulls 1000 stories with \"AI\" keyword\n- Uses public HN API (no auth needed)\n\n**Filter Last 24 Hours:**\n- Checks `created_at` field\n- Keeps only yesterday/today posts\n- Uses `$now().minus({ days: 1 })`\n\n**\ud83d\udca1 Customization:**\nChange keyword filter or date range here"
},
"typeVersion": 1
},
{
"id": "4c555f5e-4b5b-4176-bc8e-161dcb9a9b25",
"name": "Note: Scraping & Processing",
"type": "n8n-nodes-base.stickyNote",
"position": [
1488,
3888
],
"parameters": {
"color": 3,
"width": 484,
"height": 352,
"content": "## \ud83c\udf10 Content Processing\n\n**Loop Over Items:**\n- Processes each story sequentially\n- Prevents rate limiting\n\n**Scrape Article URL:**\n- Fetches content from source URL\n- May need proxy for blocked sites\n\n**Convert to Markdown:**\n- Cleans HTML to text\n- Formats for LLM input\n\n**\ud83d\udca1 Troubleshooting:**\nIf scraping fails, check URL accessibility"
},
"typeVersion": 1
},
{
"id": "3e0e97ce-561d-4c6b-a9b4-96b0eacf90d5",
"name": "Note: AI Summarization",
"type": "n8n-nodes-base.stickyNote",
"position": [
2176,
3904
],
"parameters": {
"color": 5,
"width": 460,
"height": 336,
"content": "## \ud83e\udd16 AI Summarization\n\n**GPT Summarize Article:**\n- Generates heading + 2 sentences\n- Extracts key AI insights\n- Includes link when relevant\n\n**Format News Item:**\n- Wraps in HTML for email\n- Prepares for aggregation\n\n**Combine All Summaries:**\n- Merges into single array\n- Ready for email template\n\n**\ud83d\udca1 Customization:**\nEdit prompt for different summary styles"
},
"typeVersion": 1
},
{
"id": "2dbe3adc-d430-4eff-9306-c2f45cd632f3",
"name": "Note: Email Delivery",
"type": "n8n-nodes-base.stickyNote",
"position": [
2112,
3200
],
"parameters": {
"color": 6,
"width": 436,
"height": 320,
"content": "## \ud83d\udce7 Email Delivery\n\n**Send Email Digest:**\n- Styled HTML template\n- Mobile-responsive design\n- Inline CSS for compatibility\n\n**Template Features:**\n- Clean news item layout\n- Branded header/footer\n- Clickable links\n\n**\u2699\ufe0f Required:**\nUpdate fromEmail/toEmail before activating"
},
"typeVersion": 1
},
{
"id": "eaa3c5c3-bf65-4efc-8f23-208ed7751ed4",
"name": "GPT 5 pro",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
2064,
3808
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-5-pro",
"cachedResultName": "gpt-5-pro"
},
"options": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.2
}
],
"connections": {
"GPT 5 pro": {
"ai_languageModel": [
[
{
"node": "GPT Summarize Article",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Loop Over Items": {
"main": [
[
{
"node": "Combine All Summaries",
"type": "main",
"index": 0
}
],
[
{
"node": "Scrape Article URL",
"type": "main",
"index": 0
}
]
]
},
"Format News Item": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Scrape Article URL": {
"main": [
[
{
"node": "Convert to Markdown",
"type": "main",
"index": 0
}
]
]
},
"Convert to Markdown": {
"main": [
[
{
"node": "GPT Summarize Article",
"type": "main",
"index": 0
}
]
]
},
"Fetch HN AI Stories": {
"main": [
[
{
"node": "Filter Last 24 Hours",
"type": "main",
"index": 0
}
]
]
},
"Filter Last 24 Hours": {
"main": [
[
{
"node": "Loop Over Items",
"type": "main",
"index": 0
}
]
]
},
"Combine All Summaries": {
"main": [
[
{
"node": "Send Email Digest",
"type": "main",
"index": 0
}
]
]
},
"GPT Summarize Article": {
"main": [
[
{
"node": "Format News Item",
"type": "main",
"index": 0
}
]
]
},
"Daily Schedule Trigger": {
"main": [
[
{
"node": "Fetch HN AI Stories",
"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.
openAiApismtp
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Automate your daily AI news briefing: fetch AI-tagged stories from Hacker News, filter for the last 24 hours, scrape and summarize with GPT, then deliver a clean HTML email digest—no manual curation needed.
Source: https://n8n.io/workflows/9384/ — 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.
Complete PostgreSQL-backed system: Keyword scoring → AI research → Multi-part content generation → fal.ai Nano Banana image generation → WordPress publishing
This n8n workflow orchestrates a powerful suite of AI Agents and automations to manage and optimize various aspects of an e-commerce operation, particularly for platforms like Shopify. It leverages La
This workflow automates the creation, rendering, approval, and posting of TikTok-style POV (Point of View) videos to Instagram, with cross-posting to Facebook and YouTube. It eliminates manual video p
Online Marketing Weekly Report. Uses scheduleTrigger, lmChatOpenAi, toolWorkflow, executeWorkflowTrigger. Scheduled trigger; 51 nodes.
This workflow retrieves Online Marketing data (Google Analytics for several domains, Google Ads, Meta Ads) from the last 7 days and the same period in the previous year. The data is then prepared by A