This workflow corresponds to n8n.io template #13924 — we link there as the canonical source.
This workflow follows the Agent → OpenAI Chat 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 →
{
"id": "3eTIcbHUxRxSeWIrf6UCl",
"name": "Write daily tech news with AI using RSS and WordPress",
"tags": [],
"nodes": [
{
"id": "85e28a2d-ff91-407c-9785-ec8dc9d53999",
"name": "Daily 8AM Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
736,
480
],
"parameters": {
"rule": {
"interval": [
{
"triggerAtHour": 8
}
]
}
},
"typeVersion": 1.2
},
{
"id": "4c318cc4-2f48-4510-81d7-efa58416ab9e",
"name": "RSS BBC Tech",
"type": "n8n-nodes-base.rssFeedRead",
"position": [
1040,
320
],
"parameters": {
"url": "https://feeds.bbci.co.uk/news/technology/rss.xml",
"options": {}
},
"typeVersion": 1.1
},
{
"id": "b0cc8dc1-1867-478e-bc5c-97112d6fdf58",
"name": "RSS The Verge",
"type": "n8n-nodes-base.rssFeedRead",
"position": [
1040,
464
],
"parameters": {
"url": "https://www.theverge.com/rss/index.xml",
"options": {}
},
"typeVersion": 1.1
},
{
"id": "746d6b79-7348-439c-a790-9c10b86d8fa4",
"name": "RSS Ars Technica",
"type": "n8n-nodes-base.rssFeedRead",
"position": [
1040,
624
],
"parameters": {
"url": "https://feeds.arstechnica.com/arstechnica/index",
"options": {}
},
"typeVersion": 1.1
},
{
"id": "148e1032-51de-4251-905b-2dfab02a9872",
"name": "RSS TechCrunch",
"type": "n8n-nodes-base.rssFeedRead",
"position": [
1040,
784
],
"parameters": {
"url": "https://techcrunch.com/feed/",
"options": {}
},
"typeVersion": 1.1
},
{
"id": "5bc6bc47-a0d3-406a-9784-b106a4d41044",
"name": "Merge All Feeds",
"type": "n8n-nodes-base.merge",
"position": [
1328,
480
],
"parameters": {
"numberInputs": 4
},
"typeVersion": 3
},
{
"id": "bd7838fb-7542-4789-81d8-948871b46ce1",
"name": "Normalize Fields",
"type": "n8n-nodes-base.set",
"position": [
1568,
480
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "field-title",
"name": "title",
"type": "string",
"value": "={{ $json.title }}"
},
{
"id": "field-content",
"name": "snippet",
"type": "string",
"value": "={{ $json.contentSnippet || $json.content || '' }}"
},
{
"id": "field-link",
"name": "link",
"type": "string",
"value": "={{ $json.link }}"
},
{
"id": "field-date",
"name": "isoDate",
"type": "number",
"value": "={{ new Date($json.isoDate || $json.pubDate || 0).getTime() }}"
},
{
"id": "field-source",
"name": "source",
"type": "string",
"value": "={{ $json.creator || $json['dc:creator'] || '' }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "09ac682e-fd46-4e82-91dd-5190bb540c26",
"name": "Filter Last 24 Hours",
"type": "n8n-nodes-base.filter",
"position": [
1808,
480
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 2,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "filter-24h",
"operator": {
"type": "number",
"operation": "gt"
},
"leftValue": "={{ $json.isoDate }}",
"rightValue": "={{ Date.now() - 24 * 60 * 60 * 1000 }}"
}
]
}
},
"typeVersion": 2.2
},
{
"id": "db0a8216-2d17-41bf-bce9-2942780b9564",
"name": "Sort by Date",
"type": "n8n-nodes-base.sort",
"position": [
2048,
480
],
"parameters": {
"options": {},
"sortFieldsUi": {
"sortField": [
{
"order": "descending",
"fieldName": "isoDate"
}
]
}
},
"typeVersion": 1
},
{
"id": "9d2ae888-3755-4bdd-a32f-63bc1f3472e2",
"name": "Limit to 15",
"type": "n8n-nodes-base.limit",
"position": [
2288,
480
],
"parameters": {
"maxItems": 10
},
"typeVersion": 1
},
{
"id": "f9b8c3fc-dd6c-4246-879e-6c8cd4c1a981",
"name": "Aggregate Articles",
"type": "n8n-nodes-base.code",
"position": [
2592,
480
],
"parameters": {
"jsCode": "// Aggregate all articles into a single text block for the AI agent\nconst articles = $input.all();\n\nlet summaryText = 'TODAY\\'S TOP NEWS ARTICLES (' + articles.length + ' articles from the last 24 hours):\\n\\n';\n\nfor (let i = 0; i < articles.length; i++) {\n const a = articles[i].json;\n summaryText += (i + 1) + '. ' + (a.title || 'No title') + '\\n';\n summaryText += ' URL: ' + (a.link || '') + '\\n';\n const snippet = (a.snippet || '').substring(0, 250);\n if (snippet) {\n summaryText += ' ' + snippet + '\\n';\n }\n summaryText += '\\n';\n}\n\nreturn [{ json: { articlesSummary: summaryText, articleCount: articles.length } }];"
},
"typeVersion": 2
},
{
"id": "7a4410a3-aac1-4f48-9354-9425e5e5a064",
"name": "AI Write News Article",
"type": "@n8n/n8n-nodes-langchain.agent",
"position": [
2880,
480
],
"parameters": {
"text": "=You are a professional tech news journalist. Every day you receive a digest of the latest news articles from major tech publications. Your job is to pick the most newsworthy story (or combine 2-3 related stories into one narrative) and write an original, polished news article.\n\n## Today's News Digest\n{{ $json.articlesSummary }}\n\n## Tools Available\n- **Fetch Article**: Pass a full article URL (including https://) to read the complete text. Use this to get the full details of the articles you want to write about.\n\n## Your Task\n1. Review the headlines and snippets above.\n2. Pick the single most important/interesting story, OR pick 2-3 related stories you can weave into one narrative.\n3. Use the Fetch Article tool to read the full text of your chosen 2-3 articles. Do NOT fetch more than 3.\n4. If a fetch fails (paywall, error), skip it and work with what you have.\n5. Write an original news article based on what you've read.\n\n## NEWS ARTICLE STRUCTURE\n\n### Headline\nClear, factual, attention-grabbing.\n\n### Lead Paragraph (1 paragraph)\nThe most important facts: who, what, when, where, why.\n\n### Body (3-5 paragraphs, use <h2> subheadings where appropriate)\n- Key details and context\n- Background and significance\n- Multiple perspectives where available\n- Concrete data, numbers, or specifics\n\n### What's Next (1-2 paragraphs)\nImplications, what to watch for, what happens next.\n\n## WRITING RULES\n- Neutral, professional journalistic tone\n- 600-1000 words\n- All content ORIGINAL \u2014 synthesize and rewrite, never copy\n- Attribute sources naturally (e.g. \"according to Ars Technica\", \"The Verge reports\")\n- Use <h2>, <p>, <strong>, <em> for formatting\n- Do NOT include <html>, <head>, or <body> tags\n\n## OUTPUT FORMAT\nReturn in this EXACT format:\n\nTITLE: [Your headline]\n\n---CONTENT---\n\n[Full article in HTML]",
"options": {},
"promptType": "define"
},
"typeVersion": 1.7
},
{
"id": "80969c99-293b-4e32-b526-faa8fdf43e45",
"name": "Parse AI Output",
"type": "n8n-nodes-base.code",
"position": [
3280,
480
],
"parameters": {
"jsCode": "const raw = String($input.item.json.output || '');\n\nconst contentMarker = '---CONTENT---';\n\nlet title = 'Untitled';\nlet content = raw;\n\nconst tIdx = raw.indexOf('TITLE:');\nif (tIdx !== -1) {\n const afterTitle = raw.substring(tIdx + 6);\n const newline = afterTitle.indexOf('\\n');\n title = newline !== -1 ? afterTitle.substring(0, newline).trim() : afterTitle.trim();\n}\n\nconst contentIdx = raw.indexOf(contentMarker);\nif (contentIdx !== -1) {\n content = raw.substring(contentIdx + contentMarker.length).trim();\n}\n\nreturn [{ json: { title, content } }];"
},
"typeVersion": 2
},
{
"id": "fd06df2c-2f58-4537-ac02-b558a0ad93ae",
"name": "Create WordPress Draft",
"type": "n8n-nodes-base.wordpress",
"position": [
3520,
480
],
"parameters": {
"title": "={{ $json.title }}",
"additionalFields": {
"status": "draft",
"content": "={{ $json.content }}"
}
},
"typeVersion": 1
},
{
"id": "4d6164f2-58c9-4a0e-a543-ac92679815e3",
"name": "OpenAI Chat Model",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
2752,
768
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-5.1",
"cachedResultName": "gpt-5.1"
},
"options": {},
"builtInTools": {}
},
"typeVersion": 1.3
},
{
"id": "ac9675ef-78f8-4c46-ac6f-760913278ab5",
"name": "Fetch Article",
"type": "@n8n/n8n-nodes-langchain.toolCode",
"position": [
2960,
768
],
"parameters": {
"name": "my_tool",
"jsCode": "const url = query.trim();\n\nif (!url.startsWith('http://') && !url.startsWith('https://')) {\n return 'ERROR: Invalid URL. Must start with http:// or https://';\n}\n\ntry {\n const html = await this.helpers.httpRequest({\n method: 'GET',\n url: url,\n returnFullResponse: false,\n timeout: 15000,\n });\n\n let text = String(html);\n\n text = text\n .replace(/<script[\\s\\S]*?<\\/script>/gi, '')\n .replace(/<style[\\s\\S]*?<\\/style>/gi, '')\n .replace(/<nav[\\s\\S]*?<\\/nav>/gi, '')\n .replace(/<footer[\\s\\S]*?<\\/footer>/gi, '')\n .replace(/<header[\\s\\S]*?<\\/header>/gi, '')\n .replace(/<aside[\\s\\S]*?<\\/aside>/gi, '')\n .replace(/<noscript[\\s\\S]*?<\\/noscript>/gi, '')\n .replace(/<iframe[\\s\\S]*?<\\/iframe>/gi, '')\n .replace(/<!--[\\s\\S]*?-->/g, '')\n .replace(/<\\/(p|div|h[1-6]|li|tr|br|hr)[^>]*>/gi, '\\n')\n .replace(/<br\\s*\\/?>/gi, '\\n')\n .replace(/<[^>]+>/g, ' ')\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/"/g, '\"')\n .replace(/'/g, \"'\")\n .replace(/ /g, ' ')\n .replace(/[ \\t]+/g, ' ')\n .replace(/\\n\\s*\\n/g, '\\n\\n')\n .replace(/\\n{3,}/g, '\\n\\n')\n .trim();\n\n if (text.length > 4000) {\n text = text.substring(0, 4000) + '\\n\\n[Content truncated]';\n }\n\n if (text.length < 100) {\n return 'ERROR: Page returned no usable content (likely 404 or paywall). Skip this URL.';\n }\n\n return text;\n\n} catch (error) {\n return 'ERROR: Could not fetch (' + error.message + '). Skip this URL.';\n}"
},
"typeVersion": 1
},
{
"id": "b569fea7-5255-48f1-90fa-0554a3998777",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
176,
96
],
"parameters": {
"width": 460,
"height": 920,
"content": "## Try It Out!\n### Automatically write and publish an original tech news article to WordPress every morning \u2014 completely hands-free.\n\nGreat for tech bloggers, content creators, or anyone who wants a daily news column without the daily effort.\n\n### How it works\n* A schedule trigger fires daily at 8 AM and pulls articles from four RSS feeds (BBC Tech, The Verge, Ars Technica, TechCrunch).\n* Articles are merged, normalized, filtered to the last 24 hours, sorted, and capped at 10.\n* An OpenAI-powered AI agent picks the most newsworthy story, fetches full article text, and writes an original 600\u20131000 word article.\n* The output is parsed into a title and HTML body, then posted as a draft to WordPress.\n\n### How to use\n* Add your OpenAI API key under Credentials.\n* Add your WordPress API credentials (site URL + application password).\n* Optionally swap RSS feeds, adjust the article limit, or change the post status.\n* Activate the workflow \u2014 it runs daily at 8 AM.\n\n### Requirements\n* OpenAI account and API key\n* WordPress site with application password enabled\n\n### Need Help?\nJoin the [Discord](https://discord.com/invite/XPKeKXeB7d) or ask in the [Forum](https://community.n8n.io/)!\n\nHappy Hacking!"
},
"typeVersion": 1
},
{
"id": "08bcd6ab-0e92-4a0c-ae78-0ee88d2a4883",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
720,
224
],
"parameters": {
"color": 7,
"width": 520,
"height": 728,
"content": "## 1. Fetch RSS feeds\nPulls the latest articles from BBC Tech, The Verge, Ars Technica, and TechCrunch in parallel, triggered daily at 8 AM."
},
"typeVersion": 1
},
{
"id": "c657d8b8-fcef-4ea9-9c97-e2e7b7d1e691",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
1520,
224
],
"parameters": {
"color": 7,
"width": 960,
"height": 568,
"content": "## 2. Normalize and filter\nStandardizes fields across feeds, drops articles older than 24 hours, sorts by date, and caps the list at 10 items."
},
"typeVersion": 1
},
{
"id": "d89aa490-aed8-4940-a7a4-6fa223ce4374",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
2544,
224
],
"parameters": {
"color": 7,
"width": 600,
"height": 696,
"content": "## 3. AI writes the article\nCompiles headlines into a digest, then an OpenAI agent picks the top story, fetches full text, and writes an original news article."
},
"typeVersion": 1
},
{
"id": "25655991-be19-43c9-aecf-c2cb8b024726",
"name": "Sticky Note4",
"type": "n8n-nodes-base.stickyNote",
"position": [
3232,
224
],
"parameters": {
"color": 7,
"width": 520,
"height": 552,
"content": "## 4. Publish to WordPress\nExtracts the headline and HTML body from the AI output and creates a WordPress draft post."
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"binaryMode": "separate",
"availableInMCP": false,
"executionOrder": "v1"
},
"versionId": "8e182a70-0434-4464-8661-ee225c0e397f",
"connections": {
"Limit to 15": {
"main": [
[
{
"node": "Aggregate Articles",
"type": "main",
"index": 0
}
]
]
},
"RSS BBC Tech": {
"main": [
[
{
"node": "Merge All Feeds",
"type": "main",
"index": 0
}
]
]
},
"Sort by Date": {
"main": [
[
{
"node": "Limit to 15",
"type": "main",
"index": 0
}
]
]
},
"Fetch Article": {
"ai_tool": [
[
{
"node": "AI Write News Article",
"type": "ai_tool",
"index": 0
}
]
]
},
"RSS The Verge": {
"main": [
[
{
"node": "Merge All Feeds",
"type": "main",
"index": 1
}
]
]
},
"RSS TechCrunch": {
"main": [
[
{
"node": "Merge All Feeds",
"type": "main",
"index": 3
}
]
]
},
"Merge All Feeds": {
"main": [
[
{
"node": "Normalize Fields",
"type": "main",
"index": 0
}
]
]
},
"Parse AI Output": {
"main": [
[
{
"node": "Create WordPress Draft",
"type": "main",
"index": 0
}
]
]
},
"Normalize Fields": {
"main": [
[
{
"node": "Filter Last 24 Hours",
"type": "main",
"index": 0
}
]
]
},
"RSS Ars Technica": {
"main": [
[
{
"node": "Merge All Feeds",
"type": "main",
"index": 2
}
]
]
},
"Daily 8AM Trigger": {
"main": [
[
{
"node": "RSS BBC Tech",
"type": "main",
"index": 0
},
{
"node": "RSS The Verge",
"type": "main",
"index": 0
},
{
"node": "RSS Ars Technica",
"type": "main",
"index": 0
},
{
"node": "RSS TechCrunch",
"type": "main",
"index": 0
}
]
]
},
"OpenAI Chat Model": {
"ai_languageModel": [
[
{
"node": "AI Write News Article",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"Aggregate Articles": {
"main": [
[
{
"node": "AI Write News Article",
"type": "main",
"index": 0
}
]
]
},
"Filter Last 24 Hours": {
"main": [
[
{
"node": "Sort by Date",
"type": "main",
"index": 0
}
]
]
},
"AI Write News Article": {
"main": [
[
{
"node": "Parse AI Output",
"type": "main",
"index": 0
}
]
]
}
}
}
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
Tech bloggers, content creators, and site owners who want a fully automated daily news column without writing a single word. A schedule trigger fires daily at 8 AM and pulls articles from four RSS feeds (BBC Tech, The Verge, Ars Technica, TechCrunch). All feeds are merged,…
Source: https://n8n.io/workflows/13924/ — 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.
auto_post_wordpress_. Uses rssFeedRead, lmChatOpenAi, textClassifier, agent. Scheduled trigger; 90 nodes.
blog writing automation. Uses rssFeedRead, lmChatOpenAi, textClassifier, agent. Scheduled trigger; 90 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.
1 Seo Automation. Uses httpRequest, wordpress, lmChatOpenAi, outputParserStructured. Scheduled trigger; 52 nodes.
This workflow automates the process of generating, reviewing, and publishing blog posts across multiple platforms, now enhanced with support for RSS Feeds as a content source. It streamlines the manag