AutomationFlowsAI & RAG › Multi-agent Linkedin Content Creation with Gpt-4o, Google Sheets, and Human…

Multi-agent Linkedin Content Creation with Gpt-4o, Google Sheets, and Human…

Original n8n title: Multi-agent Linkedin Content Creation with Gpt-4o, Google Sheets, and Human Review

ByAilin Werner @ailinwerner on n8n.io

Description: This is a Production-Grade Multi-Agent Content Engine designed for creators who prioritize technical authority over generic AI output.

Cron / scheduled trigger★★★★☆ complexityAI-powered25 nodesOutput Parser StructuredAgentGmailGoogle SheetsOpenAI ChatError Trigger
AI & RAG Trigger: Cron / scheduled Nodes: 25 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Agent → Error Trigger 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": "a6297e94-2aa2-4fb6-be81-c12d31fbac78",
      "name": "Structured Output Parser",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        816,
        288
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"candidates\": [\n    {\n      \"topic\": \"\",\n      \"difficulty\": \"\",\n      \"why\": \"\"\n    }\n  ],\n  \"selected_topic\": {\n    \"topic\": \"\",\n    \"difficulty\": \"\",\n    \"reason\": \"\"\n  }\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "fc5fca93-031b-429d-9bee-71a37b2ac73b",
      "name": "Structured Output Parser1",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        1168,
        288
      ],
      "parameters": {
        "jsonSchemaExample": "{\n  \"problem\": \"\",\n  \"when_it_matters\": \"\",\n  \"core_idea\": \"\",\n  \"practical_approach\": [\n    \"\",\n    \"\",\n    \"\"\n  ],\n  \"common_mistake\": \"\",\n  \"result\": \"\"\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "47e8a5ed-57e1-4459-8e2e-f141d02f6ba6",
      "name": "Weekly Post Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        0,
        64
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "weeks",
              "triggerAtDay": [
                1
              ],
              "triggerAtHour": 10,
              "triggerAtMinute": 15
            }
          ]
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "ed53ea93-89f3-4366-b7ed-f535e486e1d2",
      "name": "Structure & Logic Designer",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "notes": "Builds the technical blueprint (The 'Why').",
      "position": [
        1024,
        64
      ],
      "parameters": {
        "text": "=Topic: > {{ $json.output.selected_topic.topic }}\n\nTechnical Difficulty: > {{ $json.output.selected_topic.difficulty }}\n\nContext & Value: > {{ $json.output.selected_topic.reason }}\n\nInstruction: Generate the Structure Blueprint using the sections defined in your System Message. Ensure the depth matches the \"{{ $json.output.selected_topic.difficulty }}\" level.",
        "options": {
          "systemMessage": "Role: You are a Senior n8n Solutions Architect and Educator.\n\nTask: Create a technical \"Teaching Blueprint\" for a high-authority LinkedIn post based on the provided topic. You do NOT write the final copy; you define the logical skeleton that ensures the reader learns how to architect a solution, not just click buttons.\n\nRules:\n1. Focus on \"The Why\": Explain the logic behind the solution, not just the steps.\n2. Technical Depth: Identify 1-2 \"Advanced Nodes\" or features essential for this workflow (e.g., Error Trigger, Code Node, Merge [Wait for All], or Wait nodes for rate-limiting).\n3. Production-Ready Advice: Include a \"Resiliency Tip\" in the Common Mistake section (e.g., handling timeouts or schema drift).\n4. Expert Tone: Avoid marketing fluff (\"unlock,\" \"revolutionary\"). Use engineering terms: \"idempotency,\" \"scalability,\" \"state management,\" and \"error handling.\"\n5. Formatting: Write in Sentence Case. Only capitalize the first letter of sentences and proper nouns (n8n, API names).\n\nStructure Requirements: \n\u2022 The Problem: The specific pain point or technical bottleneck. \n\u2022 Real-World Context: When this specific architecture is mandatory (e.g., high-volume production). \n\u2022 Core Concept: The \"Mental Model\" the reader needs to understand the solution. \n\u2022 Architectural Approach: 3-4 high-level engineering steps. Mention the \"Advanced Nodes\" here. \n\u2022 The \"Silent Killer\": A common mistake that breaks this workflow in production. \n\u2022 The Result: The business or technical outcome of a resilient build."
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "notesInFlow": true,
      "typeVersion": 3
    },
    {
      "id": "7b4b261f-a514-431a-8b78-9de33b507471",
      "name": "Draft Copywriter",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "notes": "Enforces branding & kills AI fluff.",
      "position": [
        1376,
        64
      ],
      "parameters": {
        "text": "=Write a LinkedIn post using the following raw data. Follow the structure strictly:\n\nProblem: \n{{ $json.output.problem }}\n\nWhen it matters: \n{{ $json.output.when_it_matters }}\n\nCore idea: \n{{ $json.output.core_idea }}\n\nPractical approach: \n{{ Array.isArray($json.output.architectural_approach) ? $json.output.architectural_approach.join(\"\\n- \") : $json.output.architectural_approach }}\n\nCommon mistake: \n{{ $json.output.silent_killer }}\n\nResult: \n{{ $json.output.result }}\n\nFinal Instruction: End the post with a light open question CTA",
        "options": {
          "systemMessage": "You are a world-class n8n Automation Expert and LinkedIn Content Creator. Your goal is to turn technical data into high-engagement \"authority\" posts.\n\nSTRICT WRITING RULES:\n1. NO INTROS: Do not start with \"Here is your post\" or \"Sure thing.\" Start immediately with the Hook.\n2. HOOK: Create a punchy, 1-line opening that highlights a pain point or a controversial opinion about automation.\n3. SCANNABILITY: Use frequent line breaks. No paragraph should be longer than 2 sentences.\n4. TONE: Direct, professional, and helpful. Use \"Ambassador\" language: talk about \"production-ready,\" \"scalability,\" and \"resilient workflows.\"\n5. FORMATTING: Use bullet points (\u2022) for lists. Ensure there is a blank line between every section.\n6. NO EMOJI OVERLOAD: Use max 2-3 emojis in the entire post.\n7. When mentioning the Practical Approach, explicitly name the n8n nodes involved (e.g., 'Use the Webhook Node to...')."
        },
        "promptType": "define"
      },
      "notesInFlow": true,
      "typeVersion": 3
    },
    {
      "id": "f65da286-cea7-4721-8969-e9d3a49199de",
      "name": "Human Approval (Gmail)",
      "type": "n8n-nodes-base.gmail",
      "onError": "continueErrorOutput",
      "position": [
        2080,
        64
      ],
      "parameters": {
        "sendTo": "user@example.com",
        "message": "=<strong>Ready for LinkedIn: {{ $('Deduplication & Topic Selector').item.json.output.selected_topic.topic }}</strong>\n\n{{ $json.output }}",
        "options": {
          "limitWaitTime": {
            "values": {
              "resumeAmount": 48
            }
          },
          "appendAttribution": false
        },
        "subject": "=Ready for LinkedIn: {{ $('Deduplication & Topic Selector').item.json.output.selected_topic.topic }}",
        "operation": "sendAndWait",
        "approvalOptions": {
          "values": {
            "approvalType": "double"
          }
        }
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "6aa4c206-cc5a-4577-8f7b-78e87203012c",
      "name": "Log Published Content",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        2304,
        -32
      ],
      "parameters": {
        "columns": {
          "value": {
            "Date": "={{ $now.toFormat(\"dd-MM-yyyy\") }}",
            "Topic": "={{ $items(\"Deduplication & Topic Selector\")[0].json.output.selected_topic.topic }}",
            "Status": "Drafted",
            "Content": "={{ $('Style & Compliance Editor').item.json.output }}",
            "Difficulty": "={{ $items(\"Deduplication & Topic Selector\")[0].json.output.selected_topic.difficulty }}"
          },
          "schema": [
            {
              "id": "Topic",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Topic",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Content",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Content",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Date",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Date",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "LinkedIn URL",
              "type": "string",
              "display": true,
              "removed": true,
              "required": false,
              "displayName": "LinkedIn URL",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Difficulty",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Difficulty",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "REPLACE_WITH_YOUR_SHEET_ID"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "REPLACE_WITH_YOUR_SHEET_ID"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "cd4d2853-cee3-4b4b-8bec-1366b22058bc",
      "name": "Retrieve Post History & Ideas",
      "type": "n8n-nodes-base.googleSheets",
      "position": [
        224,
        64
      ],
      "parameters": {
        "options": {},
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "REPLACE_WITH_YOUR_SHEET_ID"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "REPLACE_WITH_YOUR_SHEET_ID"
        }
      },
      "credentials": {
        "googleSheetsOAuth2Api": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.7
    },
    {
      "id": "fb548d41-52c5-4565-9098-8b13805091c3",
      "name": "Deduplication & Topic Selector",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "notes": "Ensures we never post the same thing twice.",
      "position": [
        672,
        64
      ],
      "parameters": {
        "text": "=Here is my posting history in JSON format.\nEach item includes Topic, Status, and Difficulty.\n\n{{ JSON.stringify($input.all().map(item => ({\n  topic: item.json.Topic,\n  status: item.json.Status,\n  difficulty: item.json.Difficulty\n}))) }}\n\nBased on this history:\n1. Propose 3 new topic ideas that do not overlap with the history.\n2. Assign a difficulty to each.\n3. Briefly explain why each topic is valuable for an n8n user.\n4. Select the best ONE topic to post this week and explain your choice.",
        "options": {
          "systemMessage": "You are an n8n expert and educator.\n\nYour task is to propose ONE weekly LinkedIn \u201chow-to\u201d topic about n8n.\nThe goal is to build authority and attract n8n users.\n\nRules:\n- Do not repeat previously used topics.\n- Prefer practical, experience-based problems.\n- Focus on teaching how to think, not just which nodes to click.\n- Audience: beginner to intermediate n8n users.\n- Topics should be concrete and specific.\n- Avoid generic topics like \u201cWhat is n8n\u201d.\n- Write the following response in Sentence Case. Only capitalize the first letter of the sentence and proper nouns like names or places."
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "notesInFlow": true,
      "typeVersion": 3
    },
    {
      "id": "c073dc0d-a408-4e37-93d9-0b741347a2d6",
      "name": "Style & Compliance Editor",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "notes": "Closes the loop by updating memory for next week.",
      "position": [
        1728,
        64
      ],
      "parameters": {
        "text": "=Please review and edit the following LinkedIn post according to your strict branding and formatting rules:\n\n{{ $json.output }}",
        "options": {
          "systemMessage": "You are a Senior Technical Editor specializing in n8n and enterprise automation. Your role is to polish LinkedIn posts to ensure they sound like they were written by a top-tier industry expert (Ambassador level).\n\nSTRICT EDITING RULES:\n1. NO EM DASHES: You must never use an em dash (\u2014). \n2. DASH SPACING: Replace any em dashes or tight hyphens with a spaced hyphen: \"word - word\". This is a non-negotiable branding requirement.\n3. REMOVE \"FOLLOW\" CTAs: Delete any requests for the reader to follow, like, or subscribe. The value of the content should speak for itself.\n4. EXPERT SIGN-OFF: Replace the deleted CTA with a confident, technical closing statement that highlights the power of n8n.\n5. HASHTAGS: End every post with exactly these three hashtags: #n8n #automation #lowcode.\n6. NO INTRO/OUTRO: Output only the final edited post. Do not include phrases like \"Here is the revised version.\"\n7. KILL AI FLUFF: Eliminate these words/phrases: \"unlock,\" \"harness,\" \"revolutionary,\" \"dive deep,\" \"game changer,\" \"seamlessly,\" \"mastering,\" \"look no further.\"\n8. STRATEGIC ENGAGEMENT (OPTIONAL): Occasionally (about 50% of the time), end with a high-level question that invites technical discussion (e.g., about global error states or node-level handling).\n9. Remove all the styles (bold, italic, etc) from the post.\n10. Rule: If the text mentions 'Function Node,' replace it with 'Code Node' to stay aligned with the latest n8n versioning.\n\nTONE & VOICE:\n- Professional, direct, and slightly technical.\n- Use \"white space\" between every section to ensure mobile readability.\n- Use bullet points (\u2022) for practical steps.\n\nIf the input text already follows these rules, simply ensure the spacing and dashes are perfect and return it."
        },
        "promptType": "define"
      },
      "notesInFlow": true,
      "typeVersion": 3
    },
    {
      "id": "955e7dc4-bf76-4b23-a215-c9ab78de7114",
      "name": "Brain: Topic Analyst (GPT-4o-mini)",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        640,
        288
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o-mini",
          "cachedResultName": "gpt-4o-mini"
        },
        "options": {
          "temperature": 0.4
        },
        "builtInTools": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "e2d3f21a-ae90-4e58-99a5-cd6359ddfaac",
      "name": "Brain: Content Architect (GPT-4o)",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1008,
        288
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o",
          "cachedResultName": "gpt-4o"
        },
        "options": {
          "temperature": 0.3
        },
        "builtInTools": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "e72829f3-0f00-4387-a0bd-5d479a815308",
      "name": "Brain: Creative Writer (GPT-4o)",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1456,
        288
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o",
          "cachedResultName": "gpt-4o"
        },
        "options": {
          "temperature": 0.5
        },
        "builtInTools": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "67c84921-9c50-43c4-b7b2-c4886c5958df",
      "name": "Brain: Formatting Police (GPT-4o)",
      "type": "@n8n/n8n-nodes-langchain.lmChatOpenAi",
      "position": [
        1808,
        288
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "gpt-4o",
          "cachedResultName": "gpt-4o"
        },
        "options": {},
        "builtInTools": {}
      },
      "credentials": {
        "openAiApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "e3c5b370-de1f-42fd-b97e-bc88b4cfa8c8",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -32,
        -816
      ],
      "parameters": {
        "width": 864,
        "height": 720,
        "content": "## [PRO] n8n Content Architect: Multi-Agent Engine\n**Goal:** Generate high-authority, \"Sentence Case\" LinkedIn content while ensuring topic variety and technical depth.\n\n**Workflow Logic:**\n\n**Contextual Memory:** Scans history via Google Sheets to prevent repetitive topics.\n\n**Architectural Blueprinting:** Separates technical logic from creative writing.\n\n**Branding Compliance:** Enforces spaced-hyphens and strips AI \"fluff.\"\n\n**Human-in-the-Loop (Gmail):** Sends the final copy to Gmail for manual review, image pairing, and publishing.\n\n**Why the Manual Step?** To maintain \"Ambassador-level\" quality, the final post is reviewed in Gmail. This allows for:\n\n**Visual Curation:** Pairing the high-quality technical copy with a custom, non-AI image.\n\n**Final Nuance:** A final human \"sanity check\" before going live.\n\n**Resiliency & Error Handling:**\n\n**- Automatic Timeout:** If the Gmail draft isn't approved within 48 hours, the execution closes gracefully to save system resources.\n\n**- Error Monitoring:** A global Error Trigger is included to notify you immediately if any API or AI model fails.\n\n**- Memory Integrity:** Topics are only logged to the \"History\" sheet after human approval, ensuring your content queue remains accurate.\n\n**Setup Requirements:**\n\n**Google Sheets:** Connect a sheet with Topic, Status, and Difficulty columns.\n\n**AI Models:** Connect OpenAI (GPT-4o and GPT-4o-mini).\n\n**Gmail:** Set your destination email in the final \"Human Approval\" node."
      },
      "typeVersion": 1
    },
    {
      "id": "60d1c2f0-9672-46a5-8333-46e1346634f4",
      "name": "Aggregate",
      "type": "n8n-nodes-base.aggregate",
      "position": [
        448,
        64
      ],
      "parameters": {
        "options": {},
        "aggregate": "aggregateAllItemData"
      },
      "typeVersion": 1
    },
    {
      "id": "af172919-1e99-4247-9efc-9068819ba341",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -48,
        -32
      ],
      "parameters": {
        "color": 7,
        "width": 976,
        "height": 464,
        "content": "## PHASE 1: BRAINSTORMING"
      },
      "typeVersion": 1
    },
    {
      "id": "28f704d4-6094-4566-96b1-ea35d682d6a6",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        960,
        -32
      ],
      "parameters": {
        "color": 7,
        "width": 336,
        "height": 464,
        "content": "## PHASE 2: ENGINEERING"
      },
      "typeVersion": 1
    },
    {
      "id": "ebc6b50b-36a2-40f3-bb16-4091cde59591",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1344,
        -32
      ],
      "parameters": {
        "color": 7,
        "width": 640,
        "height": 464,
        "content": "## PHASE 3: CREATIVE & QC"
      },
      "typeVersion": 1
    },
    {
      "id": "5306ccda-8991-4362-955c-88586cd818e5",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        2016,
        -80
      ],
      "parameters": {
        "color": 7,
        "width": 448,
        "height": 464,
        "content": "## PHASE 4: DELIVERY"
      },
      "typeVersion": 1
    },
    {
      "id": "08853664-48fa-4b43-ad71-4608ceded160",
      "name": "Error Trigger",
      "type": "n8n-nodes-base.errorTrigger",
      "position": [
        -16,
        624
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "b8f289f0-7ad8-475f-ae17-9dacb75d20b7",
      "name": "Send a message",
      "type": "n8n-nodes-base.gmail",
      "position": [
        208,
        624
      ],
      "parameters": {
        "sendTo": "user@example.com",
        "message": "=The LinkedIn engine failed at node: {{ $node[\"Error Trigger\"].json[\"node\"][\"name\"] }}. Reason: {{ $node[\"Error Trigger\"].json[\"execution\"][\"error\"][\"message\"] }}",
        "options": {},
        "subject": "\u26a0\ufe0f Workflow Error: LinkedIn Content Engine"
      },
      "credentials": {
        "gmailOAuth2": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.2
    },
    {
      "id": "f08bbf10-4bab-4725-aa03-855cf129320d",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -64,
        528
      ],
      "parameters": {
        "color": 7,
        "width": 448,
        "height": 336,
        "content": "## SYSTEM: Error Handling"
      },
      "typeVersion": 1
    },
    {
      "id": "2be9e695-0dd6-4b9f-a516-69949d1307c5",
      "name": "Wait Timed Out (48h)",
      "type": "n8n-nodes-base.noOp",
      "notes": "Execution timed out after 48h.",
      "position": [
        2304,
        160
      ],
      "parameters": {},
      "notesInFlow": true,
      "typeVersion": 1
    },
    {
      "id": "1b6eecc2-d0ca-4134-ac38-4f28403e56f1",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -400,
        0
      ],
      "parameters": {
        "width": 336,
        "height": 256,
        "content": "## \ud83d\ude80 START HERE\nTo use this workflow: \n1. Create a Google Sheet with 'Topic', 'Content', 'Date', 'Status', and 'Difficulty'. \n2. Update the Document ID in the 'Retrieve Post History & Ideas' and 'Log Published Content' nodes. \n3. Update your recipient email in the 'Gmail Approval' node (2x)."
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "Aggregate": {
      "main": [
        [
          {
            "node": "Deduplication & Topic Selector",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Error Trigger": {
      "main": [
        [
          {
            "node": "Send a message",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Draft Copywriter": {
      "main": [
        [
          {
            "node": "Style & Compliance Editor",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Weekly Post Trigger": {
      "main": [
        [
          {
            "node": "Retrieve Post History & Ideas",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Human Approval (Gmail)": {
      "main": [
        [
          {
            "node": "Log Published Content",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait Timed Out (48h)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser": {
      "ai_outputParser": [
        [
          {
            "node": "Deduplication & Topic Selector",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Structured Output Parser1": {
      "ai_outputParser": [
        [
          {
            "node": "Structure & Logic Designer",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Style & Compliance Editor": {
      "main": [
        [
          {
            "node": "Human Approval (Gmail)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Structure & Logic Designer": {
      "main": [
        [
          {
            "node": "Draft Copywriter",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Retrieve Post History & Ideas": {
      "main": [
        [
          {
            "node": "Aggregate",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Deduplication & Topic Selector": {
      "main": [
        [
          {
            "node": "Structure & Logic Designer",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Brain: Creative Writer (GPT-4o)": {
      "ai_languageModel": [
        [
          {
            "node": "Draft Copywriter",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Brain: Content Architect (GPT-4o)": {
      "ai_languageModel": [
        [
          {
            "node": "Structure & Logic Designer",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Brain: Formatting Police (GPT-4o)": {
      "ai_languageModel": [
        [
          {
            "node": "Style & Compliance Editor",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Brain: Topic Analyst (GPT-4o-mini)": {
      "ai_languageModel": [
        [
          {
            "node": "Deduplication & Topic Selector",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Description: This is a Production-Grade Multi-Agent Content Engine designed for creators who prioritize technical authority over generic AI output.

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

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

Agent, OpenAI Chat, Airtable Tool +7
AI & RAG

Created by: Peyton Leveillee Last updated: October 2025

OpenAI Chat, Google Sheets, HTTP Request +5
AI & RAG

The Multi-Model Agency Content Engine is a high-performance editorial system designed for agencies. It solves the "blank page" problem by alternating between real-world social proof and strategic expe

Google Sheets, Gmail, Google Drive +6
AI & RAG

SEO Blog Article Generation Workflow. Uses outputParserStructured, httpRequest, agent, lmChatOpenAi. Scheduled trigger; 56 nodes.

Output Parser Structured, HTTP Request, Agent +4
AI & RAG

This workflow was born out of a very real problem.

Output Parser Structured, OpenAI Chat, Memory Buffer Window +11