AutomationFlowsAI & RAG › AI Blog Automation for WordPress

AI Blog Automation for WordPress

Original n8n title: Content Farming - : Ai-powered Blog Automation for Wordpress

ByJay Emp0 @jay-emp0 on n8n.io

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.

Cron / scheduled trigger★★★★★ complexityAI-powered81 nodesRSS Feed ReadOpenAI ChatText ClassifierAgentOutput Parser StructuredHTTP RequestMongoDBOpenAI
AI & RAG Trigger: Cron / scheduled Nodes: 81 Complexity: ★★★★★ AI nodes: yes Added:

This workflow corresponds to n8n.io template #5230 — we link there as the canonical source.

This workflow follows the Agent → HTTP Request 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": "45b86db7-50e8-46b8-835b-2fb61709e362",
      "name": "Split Out",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        -360,
        -160
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "rss"
      },
      "typeVersion": 1
    },
    {
      "id": "ba641186-ea96-466d-ba5c-f98128a450e2",
      "name": "Get Articles Daily",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -800,
        -160
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "triggerAtHour": 12
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "b4c98895-ef0e-4247-a08b-99b5bf069d1e",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -860,
        -320
      ],
      "parameters": {
        "color": 3,
        "width": 2420,
        "height": 820,
        "content": "## Step 1. Save news in a vector store (runs daily)"
      },
      "typeVersion": 1
    },
    {
      "id": "ddc6261e-6d92-42ad-88d9-6ff2078943b2",
      "name": "Set Tech News RSS Feeds",
      "type": "n8n-nodes-base.set",
      "position": [
        -580,
        -160
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "b8c00469-890b-4b5b-8e2e-2ad9ec2d0815",
              "name": "rss",
              "type": "array",
              "value": "=[\n  \"https://feeds.bbci.co.uk/news/technology/rss.xml\",\n  \"https://www.wired.com/feed/rss\",\n  \"https://www.technologyreview.com/topnews.rss\",\n  \"https://techcrunch.com/feed/\",\n\"https://www.marktechpost.com/feed/\",\n\"https://hackernoon.com/feed\",\n\"https://www.artificialintelligence-news.com/feed/\"\n]\n"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "52605fe6-bd2a-41c3-a25f-f372701b28df",
      "name": "Read RSS News Feeds",
      "type": "n8n-nodes-base.rssFeedRead",
      "position": [
        -140,
        -160
      ],
      "parameters": {
        "url": "={{ $json.rss }}",
        "options": {
          "ignoreSSL": false
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "5758e689-58fe-407e-b3aa-dafe73176e78",
      "name": "Set and Normalize Fields",
      "type": "n8n-nodes-base.set",
      "position": [
        220,
        -160
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "e9f27ceb-c5f2-4997-8cb1-67576a7bb337",
              "name": "title",
              "type": "string",
              "value": "={{ $json.title }}"
            },
            {
              "id": "4c4f9417-40f2-4fb0-9976-d09f5984680f",
              "name": "content",
              "type": "string",
              "value": "={{ $json['content:encodedSnippet'] ?? $json.contentSnippet}}"
            },
            {
              "id": "e1986bac-054e-4240-ba50-536dbcd27337",
              "name": "date",
              "type": "string",
              "value": "={{ $json.isoDate}}"
            },
            {
              "id": "9566e23c-ac30-4d66-abbd-889f322688b7",
              "name": "link",
              "type": "string",
              "value": "={{ $json.link }}"
            },
            {
              "id": "61203b8d-7198-4087-83dc-83ac83afa5b1",
              "name": "categories",
              "type": "string",
              "value": "={{ $json.categories }}"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "c88f982d-8ee5-4ef5-bbdc-387e33d4d5d7",
      "name": "OpenAI Chat Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        400,
        40
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "c34832be-0561-485b-92f5-68c05b9b77ce",
      "name": "Text Classifier",
      "type": "@n8n/n8n-nodes-langchain.textClassifier",
      "position": [
        460,
        -160
      ],
      "parameters": {
        "options": {
          "fallback": "discard"
        },
        "inputText": "=Title: {{ $json.title }}\nContent: {{ $json.content }}\nCategories: {{ $json.categories }}",
        "categories": {
          "categories": [
            {
              "category": "=AI",
              "description": "AI and Artificial Intelligence related articles "
            }
          ]
        }
      },
      "typeVersion": 1
    },
    {
      "id": "89c58644-23dc-473c-b5c3-17e46642ce93",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1700,
        -340
      ],
      "parameters": {
        "color": 5,
        "width": 1140,
        "height": 800,
        "content": "## Step 2: Relevance scoring\n\nConsider improving this by using\n- [serp api](https://serpapi.com/dashboard)\n- [jina ai](https://jina.ai/api-dashboard/reader)\n- [perplexity ai](https://www.perplexity.ai/)\n- [open ai web search](https://www.youtube.com/watch?v=eeuLRpvQ3DY)"
      },
      "typeVersion": 1
    },
    {
      "id": "93339b1d-6ff3-4868-be68-9ccaacc0bfc5",
      "name": "AI Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1900,
        -100
      ],
      "parameters": {
        "text": "=Here are 24 trending AI-related articles published today:\n\n {{ JSON.stringify($json.data) }}\n\nFrom this, generate:\n1. 10 unique long-tail blog title ideas based on these trends\n2. For each title, suggest:\n   - Main keyword\n   - Related keywords\n   - Suggested angle or tone (e.g. educational, provocative, analytical)\n3. Ensure each title is SEO-friendly, non-generic, and future-resilient\n",
        "options": {
          "systemMessage": "You are a content strategist for an AI-focused blog.\n"
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "retryOnFail": true,
      "typeVersion": 2
    },
    {
      "id": "118aee64-ac8f-40d5-a0c1-44b9713cbce0",
      "name": "OpenAI Chat Model1",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1800,
        120
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "b9ce417b-1e12-4385-8559-577b636337be",
      "name": "Aggregate",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        1720,
        -100
      ],
      "parameters": {
        "options": {},
        "aggregate": "aggregateAllItemData"
      },
      "typeVersion": 1
    },
    {
      "id": "6f29f470-d74e-4bba-91b0-ba6f1e34bfcf",
      "name": "Structured Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        2160,
        100
      ],
      "parameters": {
        "jsonSchemaExample": "[\n  {\n  \"title\": \"Why Code Review AI Like CriticGPT Might Replace Juniors\",\n  \"main_keyword\": \"AI code review\",\n  \"related_keywords\": [\"CriticGPT\", \"OpenAI\", \"developer tools\", \"LLM code agent\"],\n  \"tone\": \"analytical\",\n  \"link_articles\": [\"https://www.hatica.io/blog/future-of-code-reviews-2025-trends/\", \"https://graphite.dev/blog/ai-wont-replace-human-code-review\", \"https://medium.com/@ravibiswas0909/can-ai-replace-junior-developers-my-honest-take-861c7d430ce7\"],\n  \"date\": \"2025-06-16\"\n},{\n  \"title\": \"Huawei AI chips that power BYD and self driving cars in china\",\n  \"main_keyword\": \"AI chips\",\n  \"related_keywords\": [\"Huawei\", \"AI\", \"self driving cars\", \"BYD\"],\n  \"tone\": \"skeptical\",\n  \"link_articles\": [\"https://technode.com/2025/03/11/chinas-gac-to-sell-level-3-autonomous-driving-vehicles-with-huawei/\", \"https://www.reuters.com/business/autos-transportation/chinas-byd-use-huaweis-advanced-autonomous-driving-system-off-road-evs-2024-08-27/\", \"https://schen583.medium.com/huawei-intelligent-driving-solutions-overview-a-16-billion-valued-automotive-tier-1-f88f4bdfdff9\"],\n  \"date\": \"2025-06-16\"\n}\n]\n"
      },
      "typeVersion": 1.2
    },
    {
      "id": "9ba4a367-e0b1-450d-971b-7892201ff530",
      "name": "Filter",
      "type": "n8n-nodes-base.filter",
      "position": [
        40,
        -160
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 2,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "dda47c0b-b0b2-46f0-a469-cd1b0e1b8152",
              "operator": {
                "type": "dateTime",
                "operation": "after"
              },
              "leftValue": "={{ $json.isoDate }}",
              "rightValue": "={{ $now.minus(1,\"days\") }}"
            }
          ]
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "918ea92f-6a19-4fb7-a896-3911a24cb306",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1940,
        -320
      ],
      "parameters": {
        "color": 7,
        "width": 1020,
        "height": 1360,
        "content": "## Steps\n1. RSS Feed Ingestion (Daily Trigger)\n[x] Fetch latest articles from curated AI RSS feeds:\n[x] OpenAI, Meta AI, DeepMind, arXiv AI, HuggingFace, TechCrunch AI, VentureBeat AI, etc.\n[x] Deduplicate and store links + metadata (title, date, summary)\n\n2. Relevance Filtering\n[x] Filter for articles:\n[x] Published within last 24 hours\n[x] Containing key topics: model releases, tool updates, research, AI regulation, etc.\n[x] Score relevance using: Keyword match, Named entity recognition, Popularity heuristics (retweet count, domain authority, etc.)\n\n3. Content Summarization\n[x] Summarize 2\u20133 selected articles using extractive + abstractive methods\nExtract:\n[x] Key ideas\n[x] Notable names (models, companies, researchers)\n[x] Quotes or stats\n\n4. Long-Tail Angle Generation\nConvert short-tail news into long-tail evergreen angles: E.g. \u201cOpenAI launches CriticGPT\u201d \u2192 \u201cWhy AI Code Review Will Replace Junior Engineers\u201d\nUse prompt chaining:\n[x] Step 1: extract the core topic\n[x] Step 2: generate 5 long-tail blog titles with intent match (e.g., 'how', 'why', 'what's next')\n[x] Step 3: score titles based on uniqueness + search intent\n\n5. SEO-Driven Outline Creation\nGenerate outline optimized for:\n[x] H1 + H2 structure\n[x] Natural keyword inclusion\n[x] Featured snippet targeting\n[x] Structure: Intro \u2192 Background \u2192 Trend \u2192 Insight \u2192 Forecast \u2192 CTA\n\n6. Full-Length Blog Drafting\n[x] Draft 1,000\u20131,500 word blog using outline\nInclude:\n[x] Citations from original articles\n[x] External links for trust\n[x] Analogies, examples, future implications\n[x] Maintain tone: informative, thought-leader, semi-technical\n\n7. SEO Enrichment\nGenerate:\n[x] Meta title (60 chars)\n[x] Meta description (160 chars)\n[x] Alt text for images\n[x] Slug URL with keyword\n[x] Auto-check for keyword density, passive voice, Flesch score\n\n8. Image Generation (Optional)\n[x] Create featured image using AI (e.g., DALL\u00b7E)\n\n9. Export & Publish\n[x] Export article in Markdown or HTML\n[x] Push to CMS (e.g., WordPress REST API)\n[x] publish immediately\n[ ] schedule\n\n10. Logging & Feedback Loop\n[x] Log:\n- Source articles\n- Generated title\n- Keywords used\n- Post URL\n- Store in database for:\n- Deduplication\n- Trend tracking\n- Traffic correlation\n[ ] Feedback loop:\n\n\n"
      },
      "typeVersion": 1
    },
    {
      "id": "d7468098-66f8-47bf-8699-abf78eb06a13",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -860,
        580
      ],
      "parameters": {
        "color": 4,
        "width": 2400,
        "height": 800,
        "content": "## Step 3: Research the news articles\n**Double click** to edit me. [Guide](https://docs.n8n.io/workflows/sticky-notes/)"
      },
      "typeVersion": 1
    },
    {
      "id": "3eee8f2b-8c60-47f2-a1fa-e612e65ca131",
      "name": "HTTP Request",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        180,
        980
      ],
      "parameters": {
        "url": "={{ $json[\"link_articles\"] }}",
        "options": {}
      },
      "typeVersion": 4.2
    },
    {
      "id": "d75cb082-27f0-4201-b220-c6da5ff50c37",
      "name": "HTML",
      "type": "n8n-nodes-base.html",
      "position": [
        360,
        980
      ],
      "parameters": {
        "options": {},
        "operation": "extractHtmlContent",
        "extractionValues": {
          "values": [
            {
              "key": "body",
              "cssSelector": "body",
              "skipSelectors": "img"
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "a8039220-b7ec-4952-b33b-c3198cc8c4fd",
      "name": "OpenAI Chat Model2",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        740,
        1180
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "69785989-babd-4c85-9112-36261a5099c0",
      "name": "AI Agent1",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        800,
        980
      ],
      "parameters": {
        "text": "=Below is an article. Extract the 3 most important sentences that summarize the factual content. Do not interpret. Only copy exact sentences.\n\nUse that to extract and list:\n1. write a 2-paragraph summary of the article in your own words.\n2. Key concepts or ideas\n3. Names of companies, models, or researchers\n4. Any quoted statements or numerical/statistical claims\n\nHere is the article:\n {{ $json.data }}",
        "options": {},
        "promptType": "define",
        "hasOutputParser": true
      },
      "typeVersion": 2
    },
    {
      "id": "418c402c-5467-4dda-9a25-796384c3bce0",
      "name": "Structured Output Parser1",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        1020,
        1180
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"abstract_summary\": \"...\",\n  \"ideas\": [\"...\"],\n  \"names\": [\"OpenAI\", \"CriticGPT\"],\n  \"quotes_or_stats\": [\"'70% faster than human review'\", \"CriticGPT released in June 2025\"]\n}\n"
      },
      "typeVersion": 1.2
    },
    {
      "id": "827e24bd-e62a-41a9-a48b-7a4423270d5e",
      "name": "Aggregate1",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        200,
        780
      ],
      "parameters": {
        "options": {},
        "aggregate": "aggregateAllItemData",
        "destinationFieldName": "articles"
      },
      "typeVersion": 1
    },
    {
      "id": "e0d1c4a3-cdce-4684-b6dc-83a10fc49977",
      "name": "AI Agent2",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "notes": "generate blog title ideas",
      "position": [
        -400,
        1640
      ],
      "parameters": {
        "text": "=You are a viral blog strategist. Given the following blog article concept: {{ JSON.stringify($json) }}\n\nGenerate 5 compelling blog post titles that:\n- Evoke curiosity or urgency\n- Include emotional or controversial angles\n- Use long-tail keywords for SEO\n- Are clear, specific, and make the reader want to click\n- Follow formats like:\n  - \u201cWhy [X] Is About to Change Everything in [Y]\u201d\n  - \u201cThe Hidden Truth About [Topic]\u201d\n  - \u201cHow [Persona] Are Using [X] to [Y]\u201d\n  - \u201cWhat No One Tells You About [Topic]\u201d\n  - \u201cX Predictions About the Future of [Topic] That\u2019ll Shock You\u201d\n\nEnd your response with:  \n**Core Topic:** [a single phrase summarizing the article idea]\n",
        "options": {},
        "promptType": "define",
        "hasOutputParser": true
      },
      "notesInFlow": true,
      "typeVersion": 2
    },
    {
      "id": "becfb981-a620-463b-9053-4e97ab7822b9",
      "name": "OpenAI Chat Model3",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -380,
        1860
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "a578c715-df33-42bf-af9f-4d441d750e28",
      "name": "Structured Output Parser2",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        -260,
        1860
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"titles\": [\n    \"Why AI Code Review Will Replace Junior Engineers\",\n    \"How AI is Reshaping Software QA in 2025\",\n    \"What CriticGPT Means for Developer Workflows\",\n    \"The Future of Code Reviews: AI vs Human Engineers\",\n    \"5 Benefits of Using AI for Code Quality Control\"\n  ],\n  \"core_topic\" : \"AI software engineers\"\n}"
      },
      "typeVersion": 1.2
    },
    {
      "id": "857ef5d7-768a-471c-ba86-1d08212fae1b",
      "name": "Split Out2",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        2280,
        -100
      ],
      "parameters": {
        "options": {},
        "fieldToSplitOut": "output"
      },
      "typeVersion": 1
    },
    {
      "id": "378ff680-dcd6-48c5-b142-e36768ddb153",
      "name": "Split Out1",
      "type": "n8n-nodes-base.splitOut",
      "position": [
        -440,
        860
      ],
      "parameters": {
        "include": "allOtherFields",
        "options": {},
        "fieldToSplitOut": "link_articles"
      },
      "typeVersion": 1
    },
    {
      "id": "c2520709-9364-48c1-8ef8-03be04802c98",
      "name": "MongoDB",
      "type": "n8n-nodes-base.mongoDb",
      "position": [
        2680,
        -100
      ],
      "parameters": {
        "fields": "=title,main_keyword,related_keywords,tone,completed_step,link_articles",
        "options": {
          "dateFields": "date"
        },
        "operation": "insert",
        "collection": "blog"
      },
      "credentials": {
        "mongoDb": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "a52fcd08-93ad-49f9-a4f1-a8c1ddafa9f3",
      "name": "MongoDB1",
      "type": "n8n-nodes-base.mongoDb",
      "position": [
        -620,
        860
      ],
      "parameters": {
        "query": "{\"completed_step\":2}",
        "options": {
          "limit": 1
        },
        "collection": "blog"
      },
      "credentials": {
        "mongoDb": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "52fe3080-a279-42ae-a56d-af0e2491f948",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -840,
        1480
      ],
      "parameters": {
        "color": 6,
        "width": 3880,
        "height": 800,
        "content": "## Step 4,5,6,7: Write the article and prepare SEO\n**Double click** to edit me. [Guide](https://docs.n8n.io/workflows/sticky-notes/)"
      },
      "typeVersion": 1
    },
    {
      "id": "8df64bb2-6bc8-4c46-9223-2fb2c2682764",
      "name": "MongoDB3",
      "type": "n8n-nodes-base.mongoDb",
      "position": [
        -580,
        1640
      ],
      "parameters": {
        "query": "{\"completed_step\":3}",
        "options": {
          "limit": 1
        },
        "collection": "blog"
      },
      "credentials": {
        "mongoDb": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "118ab8a8-4047-4da5-8723-f13c38becd2d",
      "name": "MongoDB4",
      "type": "n8n-nodes-base.mongoDb",
      "position": [
        1280,
        1640
      ],
      "parameters": {
        "fields": "blog_outline, completed_step",
        "options": {},
        "operation": "update",
        "updateKey": "_id",
        "collection": "blog"
      },
      "credentials": {
        "mongoDb": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "5d4b8a5b-3e3f-4cf7-a813-5ae6417c34f1",
      "name": "AI Agent3",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "notes": "rate blog title ideas",
      "position": [
        -60,
        1640
      ],
      "parameters": {
        "text": "=Rate the following blog titles based on the **core topic**. Score each title out of 10 in:\n1. Uniqueness\n2. SEO keyword clarity\n3. Emotional and curiosity-driven clickbait quality\n\nTitles: {{ JSON.stringify($json.output.titles) }}\nCore Topic: {{ JSON.stringify($json.output.core_topic) }}\n\nReturn a ranked list with justifications for each score. Highlight the best one.\n",
        "options": {},
        "promptType": "define",
        "hasOutputParser": true
      },
      "notesInFlow": true,
      "typeVersion": 2
    },
    {
      "id": "0de5e677-eb04-4c2f-90df-f3637a244877",
      "name": "OpenAI Chat Model4",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -20,
        1860
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "eb6fe9ab-9a3a-4641-a0ac-6c3990c70e74",
      "name": "Structured Output Parser3",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        80,
        1860
      ],
      "parameters": {
        "jsonSchemaExample": "[\n  {\n    \"title\": \"Why AI Code Review Will Replace Junior Engineers\",\n    \"uniqueness_score\": 8,\n    \"seo_score\": 7,\n    \"longtail_score\": 9,\n    \"reason\": \"Strong intent signal ('why'), specific audience reference ('junior engineers'), but replacement framing may be oversimplified.\"\n  },\n  {\n    \"title\": \"How AI is Reshaping Software QA in 2025\",\n    \"uniqueness_score\": 6,\n    \"seo_score\": 9,\n    \"longtail_score\": 8,\n    \"reason\": \"Good long-tail and temporal relevance, but the 'reshaping' verb is generic and the angle lacks a unique hook.\"\n  },\n  {\n    \"title\": \"What CriticGPT Means for Developer Workflows\",\n    \"uniqueness_score\": 5,\n    \"seo_score\": 6,\n    \"longtail_score\": 6,\n    \"reason\": \"Moderately informative but lacks specificity, and may be too short-tail. Could benefit from clearer impact framing.\"\n  },\n  {\n    \"title\": \"The Future of Code Reviews: AI vs Human Engineers\",\n    \"uniqueness_score\": 7,\n    \"seo_score\": 8,\n    \"longtail_score\": 9,\n    \"reason\": \"Decent contrast-based framing. 'Future of' titles have strong SEO pull, but risk becoming overused.\"\n  },\n  {\n    \"title\": \"5 Benefits of Using AI for Code Quality Control\",\n    \"uniqueness_score\": 6,\n    \"seo_score\": 10,\n    \"longtail_score\": 8,\n    \"reason\": \"Clear list format, strong SEO structure, but uses a very common benefits-based formula with a broad target.\"\n  }\n]\n"
      },
      "typeVersion": 1.2
    },
    {
      "id": "f94e8254-62ad-490a-924e-036ed971c2ba",
      "name": "Code3",
      "type": "n8n-nodes-base.code",
      "notes": "rank and choose the best one",
      "position": [
        1140,
        1640
      ],
      "parameters": {
        "jsCode": "let outline = $input.first().json.output[0].outline || '';\n\n// Step 1: Remove ```markdown and ``` fences\noutline = outline\n  .replace(/```markdown\\n?/g, '')   // remove opening ```markdown\n  .replace(/```/g, '')              // remove closing ```\n  .trim();\n\n// Step 2: Escape backslashes and double quotes\noutline = outline\n  .replace(/\\\\/g, '\\\\\\\\')           // escape backslashes\n  .replace(/\"/g, '\\\\\"');            // escape double quotes\n\nreturn {\n    _id : $('Code7').first().json._id,\n    blog_outline: outline,\n    completed_step : 5\n  }\n"
      },
      "notesInFlow": true,
      "typeVersion": 2
    },
    {
      "id": "7ede969a-a684-4a59-89f6-7f95dc05a442",
      "name": "Code4",
      "type": "n8n-nodes-base.code",
      "position": [
        380,
        780
      ],
      "parameters": {
        "jsCode": "function escapeQuotes(str) {\n  if (typeof str !== 'string') return str;\n  return str.replace(/\"/g, \"'\");\n}\n\nconst articles = $input.first().json.articles.map(article => {\n  const sanitized = {};\n\n  // Loop through keys and escape problematic strings\n  for (const [key, value] of Object.entries(article)) {\n    if (Array.isArray(value)) {\n      sanitized[key] = value.map(v => escapeQuotes(v));\n    } else if (typeof value === 'string') {\n      sanitized[key] = escapeQuotes(value);\n    } else {\n      sanitized[key] = value;\n    }\n  }\n\n  return sanitized;\n});\n\nconst item_id = $('MongoDB1').first().json._id\n\nreturn {\n    _id: item_id,\n    articles: articles,\n    completed_step: 3\n  }\n"
      },
      "typeVersion": 2
    },
    {
      "id": "c8462857-7249-4878-b024-4ab90c53a9ef",
      "name": "MongoDB2",
      "type": "n8n-nodes-base.mongoDb",
      "position": [
        560,
        780
      ],
      "parameters": {
        "fields": "articles, completed_step",
        "options": {},
        "operation": "update",
        "updateKey": "_id",
        "collection": "blog"
      },
      "credentials": {
        "mongoDb": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2,
      "alwaysOutputData": true
    },
    {
      "id": "02db3b5e-6ebc-47ce-91d4-b0120e62888f",
      "name": "AI Agent5",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "notes": "generate blog outline markdown",
      "position": [
        800,
        1640
      ],
      "parameters": {
        "text": "=You are an SEO blog strategist.\n\nGiven:\n- Title: {{ $('MongoDB3').item.json.blog_title }}\n- Main keyword: {{ $('MongoDB3').item.json.main_keyword }}\n- Related keywords: {{ JSON.stringify($('MongoDB3').item.json.related_keywords) }}\n- Related articles: {{ JSON.stringify($('MongoDB3').item.json.articles) }}\n\nGenerate a detailed outline for a blog post that:\n- Uses a strong **H1** as the main title\n- Includes **H2 subheadings** for each major section\n- Naturally incorporates the main keyword and related keywords\n- Follows this structure:\n  1. Intro\n  2. Background\n  3. Trend\n  4. Insight\n  5. Forecast\n  6. CTA\n- Is optimized for **featured snippet** inclusion on Google\n\nRespond in Markdown format. Include H1 and H2 tags.\n",
        "options": {},
        "promptType": "define",
        "hasOutputParser": true
      },
      "notesInFlow": true,
      "typeVersion": 2
    },
    {
      "id": "106cb1f4-c0e0-4bb6-baf4-e73128beff58",
      "name": "OpenAI Chat Model6",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        800,
        1860
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "404b3108-fd22-48dc-ad0c-cc96fdef6c6d",
      "name": "Code7",
      "type": "n8n-nodes-base.code",
      "notes": "rank and choose the best one",
      "position": [
        300,
        1640
      ],
      "parameters": {
        "jsCode": "const input = $('AI Agent3').first().json.output;\n\n// Add average_score to each item\nfor (const item of input) {\n  item.average_score = (\n    (item.uniqueness_score || 0) +\n    (item.seo_score || 0) +\n    (item.longtail_score || 0)\n  ) / 3;\n}\n\n// Sort by average_score descending\ninput.sort((a, b) => b.average_score - a.average_score);\n\n// Return full sorted list + top blog title\nreturn {\n    blog_title_ideas: input,\n    blog_title: input[0].title,\n    core_topic: $('AI Agent2').first().json.output.core_topic , \n    _id: $('MongoDB3').first().json._id,\n    completed_step : 4\n  }\n"
      },
      "notesInFlow": true,
      "typeVersion": 2
    },
    {
      "id": "d690e954-bd1d-4e66-aca6-852a8054208e",
      "name": "MongoDB7",
      "type": "n8n-nodes-base.mongoDb",
      "position": [
        440,
        1640
      ],
      "parameters": {
        "fields": "blog_title, blog_title_ideas, core_topic, completed_step",
        "options": {},
        "operation": "update",
        "updateKey": "_id",
        "collection": "blog"
      },
      "credentials": {
        "mongoDb": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "fddb3ed6-d327-45c7-b2bf-4ad22a2cb818",
      "name": "AI Agent6",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "notes": "create blog content",
      "position": [
        1420,
        1640
      ],
      "parameters": {
        "text": "=Use this information:\n\n- **Title**: {{ $('MongoDB3').item.json.blog_title }}\n- **Main Keyword**: {{ $('MongoDB3').item.json.main_keyword }}\n- **Related Keywords**: {{ JSON.stringify($('MongoDB3').item.json.related_keywords) }}\n- **Tone**: {{ $('MongoDB3').item.json.tone }}\n- **Outline**: {{ $('Code3').item.json.blog_outline }}\n- **Related Articles**: {{ JSON.stringify($('MongoDB3').item.json.articles) }}\n- **Citations**: {{ JSON.stringify($('MongoDB3').item.json.link_articles) }}\n\nInstructions:\n\n1. Write approximately 300 to 500 words per section outline\n2. Naturally include the main and related keywords.\n3. Incorporate:\n   - At least 2 **citations** (link to or mention source_articles)\n   - 1 analogy or example for clarity\n   - Future implications or forecasts\n4. Maintain the tone: {{ $('MongoDB3').item.json.tone }}\n5. Write in Markdown format with:\n   - `#` for H1\n   - `##` for H2\n   - bullet points, bold text, or italics where needed\n\nRespond with the full blog article only.\n",
        "options": {
          "systemMessage": "You are a professional blog writer for a leading AI publication.\n\nYour job is to write a complete, well-structured, SEO-friendly blog post."
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "notesInFlow": true,
      "typeVersion": 2
    },
    {
      "id": "520787ba-fe10-416d-846e-a63b588f52c2",
      "name": "OpenAI Chat Model7",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1360,
        1860
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o",
          "cachedResultName": "gpt-4o"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "a41dbfe7-49a7-4b30-aa37-368d16d01b43",
      "name": "MongoDB5",
      "type": "n8n-nodes-base.mongoDb",
      "position": [
        1980,
        1640
      ],
      "parameters": {
        "fields": "blog_article, completed_step",
        "options": {},
        "operation": "update",
        "updateKey": "_id",
        "collection": "blog"
      },
      "credentials": {
        "mongoDb": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "e8cb6a64-a778-4129-a74e-cfe8c4c00080",
      "name": "Code5",
      "type": "n8n-nodes-base.code",
      "notes": "rank and choose the best one",
      "position": [
        1800,
        1640
      ],
      "parameters": {
        "jsCode": "let blog_article = $('AI Agent6').first().json.output\nblog_article = blog_article\n  .replace(/```markdown\\n?/g, '')   // remove opening ```markdown\n  .replace(/```/g, '')              // remove closing ```\n  .trim();\n\n// Step 2: Escape backslashes and double quotes\nblog_article = blog_article\n  .replace(/\\\\/g, '\\\\\\\\')           // escape backslashes\n  .replace(/\"/g, '\\\\\"');        \n\nreturn {\n    _id : $('Code7').first().json._id,\n    blog_article: blog_article,\n    completed_step : 6\n  }\n"
      },
      "notesInFlow": true,
      "typeVersion": 2
    },
    {
      "id": "ca4193e1-d31a-4d6d-a059-5b6ce3a2b318",
      "name": "Code",
      "type": "n8n-nodes-base.code",
      "position": [
        2500,
        -100
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "return {\n  ...$input.item.json,\n  completed_step: 2\n}"
      },
      "typeVersion": 2
    },
    {
      "id": "8a55bbcc-9562-4334-9da7-ffefbd161091",
      "name": "AI Agent7",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "notes": "generate meta data",
      "position": [
        2160,
        1640
      ],
      "parameters": {
        "text": "=Based on the blog article below, generate:\n1. A **meta title** (max 60 characters)\n2. A **meta description** (max 160 characters)\n3. An **image alt text** for the featured image\n4. A **URL slug** based on the blog title and keyword\n5. A basic SEO report:\n   - Keyword density for the main keyword\n   - Count of passive voice sentences\n   - Estimated Flesch reading score (0\u2013100 scale)\n\nData:\n- Title: {{ $('MongoDB3').item.json.blog_title }}\n- Main Keyword: {{ $('MongoDB3').item.json.main_keyword }}\n- Related Keywords: {{ JSON.stringify($('MongoDB3').item.json.related_keywords) }}\n- Content: {{ $json.blog_article }}\n",
        "options": {
          "systemMessage": "You are an SEO expert."
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "notesInFlow": true,
      "typeVersion": 2
    },
    {
      "id": "65d65285-f403-4332-9f6e-e70dcca6eb13",
      "name": "OpenAI Chat Model8",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        2100,
        1860
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "ba552978-35a5-48e2-bfbe-6fccf69d03a3",
      "name": "MongoDB6",
      "type": "n8n-nodes-base.mongoDb",
      "position": [
        2700,
        1640
      ],
      "parameters": {
        "fields": "=completed_step,meta_title,meta_description,image_alt_text, slug, seo_report",
        "options": {},
        "operation": "update",
        "updateKey": "_id",
        "collection": "blog"
      },
      "credentials": {
        "mongoDb": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "334c62b5-15b8-442c-9978-d94d90ee3926",
      "name": "Code6",
      "type": "n8n-nodes-base.code",
      "notes": "rank and choose the best one",
      "position": [
        2540,
        1640
      ],
      "parameters": {
        "jsCode": "return {\n    _id : $('Code7').first().json._id,\n    ...$input.first().json.output,\n    completed_step : 7\n  }\n"
      },
      "notesInFlow": true,
      "typeVersion": 2
    },
    {
      "id": "12045d2a-a760-445b-bdbb-c7dd814e886f",
      "name": "Structured Output Parser4",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        2380,
        1840
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"meta_title\": \"Why AI Code Review Tools Matter\",\n  \"meta_description\": \"Explore how AI is reshaping code reviews and what it means for developers.\",\n  \"image_alt_text\": \"AI reviewing code on a laptop screen\",\n  \"slug\": \"ai-code-review-tools\",\n  \"seo_report\": {\n    \"keyword_density\": \"2.8%\",\n    \"passive_voice_count\": 4,\n    \"flesch_score\": 62.5\n  }\n}"
      },
      "typeVersion": 1.2
    },
    {
      "id": "abcd3bc8-6983-424b-9378-3db2be76e3a9",
      "name": "MongoDB8",
      "type": "n8n-nodes-base.mongoDb",
      "position": [
        -520,
        2420
      ],
      "parameters": {
        "query": "{\"completed_step\":7}",
        "options": {
          "limit": 1
        },
        "collection": "blog"
      },
      "credentials": {
        "mongoDb": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "90e042a5-fd2d-4738-a0cd-c11128dd54f6",
      "name": "OpenAI",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "position": [
        60,
        2640
      ],
      "parameters": {
        "prompt": "={{ $('MongoDB8').item.json.image_alt_text }}",
        "options": {
          "size": "1792x1024"
        },
        "resource": "image"
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.8
    },
    {
      "id": "1d34c2fc-dc4a-4616-9651-22a920fc8ce7",
      "name": "AI Agent4",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "notes": "rate blog title ideas",
      "position": [
        -280,
        2640
      ],
      "parameters": {
        "text": "=Use the blog title, main keyword, and image alt text to craft a image generation prompt that captures a human-centered, emotionally compelling moment related to the image alt text.\n\nImagine a scene that tells a story or captures a pivotal feeling \u2014 something symbolic, cinematic, and relatable. Think in terms of real-world settings, natural environments, recognizable objects, or subtle interactions that represent change, tension, or hope. Let the visual convey meaning without relying on text or overt symbols.\n\nAvoid abstract visualizations like circuits, networks, floating data, or robotic aesthetics. Instead, evoke emotion and narrative through setting, lighting, perspective, and atmosphere. Let the image feel like a glimpse into a personal story, a lived moment, or a metaphor unfolding.\n\nDo not include any text or words in the image.\n\nRespond only with the image generation rompt.\n\nBlog Titile: {{ $json.blog_title }}\nMain Keyword: {{ $json.main_keyword }}\nImage Alt Text: {{ $json.image_alt_text }}",
        "options": {
          "systemMessage": "You are a creative visual expert in marketing and digital design. Your job is to craft emotionally compelling image prompts that generate click bait images for social media posts\n"
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "notesInFlow": true,
      "typeVersion": 2
    },
    {
      "id": "e1573b88-90fd-425a-93a5-5f6f71e90ded",
      "name": "OpenAI Chat Model5",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        -280,
        2860
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini"
        },
        "options": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "046d025b-01a8-4a29-9373-47bd051a70ef",
      "name": "Structured Output Parser5",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        -120,
        2860
      ],
      "parameters": {
        "jsonSchemaExample": "{\n\t\"prompt\": \"Create a visually striking digital banner for a blog article titled 'Exploring the Future of Generative Models Through Latent Space Interpolation.' The banner should feature a vibrant and abstract representation of a 'latent space,' showcasing smooth, flowing transitions between diverse data point visuals like images, sounds, and patterns. Incorporate elements symbolizing generative models such as neural networks, GANs, and VAEs. Use a color palette that blends futuristic blues, purples, and tech-inspired gradients\"\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "fae23884-28f9-454d-a9a0-78efe85d2f24",
      "name": "Wordpress1",
      "type": "n8n-nodes-base.wordpress",
      "position": [
        1580,
        2420
      ],
      "parameters": {
        "title": "={{ $('MongoDB8').first().json.blog_title }}",
        "additionalFields": {
          "slug": "={{ $('MongoDB8').first().json.slug }}",
          "status": "draft",
          "sticky": false,
          "content": "={{ $json.blog_html }}",
          "authorId": 3,
          "categories": [
            8
          ],
          "postTemplate": {
            "values": {}
          },
          "commentStatus": "closed"
        }
      },
      "credentials": {
        "wordpressApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "51780c90-ac3f-4960-a5d1-fb038119ec43",
      "name": "Set Image",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1760,
        2420
      ],
      "parameters": {
        "url": "=https://articles.emp0.com/wp-json/wp/v2/posts/{{ $('Wordpress1').item.json.id }}",
        "method": "POST",
        "options": {},
        "sendQuery": true,
        "authentication": "predefinedCredentialType",
        "queryParameters": {
          "parameters": [
            {
              "name": "featured_media",
              "value": "={{ $('Upload image2').item.json.id }}"
            }
          ]
        },
        "nodeCredentialType": "wordpressApi"
      },
      "credentials": {
        "wordpressApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "d53f2502-4c15-45c3-a085-5c5d28cea827",
      "name": "Upload image2",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        860,
        2420
      ],
      "parameters": {
        "url": "https://articles.emp0.com/wp-json/wp/v2/media",
        "method": "POST",
        "options": {},
        "sendBody": true,
        "contentType": "binaryData",
        "sendHeaders": true,
        "authentication": "predefinedCredentialType",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Disposition",
              "value": "=attachment; filename=\"img-{{ $('MongoDB8').item.json.slug }}.jpg\""
            }
          ]
        },
        "inputDataFieldName": "data",
        "nodeCredentialType": "wordpressApi"
      },
      "credentials": {
        "wordpressApi": {
          "name": "<your credential>"
        }
      },
      "retryOnFail": true,
      "typeVersion": 4.2,
      "waitBetweenTries": 5000
    },
    {
      "id": "a37a09bb-f82d-462d-9e67-ee180097429b",
      "name": "Set metatag1",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        1940,
        2420
      ],
      "parameters": {
        "url": "=https://articles.emp0.com/wp-json/wp/v2/posts/{{ $('Wordpress1').item.json.id }}",
        "method": "PUT",
        "options": {},
        "jsonBody": "={\n  \"meta\":{\n    \"_yoast_wpseo_title\":\"{{ $('MongoDB8').item.json.meta_title }}\",\n    \"_yoast_wpseo_metadesc\":\"{{ $('MongoDB8').item.json.meta_description }}\"\n  }\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "headerParameters": {
          "parameters": [
            {
              "name": "Content-Type",
              "value": "application/json"
            }
          ]
        },
        "nodeCredentialType": "wordpressApi"
      },
      "credentials": {
        "wordpressApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "9363f64c-6494-419e-bc84-166f2013fc3c",
      "name": "Code12",
      "type": "n8n-nodes-base.code",
      "position": [
        1040,
        2420
      ],
      "parameters": {
        "jsCode": "return { \n  \"_id\" : $('MongoDB8').first().json._id,\n  \"blog_image_url\": $input.first().json.source_url,\n  completed_step : 8\n};\n"
      },
      "typeVersion": 2
    },
    {
      "id": "2f149a7d-e6a8-4cdb-84a9-f474274fe4dc",
      "name": "MongoDB15",
      "type": "n8n-nodes-base.mongoDb",
      "position": [
        1220,
        2420
      ],
      "parameters": {
        "fields": "=completed_step,blog_image_url",
        "options": {},
        "operation": "update",
        "updateKey": "_id",
        "collection": "blog"
      },
      "credentials": {
        "mongoDb": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "d687a052-adf1-4a3d-be85-94f7b0e8f772",
      "name": "Wordpress2",
      "type": "n8n-nodes-base.wordpress",
      "position": [
        2160,
        2420
      ],
      "parameters": {
        "postId": "={{ $('Wordpress1').item.json.id }}",
        "operation": "update",
        "updateFields": {
          "status": "publish"
        }
      },
      "credentials": {
        "wordpressApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "9a90e900-ad8e-490f-bf3a-8788cca624d5",
      "name": "MongoDB16",
      "type": "n8n-nodes-base.mongoDb",
      "position": [
        2560,
        2420
      ],
      "parameters": {
        "fields": "completed_step, blog_status, blog_link",
        "options": {},
        "operation": "update",
        "updateKey": "_id",
        "collection": "blog"
      },
      "credentials": {
        "mongoDb": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.1
    },
    {
      "id": "3292cb3b-22c0-43aa-8860-e1b2bcea3280",
      "name": "Code14",
      "type": "n8n-nodes-base.code",
      "position": [
        2360,
        2420
      ],
      "parameters": {
        "jsCode": "return { \n  \"_id\" : $('MongoDB8').first().json._id,\n  \"blog_status\": \"Publish\",\n  \"blog_link\" : $('Wordpress1').first().json.link, \n  completed_step : 9\n};\n"
      },
      "typeVersion": 2
    },
    {
      "id": "8dca0746-0c42-4597-93d7-26023f9c237e",
      "name": "Code8",
      "type": "n8n-nodes-base.code",
      "position": [
        1400,
        2420
      ],
      "parameters": {
        "jsCode": "const markdown = $('MongoDB8').first().json.blog_article || '';\n\n// Simple replacements (limited Markdown support)\nlet html = markdown\n  .replace(/^### (.*$)/gim, '<h3>$1</h3>')\n  .replace(/^## (.*$)/gim, '<h2>$1</h2>')\n  .replace(/^# (.*$)/gim, '<h1>$1</h1>')\n  .replace(/\\*\\*(.*?)\\*\\*/gim, '<strong>$1</strong>')\n  .replace(/\\*(.*?)\\*/gim, '<em>$1</em>')\n  .replace(/\\[(.*?)\\]\\((.*?)\\)/gim, '<a href=\"$2\">$1</a>')\n  .replace(/\\n$/gim, '<br />');\n\nhtml = `<div>${html}</div>`; // wrap in container\n\nreturn [{\n  json: {\n    blog_html: html\n  }\n}];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "bd78a139-74de-4b89-980f-bc60d8c09b59",
      "name": "HTTP Request1",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        -180,
        2420
      ],
      "parameters": {
        "url": "https://cloud.leonardo.ai/api/rest/v1/generations",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"modelId\": \"b2614463-296c-462a-9586-aafdb8f00e36\",\n  \"contrast\": 3.5,\n  \"prompt\": \"{{$json.prompt }}\",\n  \"num_images\": 1,\n  \"width\": 1472,\n  \"height\": 832,\n  \"styleUUID\": \"111dc692-d470-4eec-b791-3475abac4c46\",\n  \"enhancePrompt\": true\n}",
        "sendBody": true,
        "sendHeaders": true,
        "specifyBody": "json",
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "headerParameters": {
          "parameters": [
            {
              "name": "content-type",
              "value": "application/json"
            },
            {
              "name": "accept",
              "value": "application/json"
            }
          ]
        }
      },
      "credentials": {
        "httpBearerAuth": {
          "name": "<your credential>"
        },
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "fa9d6f10-ea2e-442d-bce1-419e7cf9769a",
      "name": "HTTP Request2",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        360,
        2420
      ],
      "parameters": {
        "url": "=https://cloud.leonardo.ai/api/rest/v1/generations/{{ $json.sdGenerationJob.generationId }}",
        "options": {},
        "sendHeaders": true,
        "authentication": "genericCredentialType",
        "genericAuthType": "httpHeaderAuth",
        "headerParameters": {
          "parameters": [
            {
              "name": "accept",
              "value": "application/json"
            }
          ]
        }
      },
      "credentials": {
        "httpBearerAuth": {
          "name": "<your credential>"
        },
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "80ea7142-4fed-4469-881b-39139456e1ad",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        0,
        2420
      ],
      "parameters": {
        "unit": "minutes",
        "amount": 1
      },
      "typeVersion": 1.1
    },
    {
      "id": "928aaf73-65c1-4d21-85aa-abca6a723525",
      "name": "HTTP Request3",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        580,
        2420
      ],
      "parameters": {
        "url": "={{ $json.generations_by_pk.generated_images[0].url }}",
        "options": {}
      },
      "typeVersion": 4.2
    },
    {
      "id": "ba31143c-c24a-40de-8fbb-b14976b91ec4",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -840,
        2340
      ],
      "parameters": {
        "width": 3880,
        "height": 800,
        "content": "## Step 8,9: Generate image and create blog article"
      },
      "typeVersion": 1
    },
    {
      "id": "ba31cf93-d6ac-4a17-a19a-d5679f5da805",
      "name": "Get Articles Daily1",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -760,
        2420
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 2,
              "triggerAtMinute": 20
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "5e3dbe1b-1f6f-440e-bbfd-7c3d02f4faea",
      "name": "Get Articles Daily2",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -800,
        860
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 2
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "6c16c912-c25a-42f9-bdc7-34d241e49255",
      "name": "Get Articles Daily3",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -760,
        1640
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 2,
              "triggerAtMinute": 10
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "e3898031-6f85-4ff7-a868-c63016865d5e",
      "name": "Structured Output Parser6",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        1000,
        1860
      ],
      "parameters": {
        "jsonSchemaExample": "[\n  {\n    \"outline\": \"```markdown\\n# Navigating Legal Complexities in AI and Copyright: A Complete Guide\\n\\n## Introduction: The Intersection of AI and Copyright\\nThe rise of generative AI has sparked a seismic shift in the creative landscape, leading to a plethora of AI copyright issues that challenge traditional views on intellectual property. As artists, musicians, and creators increasingly turn to AI-generated content, the question arises: who owns the rights to these creations? In this guide, we will explore the nuances of AI copyright issues, the implications for creativity rights, and what the future holds for artists harnessing the power of AI.\\n\\n## Background: Understanding AI and Copyright\\nIn order to grasp the complexities of AI copyright issues, one must first understand the fundamentals of copyright law and its application to generative AI. Copyright is designed to protect original works of authorship, but the emergence of AI-generated content complicates this traditional framework. This section will cover:\\n- Key definitions of intellectual property.\\n- The role of creativity rights in copyright law.\\n- Examples of how traditional copyright has been challenged by advancements in generative AI technologies.\\n\\n## Trend: The Rise of Generative AI and Its Impact\\nThe increasing sophistication of generative AI tools means more creators are using these technologies to produce art and music. This trend raises significant questions about originality and ownership. In this section, we will discuss:\\n- Notable applications of generative AI in various creative fields.\\n- The ongoing debate surrounding the legality and ethics of AI-generated content.\\n- Highlighting perspectives from industry experts, including insights from creators like Ed Sheeran on the nature of creativity in a world shaped by AI.\\n\\n## Insight: The Tension Between Innovation and Copyright Law\\nAs the lines blur between human creativity and machine-generated art, there is a growing tension between innovation and the protection of creativity rights. This section will delve into:\\n- Case studies showcasing the struggles artists face in asserting ownership over AI-assisted works.\\n- Quotations from thought leaders, such as Ed Sheeran\u2019s view on the shared building blocks of creativity.\\n- Analyzing the statements of influential figures who have commented on the implications of AI on artistic expression, including references to past artistic movements.\\n\\n## Forecast: The Future of AI Copyright Issues\\nLooking ahead, the legal frameworks surrounding AI copyright issues are likely to evolve. This section will provide:\\n- Predictions on how copyright law may adapt to accommodate the realities of generative AI.\\n- Insights into potential policy changes and reforms that could arise from ongoing debates.\\n- A discussion on the importance of fostering a balanced approach that respects creativity rights while encouraging innovation.\\n\\n## Call to Action: Join the Conversation\\nAs the landscape of AI-generated content continues to evolve, the need for informed stakeholders is more critical than ever. We encourage readers to engage in this important dialogue. Share your thoughts on AI copyright issues and how you see the future of creativity rights developing. Stay updated with our latest insights and contribute to shaping the future of intellectual property in the age of AI.\\n```\\n\"\n  }\n]"
      },
      "typeVersion": 1.3
    },
    {
      "id": "c5b15f9c-e367-4e5e-bb1d-84742b75efeb",
      "name": "Code9",
      "type": "n8n-nodes-base.code",
      "position": [
        -340,
        2420
      ],
      "parameters": {
        "jsCode": "const base = $('MongoDB8').first().json.image_alt_text || '';\nconst cleanBase = base.replace(/[\"\\n\\r]/g, ''); // Remove double quotes and line breaks\nconst enrichedPrompt = `A cinematic, emotionally compelling scene involving people that captures the essence of: ${cleanBase}. Include visible human figures in natural interaction or meaningful posture, placed in a symbolic setting that reinforces the story.`;\n\nreturn [{\n  json: {\n    prompt: enrichedPrompt\n  }\n}];\n"
      },
      "typeVersion": 2
    },
    {
      "id": "d566905f-666f-4ec0-b3e8-3e2ed9e6121d",
      "name": "Transform news to MD",
      "type": "n8n-nodes-base.code",
      "position": [
        580,
        980
      ],
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "function stripHtmlTags(html) {\n  return html\n    .replace(/<\\/?[^>]+(>|$)/g, '') // remove all HTML tags\n    .replace(/&nbsp;/g, ' ')\n    .replace(/&amp;/g, '&')\n    .replace(/&quot;/g, '\"')\n    .replace(/&#39;/g, \"'\")\n    .replace(/&lt;/g, '<')\n    .replace(/&gt;/g, '>');\n}\n\nconst input = $json.body || \"\";\nconst markdownContent = stripHtmlTags(input).trim();\n\nreturn {\n  json: {\n    data: markdownContent\n  }\n};\n"
      },
      "typeVersion": 2
    },
    {
      "id": "155318c9-d262-43f1-b7ed-5a4fa8bedc84",
      "name": "Code1",
      "type": "n8n-nodes-base.code",
      "position": [
        1220,
        980
      ],
      "parameters": {
        "jsCode": "// Get current item data\nlet article = $json.output || {};\n\narticle.link = $('Code10').first().json.link_articles;\n\n// Return with flattened structure\nreturn {\n  json: {\n    ...article\n  }\n};\n"
      },
      "typeVersion": 2
    },
    {
      "id": "f95f87f6-6125-4685-a772-cedc5ef6bb4e",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        -240,
        860
      ],
      "parameters": {
        "options": {
          "reset": false
        }
      },
      "typeVersion": 3,
      "alwaysOutputData": false
    },
    {
      "id": "ea0b5f05-e784-44e6-9949-0c30d6dabf7d",
      "name": "Code10",
      "type": "n8n-nodes-base.code",
      "position": [
        0,
        980
      ],
      "parameters": {
        "jsCode": "return $input.all();"
      },
      "typeVersion": 2
    }
  ],
  "connections": {
    "Code": {
      "main": [
        [
          {
            "node": "MongoDB",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "HTML": {
      "main": [
        [
          {
            "node": "Transform news to MD",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait": {
      "main": [
        [
          {
            "node": "HTTP Request2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code1": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code3": {
      "main": [
        [
          {
            "node": "MongoDB4",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code4": {
      "main": [
        [
          {
            "node": "MongoDB2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Code5": {
      "main": [
        [
          {
            "node": "MongoDB5",
            "type": "main",
            "i

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

How this works

This workflow automatically scans multiple RSS feeds for fresh tech stories, uses AI to classify their relevance and rewrite them as SEO-optimised blog posts, then publishes the finished articles straight to WordPress. It is aimed at busy content creators and site owners who need a steady stream of articles without spending hours on research and drafting. The critical step is the structured AI agent that turns raw news into publish-ready posts complete with headings and meta descriptions.

Use it when you want daily or weekly automated updates on specific topics but skip it if your brand voice is highly personal or the subject requires expert verification. Common variations include swapping the RSS sources for industry newsletters or adding a human approval node before publishing.

About this workflow

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.

Source: https://n8n.io/workflows/5230/ — 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

Most blogs publish words. This system publishes experiences.

OpenAI Chat, HTTP Request, Output Parser Structured +7
AI & RAG

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

HTTP Request, Html Extract, RSS Feed Read +9
AI & RAG

This workflow is designed for Japanese-speaking professionals, and learners who want to efficiently stay up to date with practical productivity, lifehack, and efficiency-related insights from Japanese

RSS Feed Read, Chain Llm, Google Gemini Chat +7
AI & RAG

The best content automation template in the market is now even better—with “deep research” on time-sensitive topics\! Unlike most n8n content automation templates that are mainly for “demo purposes,”

OpenAI, HTTP Request, XML +11