AutomationFlowsAI & RAG › Hacker News AI News Digest with GPT Summaries

Hacker News AI News Digest with GPT Summaries

Original n8n title: Daily AI News Digest From Hacker News with Gpt-5 Summaries and Email Delivery

ByDaniel Nkencho @daniel-automates on n8n.io

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.

Cron / scheduled trigger★★★★☆ complexityAI-powered16 nodesHacker NewsHTTP RequestChain LlmEmail SendOpenAI Chat
AI & RAG Trigger: Cron / scheduled Nodes: 16 Complexity: ★★★★☆ AI nodes: yes Added:

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 →

Download .json
{
  "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.

Pro

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 →

More AI & RAG workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

AI & RAG

Complete PostgreSQL-backed system: Keyword scoring → AI research → Multi-part content generation → fal.ai Nano Banana image generation → WordPress publishing

WordPress, OpenAI, Perplexity +8
AI & RAG

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

Google Sheets, HTTP Request, Slack +10
AI & RAG

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

OpenAI Chat, Output Parser Item List, HTTP Request +10
AI & RAG

Online Marketing Weekly Report. Uses scheduleTrigger, lmChatOpenAi, toolWorkflow, executeWorkflowTrigger. Scheduled trigger; 51 nodes.

OpenAI Chat, Tool Workflow, Execute Workflow Trigger +8
AI & RAG

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

OpenAI Chat, Tool Workflow, Execute Workflow Trigger +8