This workflow corresponds to n8n.io template #16381 — we link there as the canonical source.
This workflow follows the Agent → Google Sheets 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": "tH8rw3lxlxQ4eMDLQwGZh",
"name": "Generate Fresh Content Ideas from RSS Feeds, Past Content & AI",
"tags": [],
"nodes": [
{
"id": "c88f2a87-fc92-40f2-841e-059eacaa6705",
"name": "Schedule Trigger",
"type": "n8n-nodes-base.scheduleTrigger",
"position": [
-592,
272
],
"parameters": {
"rule": {
"interval": [
{
"field": "weeks",
"triggerAtHour": 11,
"triggerAtMinute": 30
}
]
}
},
"typeVersion": 1.3
},
{
"id": "1ccb24e4-3162-4a92-b1da-712cf1b9e9ab",
"name": "OpenAI Chat Model2",
"type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
"position": [
1472,
496
],
"parameters": {
"model": {
"__rl": true,
"mode": "list",
"value": "gpt-4o-mini",
"cachedResultName": "gpt-4o-mini"
},
"options": {
"temperature": 0.7
},
"builtInTools": {}
},
"credentials": {
"openAiApi": {
"name": "<your credential>"
}
},
"typeVersion": 1.3
},
{
"id": "9ef6793e-e266-443f-923d-284a2b01c34b",
"name": "Structured Output Parser",
"type": "@n8n/n8n-nodes-langchain.outputParserStructured",
"position": [
1616,
496
],
"parameters": {
"jsonSchemaExample": "{\n\"item_1\": { \"title\": \"Title Here\" },\n\"item_2\": { \"title\": \"Title Here\" },\n\"item_3\": { \"title\": \"Title Here\" },\n\"item_4\": { \"title\": \"Title Here\" },\n\"item_5\": { \"title\": \"Title Here\" },\n\"item_6\": { \"title\": \"Title Here\" },\n\"item_7\": { \"title\": \"Title Here\" },\n\"item_8\": { \"title\": \"Title Here\" },\n\"item_9\": { \"title\": \"Title Here\" },\n\"item_10\": { \"title\": \"Title Here\" },\n\"item_11\": { \"title\": \"Title Here\" },\n\"item_12\": { \"title\": \"Title Here\" }\n}"
},
"typeVersion": 1.3
},
{
"id": "dac4ea10-7d67-44c5-a7b1-e6f3a5d3f091",
"name": "Get exisiting Blog Titles",
"type": "n8n-nodes-base.googleSheets",
"position": [
0,
-112
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": "gid=0",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1t870jLFskMyjQ3_00FQyKUqBKsRMwsGyiCcasYLwpLc/edit#gid=0",
"cachedResultName": "Existing blogs"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1t870jLFskMyjQ3_00FQyKUqBKsRMwsGyiCcasYLwpLc",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1t870jLFskMyjQ3_00FQyKUqBKsRMwsGyiCcasYLwpLc/edit?usp=drivesdk",
"cachedResultName": "n8n Lab x 360 Marketing: Automated Blog Content Workflow"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "bbb1e377-8fe3-4177-8e62-f06590a8afad",
"name": "Get previous New Ideas",
"type": "n8n-nodes-base.googleSheets",
"position": [
0,
160
],
"parameters": {
"options": {},
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1760827952,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1t870jLFskMyjQ3_00FQyKUqBKsRMwsGyiCcasYLwpLc/edit#gid=1760827952",
"cachedResultName": "New ideas"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1t870jLFskMyjQ3_00FQyKUqBKsRMwsGyiCcasYLwpLc",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1t870jLFskMyjQ3_00FQyKUqBKsRMwsGyiCcasYLwpLc/edit?usp=drivesdk",
"cachedResultName": "n8n Lab x 360 Marketing: Automated Blog Content Workflow"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "9f79db94-73cb-43af-adce-82b25a637c57",
"name": "Set Titles",
"type": "n8n-nodes-base.set",
"position": [
320,
-112
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "af0eb46d-60f3-42f3-8f2d-8b54ebf606ce",
"name": "Blog Title",
"type": "string",
"value": "={{ $json.Title }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "56c7a8a6-1f46-4024-aea2-fb2622c98e3c",
"name": "Merge Titles",
"type": "n8n-nodes-base.merge",
"position": [
624,
16
],
"parameters": {},
"typeVersion": 3.2
},
{
"id": "43954b47-717f-4fce-9df2-f4f2a3b4c605",
"name": "Aggregate Titles",
"type": "n8n-nodes-base.aggregate",
"position": [
848,
16
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData",
"destinationFieldName": "n8nlabpastTitles"
},
"typeVersion": 1
},
{
"id": "f9584a2e-a93b-49fe-aa4c-d77b44f4afec",
"name": "Split Out New Ideas",
"type": "n8n-nodes-base.splitOut",
"position": [
1824,
272
],
"parameters": {
"options": {},
"fieldToSplitOut": "output"
},
"typeVersion": 1
},
{
"id": "78b8afd2-c976-4dde-bd40-a399bbcec73d",
"name": "New Ideas Generator",
"type": "@n8n/n8n-nodes-langchain.agent",
"maxTries": 4,
"position": [
1472,
272
],
"parameters": {
"text": "=###Our existing blog titles\n{{ $json.n8nlabpastTitles.map(item => item[\"Blog Title\"]).join('\\n') }}\n\n\n###RSS feed titles for inspo:\n{{ $json.rssTitles.map(item => item[\"rsstitles\"]).join('\\n') }}\n\n----------------\n\n#### Project Brief: Clear Signal Content Strategy & Branding Guidelines\n\n## Branding Guidelines\n* **Positioning:** Clear Signal must be positioned as top-tier, high-end experts in tracking and data infrastructure.\n* **Commercial Angle:** Every piece of content must have a practical, commercial angle that clearly highlights business impact (e.g., showing how bad conversion tracking directly leads to less profitable marketing campaigns).\n* **AI vs. Human Balance:** Mention that AI is utilized in our standard checks and ongoing quality controls. However, emphasize that every setup is custom and built around the client's specific project requirements. Manual expertise, human validation, and precise implementation are always mandatory parts of our process.\n > *Core Belief:* Relying solely on AI is one of the primary reasons tracking setups go wrong. AI can only ever be part of the solution.\n\n---\n\n## Tone of Voice\n* **Expert:** Authoritative, confident, and highly knowledgeable.\n* **Direct:** Straight to the point, zero fluff, and transparent.\n* **Technically Credible:** Highly knowledgeable but never academic or overcomplicated. \n* **Persona:** Sound like a senior tracking specialist explaining exactly what is broken, why it matters, and how to validate the fix.\n* **Jargon Guardrail:** Avoid highly specific technical jargon unless it directly explains a tangible business consequence.\n* **The Model:** Follow the exact layout of the current website\u2014practical training for marketers, audit findings stripped of complex jargon, and solution-first articles built entirely around diagnosis and QA.\n\n---\n\n## Target Audiences\n\n### 1. In-House Marketing Teams at Larger Companies\n* **Core Concerns:** * Ensuring Google Ads, GA4, Meta, CRM, and internal dashboards tell a single, coherent story.\n * Ensuring ad campaigns are optimizing on the correct data.\n * Allowing teams to act on correct reports immediately without debating whether the numbers are real.\n* **Ideal Content:** B2B case studies focusing on unified reporting, data governance, lifecycle-stage measurement, dashboards trusted blindly by leadership, and role-specific reporting (executives vs. operators).\n\n### 2. Agencies Seeking Technical Support\n* **Core Concerns:** Looking for a reliable technical partner to handle implementation so they can protect and focus heavily on ad campaign results.\n* **Ideal Content:** Position Clear Signal as a specialist extension of their delivery team. The partner that handles container cleanup, difficult debugging, consent implementation, conversion APIs (CAPI), deduplication, and thorough QA documentation.\n\n### 3. SMBs Wanting a Decent Setup (Basic or Advanced)\n* **Core Concerns:** Getting a clean, working infrastructure without wasted budget.\n* **Ideal Content:** Focus entirely on getting the tracking essentials right first, with a clear roadmap to expand into more advanced setups as the business and ad budgets scale up.\n\n---\n\n## Content Formats\n* **Primary Focus (Most Important):** Case studies analyzing actual tracking issues and mapping their direct impact on business/campaign performance.\n* **Deep-Dive Articles:** In-depth strategic and structural breakdowns.\n* **Checklists:** Highly actionable, quick wins (e.g., Quick GA4 implementation wins).\n* **Practical Education:** Training-oriented content tailored to help teams understand their systems.\n\n---\n\n## Core Editorial Principle\nEvery single article generated must explicitly answer these three questions:\n1. **What is broken?**\n2. **Why does it cost the business money?**\n3. **How can the reader verify whether they have the same problem?**\n\n### Content Restrictions & Priorities\n* **AVOID:**\n * Feature-focused articles with no business consequence.\n * Technical jargon that does not help explain a practical problem.\n * Generic \"best practices\" content that could apply to any random agency.\n* **PRIORITIZE:**\n * Audit findings and common implementation mistakes.\n * Reporting discrepancies and anomalies.\n * Validation and rigorous QA processes.\n * Clear, step-by-step remediation paths.\n\n> **Ultimate Goal:** Readers should finish every article knowing how to identify the issue on their own site, understand its financial impact, and take the first step toward fixing it\u2014which ideally leads to contacting us.\n\n### Standard Content Structure\n1. Start with a real, observable business problem.\n2. Quantify or explain the true commercial/financial impact.\n3. Explain the most likely technical causes in plain English.\n4. Provide a practical remediation path.\n5. **CTA:** Guide readers to a free audit, checklist, or template download rather than pushing a hard sales pitch.\n\n---\n\n## Priority Topics\nAlways center execution around the real business impact of tracking issues: inaccurate data leading to poor optimization, misleading reports, wasted budget, and flawed decisions.\n\n* **Why Google Ads is optimizing toward the wrong action:** Focus on duplicate lead tags, wrong primary/secondary conversion setup, and imported-versus-native conversion confusion. (Great for in-house teams and agencies).\n* **Why your Meta results look better than reality:** Focus on Pixel and CAPI double-counting, weak event match quality, and missing consent gating.\n* **Why GA4, your CRM, and your dashboard do not match:** Separate expected native platform differences from a broken setup. Explain when the data gap signals a real implementation failure.\n* **The minimum viable GDPR-safe GTM setup for paid media:** Explain consent defaults, consent updates, and what \u201ctags firing too early\u201d means in clear business terms.\n* **When server-side tracking is worth it (and when it is not):** Especially valuable for SMBs and agencies. Position server-side tracking as a response to real data degradation, not just a trendy default.\n* **How cross-domain tracking quietly breaks ecommerce and lead-gen reporting:** Highlight real-world checkout hops, third-party payment gateways, and external booking or form tools.\n* **Why \u201cmore conversions\u201d can mean worse data:** Focus on inflation loops, accidental page-load triggers, duplicate submissions, and dashboards that make wasted spend look like massive success.\n\n---\n\n## Specific Blog Deep Dives\n\n### 1. Inflated B2B Leads in Google Ads\n* **The Problem:** Duplicate tags on form submissions and inflated lead counts cause poor smart bidding optimization because the ad account cannot separate qualified leads from junk noise.\n* **Remediation Angle:** Clean the GTM container, strictly categorize primary vs. observation-only conversions, add enhanced conversions/offline conversion tracking (OCT), and feed downstream CRM lifecycle stages back into Google Ads so automated bidding optimizes for qualified opportunities rather than raw form fills.\n\n### 2. Meta Pixel and CAPI Double-Counting\n* **The Problem:** One of the most common causes of inflated Meta reporting is duplicate event collection between browser pixel and server-side tracking without proper deduplication. This overstates ROAS and forces the platform to learn from bad data.\n* **Remediation Angle:** Explain how duplicate reporting happens and how it hurts campaign optimization. Teach teams how to verify that deduplication is working via Events Manager. Show them how to generate a unique event ID per user action, pass it through GTM, and send it identically through both the browser and server request.\n\n### 3. Consent Setup: Legally Risky or Commercially Broken\n* **The Problem:** Poor CMP (Consent Management Platform) and GTM implementations create severe compliance risks and avoidable reporting losses. Common issues include tags firing before consent updates, vendors dropping cookies regardless of state, and missing default consent states.\n* **Remediation Angle:** Explain how Clear Signal\u2019s consent structures actively prevent these errors. Focus on real-world implementation failures while avoiding legal absolutism. Encourage readers to validate compliance requirements with legal counsel.\n\n### 4. Cross-Domain, Regional, or Long-Sales-Cycle Attribution Breaks\n* **The Problem:** Cross-domain tracking, multi-region setups, and long sales cycles fragment customer journeys across platforms, separate domains, and reporting systems, rendering data completely unreliable.\n* **Remediation Angle:** Focus heavily on identifying exactly where the attribution chain breaks, showing how reporting becomes untrustworthy, and demonstrating the precise validation processes needed to restore complete confidence in data reporting.\n\n---\n\n## Overview Table & Asset Roadmap\n\n| Content Type | Suggested Length | Purpose | Primary Audience | Priority |\n| :--- | :--- | :--- | :--- | :--- |\n| **Core blog article** | 1,400\u20131,800 words | Explain the real financial cost of broken tracking across Google Ads, Meta, GA4, and GTM. | All three audiences | High |\n| **Problem-solution blog** | 1,200\u20131,600 words | Show how bad primary conversion setups distort automated Google Ads bidding. | In-house teams, agencies | High |\n| **Problem-solution blog** | 1,200\u20131,600 words | Explain Meta Pixel + CAPI double-counting and practical QA steps to verify deduplication. | In-house teams, agencies | High |\n| **Practical SMB guide** | 900\u20131,200 words | Define what a clean, reliable \"decent setup\" looks like without overengineering the infrastructure. | SMBs | High |\n| **Downloadable checklist** | 1\u20132 pages | A 25-point tracking QA checklist / pre-scale audit framework to serve as a high-value lead magnet. | All three audiences | High |\n| **Short explainer / FAQ** | 800\u20131,100 words | Break down Basic vs. Advanced Consent Mode in plain, non-legal English. | All three audiences | Medium |\n| **Reporting template article** | 900\u20131,200 words | Teach internal teams how to map and label data mismatches across GA4, Ads, and their CRM. | In-house teams | Medium |\n\n### CTA Progression Framework\nEvery single asset must guide the reader through a logical progression:\n1. **Diagnose** the problem through the text.\n2. **Offer** a highly practical, immediate checklist or template download to capture the lead.\n3. **Invite** the reader directly into a manual audit or standard scoping conversation with Clear Signal.",
"options": {
"systemMessage": "=You are an expert Content Strategist for Clear Signal. Your goal is to analyze provided brand parameters, existing assets, and industry signals to engineer high-converting, strategically aligned content ideas.\n\n## TASKS\n\n1. Project Brief Alignment: Deeply analyze the tracking infrastructure, data governance, and analytics project brief provided in your input prompt. Every generated idea must map directly to its core editorial principles (What is broken? Why does it cost money? How to verify?).\n\n2. Deduplication & Style Matching: Closely review the list of existing blog titles provided in your input prompt. You must perfectly replicate their tone, technical density, and specific audience angles, but you are strictly forbidden from repeating any existing topics or angles. All ideas must be entirely original.\n\n3. Trend Synthesis: Evaluate the raw RSS feed research titles provided in your input prompt. Take inspiration from these industry trends (such as data degradation, privacy changes, platform updates) and translate them through the lens of Clear Signal's custom, human-validated tracking and QA methodology.\n\n4. Ideation: Generate exactly 12 NEW, high-quality, problem-solution blog titles targeted precisely at Clear Signal's core audiences (In-house teams, Agencies seeking tech support, and SMBs) as outlined in your input prompt.\n\n## OUTPUT REQUIREMENTS\n- Output exactly 12 items.\n- Return ONLY a valid JSON object.\n- Do not include any intro, outro, markdown formatting, or text outside the JSON. Response must start with { and end with }.\n\n## JSON STRUCTURE\n{\n \"item_1\": { \"title\": \"Title Here\" },\n \"item_2\": { \"title\": \"Title Here\" },\n \"item_3\": { \"title\": \"Title Here\" },\n \"item_4\": { \"title\": \"Title Here\" },\n \"item_5\": { \"title\": \"Title Here\" },\n \"item_6\": { \"title\": \"Title Here\" },\n \"item_7\": { \"title\": \"Title Here\" },\n \"item_8\": { \"title\": \"Title Here\" },\n \"item_9\": { \"title\": \"Title Here\" },\n \"item_10\": { \"title\": \"Title Here\" },\n \"item_11\": { \"title\": \"Title Here\" },\n \"item_12\": { \"title\": \"Title Here\" }\n}"
},
"promptType": "define",
"hasOutputParser": true
},
"retryOnFail": true,
"typeVersion": 3.1,
"waitBetweenTries": 5000
},
{
"id": "99e2258b-eddc-4dba-ae27-c5d0da18149a",
"name": "Add New Ideas in Sheet",
"type": "n8n-nodes-base.googleSheets",
"position": [
2064,
272
],
"parameters": {
"columns": {
"value": {
"AI Blog Title": "={{ $json.title }}"
},
"schema": [
{
"id": "AI Blog Title",
"type": "string",
"display": true,
"required": false,
"displayName": "AI Blog Title",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Key Points",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Key Points",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "PICK",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "PICK",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Done",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Done",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "ARTICLE",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "ARTICLE",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Image 1",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Image 1",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Image 2",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Image 2",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Published",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Published",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "LN Post",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "LN Post",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Date added",
"type": "string",
"display": true,
"removed": true,
"required": false,
"displayName": "Date added",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Column 1",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Column 1",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Column 2",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Column 2",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Column 3",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Column 3",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Column 4",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Column 4",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Column 5",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Column 5",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Column 6",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Column 6",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Column 7",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Column 7",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Column 8",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Column 8",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Column 9",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Column 9",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Column 10",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Column 10",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Column 11",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Column 11",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Column 12",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Column 12",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Column 13",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Column 13",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Column 14",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Column 14",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Column 15",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Column 15",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Column 16",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Column 16",
"defaultMatch": false,
"canBeUsedToMatch": true
},
{
"id": "Column 17",
"type": "string",
"display": true,
"removed": false,
"required": false,
"displayName": "Column 17",
"defaultMatch": false,
"canBeUsedToMatch": true
}
],
"mappingMode": "defineBelow",
"matchingColumns": [
"row_number"
],
"attemptToConvertTypes": false,
"convertFieldsToString": false
},
"options": {},
"operation": "append",
"sheetName": {
"__rl": true,
"mode": "list",
"value": 1760827952,
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1t870jLFskMyjQ3_00FQyKUqBKsRMwsGyiCcasYLwpLc/edit#gid=1760827952",
"cachedResultName": "New ideas"
},
"documentId": {
"__rl": true,
"mode": "list",
"value": "1t870jLFskMyjQ3_00FQyKUqBKsRMwsGyiCcasYLwpLc",
"cachedResultUrl": "https://docs.google.com/spreadsheets/d/1t870jLFskMyjQ3_00FQyKUqBKsRMwsGyiCcasYLwpLc/edit?usp=drivesdk",
"cachedResultName": "n8n Lab x 360 Marketing: Automated Blog Content Workflow"
}
},
"credentials": {
"googleSheetsOAuth2Api": {
"name": "<your credential>"
}
},
"typeVersion": 4.7
},
{
"id": "7bb46f4c-afaa-41a9-acc4-324fb822b20d",
"name": "Set relevant Urls for RSS",
"type": "n8n-nodes-base.code",
"position": [
-224,
448
],
"parameters": {
"jsCode": "return [\n // Core SEO & Link Building\n { json: { \"links\": \"https://ahrefs.com/blog/feed\" } },\n \n // Technical & Inbound SEO\n { json: { \"links\": \"https://moz.com/posts/rss/blog\" } },\n \n // Search Trends, PPC & Conversion Optimization\n { json: { \"links\": \"https://semrush.com/blog/feed\" } },\n \n // On-Page Optimization & Content Marketing Basics\n { json: { \"links\": \"https://yoast.com/feed\" } },\n \n // Real-Time Search News & Google Algorithm Updates\n { json: { \"links\": \"https://www.searchenginejournal.com/feed\" } }\n];"
},
"typeVersion": 2
},
{
"id": "7bcbf223-d1ee-448f-bd59-ee5ecb8e8d36",
"name": "RSS Reader",
"type": "n8n-nodes-base.rssFeedRead",
"onError": "continueErrorOutput",
"position": [
0,
448
],
"parameters": {
"url": "={{ $json.links }}",
"options": {}
},
"typeVersion": 1.2
},
{
"id": "49d8a16c-0e8f-45e6-becb-e12bc6b90fa0",
"name": "Contains relevant Keywords",
"type": "n8n-nodes-base.if",
"position": [
224,
448
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "or",
"conditions": [
{
"id": "35d57755-d173-4150-89b2-c3744e6b85a1",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $json.title }}",
"rightValue": "n8n"
},
{
"id": "627721e1-14fc-4f7c-9ca7-a8a190324329",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $json[\"content:encoded\"] }}",
"rightValue": "n8n"
},
{
"id": "ad2f165a-b4d5-4307-9384-bcc11974040c",
"operator": {
"type": "string",
"operation": "contains"
},
"leftValue": "={{ $json.content }}",
"rightValue": "n8n"
}
]
}
},
"typeVersion": 2.3
},
{
"id": "2dff6cef-97bd-4ba2-bdb4-77950c5f0b2d",
"name": "Published last 30 days",
"type": "n8n-nodes-base.if",
"position": [
448,
448
],
"parameters": {
"options": {},
"conditions": {
"options": {
"version": 3,
"leftValue": "",
"caseSensitive": true,
"typeValidation": "strict"
},
"combinator": "and",
"conditions": [
{
"id": "45d01fb4-501c-466f-9ca7-5f7d37ceafd2",
"operator": {
"type": "dateTime",
"operation": "after"
},
"leftValue": "={{ $json.pubDate }}",
"rightValue": "={{ $now.minus({ days: 30 }).toFormat('yyyy-MM-dd 00:00:00') }}"
}
]
}
},
"typeVersion": 2.3
},
{
"id": "de2cff4f-a95d-4e3a-9860-b6fffc7a0a63",
"name": "Set RSS Titles",
"type": "n8n-nodes-base.set",
"position": [
672,
448
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "89f1078e-2dfd-484e-82c2-c984afc3009c",
"name": "rsstitles",
"type": "string",
"value": "={{ $json.title }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "9a4955a8-b37b-4533-8693-5eed5ba4d8aa",
"name": "Aggregate Titles 2",
"type": "n8n-nodes-base.aggregate",
"position": [
880,
448
],
"parameters": {
"options": {},
"aggregate": "aggregateAllItemData",
"destinationFieldName": "rssTitles"
},
"typeVersion": 1
},
{
"id": "b4e71175-d6cb-47ee-97dd-3aa04fc62cf9",
"name": "Merge our Titles with RSS Titles",
"type": "n8n-nodes-base.merge",
"position": [
1168,
272
],
"parameters": {
"mode": "combine",
"options": {},
"combineBy": "combineByPosition"
},
"typeVersion": 3.2
},
{
"id": "778b6a88-7d40-41cc-bc30-c52f2f714149",
"name": "Set Titles 2",
"type": "n8n-nodes-base.set",
"position": [
320,
160
],
"parameters": {
"options": {},
"assignments": {
"assignments": [
{
"id": "af0eb46d-60f3-42f3-8f2d-8b54ebf606ce",
"name": "Blog Title",
"type": "string",
"value": "={{ $json['AI Blog Title'] }}"
}
]
}
},
"typeVersion": 3.4
},
{
"id": "9bcccc1e-2acb-4164-85b7-be191f22bed9",
"name": "Sticky Note",
"type": "n8n-nodes-base.stickyNote",
"position": [
-304,
384
],
"parameters": {
"color": 7,
"width": 1344,
"height": 288,
"content": "### 3. Fetch Fresh Ideas from RSS \nScrape selected RSS feeds, filter posts by relevant keywords and recent publish dates, and aggregate those titles.\n\n"
},
"typeVersion": 1
},
{
"id": "948b6213-f143-44d7-846b-29c988c71684",
"name": "Sticky Note2",
"type": "n8n-nodes-base.stickyNote",
"position": [
-736,
176
],
"parameters": {
"color": 7,
"width": 368,
"height": 256,
"content": "### 1. Scheduled Trigger \nRun this workflow on a weekly schedule to refresh and generate new content ideas automatically."
},
"typeVersion": 1
},
{
"id": "cc5c38e8-b7d7-4666-a78e-e5a478890e3c",
"name": "Sticky Note3",
"type": "n8n-nodes-base.stickyNote",
"position": [
-112,
-224
],
"parameters": {
"color": 7,
"width": 1104,
"height": 560,
"content": "### 2. Collect Existing Ideas from Sheets \nFetch existing blog titles and previously generated ideas from Google Sheets and merge them into a single list.\n"
},
"typeVersion": 1
},
{
"id": "56216ebc-f4e0-4b58-96d2-da673143bbcb",
"name": "Sticky Note7",
"type": "n8n-nodes-base.stickyNote",
"position": [
1088,
208
],
"parameters": {
"color": 7,
"width": 1104,
"height": 224,
"content": "### 4. AI Idea Generation & Sheet Update \nCombine all titles, send them to AI to generate new content ideas (e.g., 12 suggestions), and write the formatted ideas back into a Google Sheet.\n"
},
"typeVersion": 1
},
{
"id": "3417746e-d1df-4800-99ae-8afd6f3ddecd",
"name": "Sticky Note1",
"type": "n8n-nodes-base.stickyNote",
"position": [
-1328,
-256
],
"parameters": {
"color": 7,
"width": 544,
"height": 1232,
"content": "# AI\u2011Assisted Content Ideation with Google Sheets, RSS & n8n\n\nThis workflow is designed to keep your content pipeline full of relevant ideas without manual research. It runs on a schedule (for example, once per week), pulls your existing ideas from Google Sheets, discovers fresh topics from curated RSS feeds, and uses AI to generate a new batch of content ideas that are automatically stored in a dashboard spreadsheet.\n\n## Core Purpose & Value\n\nInstead of manually checking blogs, RSS feeds, and old documents for inspiration, this automation centralizes and refreshes your idea backlog. By combining your past content ideas with what is currently being published in your niche, it surfaces topics that are both on\u2011brand and up\u2011to\u2011date. This helps content and marketing teams spend less time on research and more time actually producing content.\n\n## How the Workflow Works\n\n- The **schedule trigger** starts the workflow on a regular cadence (such as weekly) so ideas stay current. \n- One branch **reads existing blog titles** from a Google Sheet and pulls in any **previous new ideas** that AI generated, merging them together into a single list. \n- Another branch **scrapes selected RSS feeds**, filters entries by relevant keywords and recent publish dates (for example, last 30 days), and aggregates the most relevant titles. \n- All titles from Sheets and RSS are **merged and sent to an AI model**, which generates a defined number of new ideas (e.g., 12) based on your context and style. \n- The AI output is **parsed, formatted, and written back into a Google Sheet**, creating an up\u2011to\u2011date \u201cNew Ideas\u201d tab that you can use as a content planning dashboard or swap out for Airtable if preferred.\n\n## How Users Can Work With It\n\nUse the resulting Google Sheet as your central idea backlog for blogs, newsletters, or social content. Each time the workflow runs, you get a fresh batch of ideas influenced by your existing content direction and what is trending in your space. You can adjust RSS sources, keyword filters, AI prompts, and output volume to match your content strategy, then pull from the sheet whenever you plan your next content sprint.\n\n## Tool Stack\n\n- **n8n** \u2013 orchestrates the schedule, branches, and data flow \n- **Google Sheets** \u2013 stores past ideas and receives new AI\u2011generated ideas \n- **RSS feeds** \u2013 provide fresh, external content topics from relevant sites \n- **OpenAI (or another LLM)** \u2013 generates new content ideas from merged titles"
},
"typeVersion": 1
}
],
"active": false,
"settings": {
"availableInMCP": false,
"executionOrder": "v1"
},
"versionId": "c8d0a301-a447-4a9f-bb4e-924982ae5bcc",
"connections": {
"RSS Reader": {
"main": [
[
{
"node": "Contains relevant Keywords",
"type": "main",
"index": 0
}
]
]
},
"Set Titles": {
"main": [
[
{
"node": "Merge Titles",
"type": "main",
"index": 0
}
]
]
},
"Merge Titles": {
"main": [
[
{
"node": "Aggregate Titles",
"type": "main",
"index": 0
}
]
]
},
"Set Titles 2": {
"main": [
[
{
"node": "Merge Titles",
"type": "main",
"index": 1
}
]
]
},
"Set RSS Titles": {
"main": [
[
{
"node": "Aggregate Titles 2",
"type": "main",
"index": 0
}
]
]
},
"Aggregate Titles": {
"main": [
[
{
"node": "Merge our Titles with RSS Titles",
"type": "main",
"index": 0
}
]
]
},
"Schedule Trigger": {
"main": [
[
{
"node": "Get exisiting Blog Titles",
"type": "main",
"index": 0
},
{
"node": "Set relevant Urls for RSS",
"type": "main",
"index": 0
},
{
"node": "Get previous New Ideas",
"type": "main",
"index": 0
}
]
]
},
"Aggregate Titles 2": {
"main": [
[
{
"node": "Merge our Titles with RSS Titles",
"type": "main",
"index": 1
}
]
]
},
"OpenAI Chat Model2": {
"ai_languageModel": [
[
{
"node": "New Ideas Generator",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"New Ideas Generator": {
"main": [
[
{
"node": "Split Out New Ideas",
"type": "main",
"index": 0
}
]
]
},
"Split Out New Ideas": {
"main": [
[
{
"node": "Add New Ideas in Sheet",
"type": "main",
"index": 0
}
]
]
},
"Get previous New Ideas": {
"main": [
[
{
"node": "Set Titles 2",
"type": "main",
"index": 0
}
]
]
},
"Published last 30 days": {
"main": [
[
{
"node": "Set RSS Titles",
"type": "main",
"index": 0
}
]
]
},
"Structured Output Parser": {
"ai_outputParser": [
[
{
"node": "New Ideas Generator",
"type": "ai_outputParser",
"index": 0
}
]
]
},
"Get exisiting Blog Titles": {
"main": [
[
{
"node": "Set Titles",
"type": "main",
"index": 0
}
]
]
},
"Set relevant Urls for RSS": {
"main": [
[
{
"node": "RSS Reader",
"type": "main",
"index": 0
}
]
]
},
"Contains relevant Keywords": {
"main": [
[
{
"node": "Published last 30 days",
"type": "main",
"index": 0
}
],
[]
]
},
"Merge our Titles with RSS Titles": {
"main": [
[
{
"node": "New Ideas Generator",
"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.
googleSheetsOAuth2ApiopenAiApi
For the full experience including quality scoring and batch install features for each workflow upgrade to Pro
About this workflow
This workflow runs weekly to pull existing blog titles and prior AI ideas from Google Sheets, gathers recent keyword-matching headlines from multiple RSS feeds, uses OpenAI to generate 12 fresh blog title ideas, and appends the results back into a “New ideas” Google Sheet. Runs…
Source: https://n8n.io/workflows/16381/ — original creator credit. Request a take-down →
Related workflows
Workflows that share integrations, category, or trigger type with this one. All free to copy and import.
This n8n template automatically curates AI news from RSS feeds and generates platform-tailored social media posts using GPT-5 mini. Posts are saved as drafts in Cue for review before publishing to X,
Be first. Be relevant. Get hired. This ready-to-import n8n workflow automates your entire Freelancer.com job search: it scans new listings, filters the best ones with AI, writes proposal drafts, and s
⚠️ DISCLAIMER: This workflow uses the AnySite LinkedIn community node, which is only available on self-hosted n8n instances. It will not work on n8n.cloud.
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.
This n8n automation workflow automates the creation, scripting, production, and posting of YouTube videos. It leverages AI (OpenAI), image generation (PIAPI), video rendering (Shotstack), and platform