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.
This workflow runs every 15 minutes to fetch AlphaAI’s trending market news, filter for new high-relevance, ticker-linked stories, and post them to a Discord channel via webhook as rich embed cards wi
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
Template Nodes Example. Uses CUSTOM, formTrigger, executeWorkflowTrigger, chatTrigger. Event-driven trigger; 70 nodes.
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