AutomationFlowsAI & RAG › Generate Linkedin Carousel Content From Reddit with Claude and Airtable

Generate Linkedin Carousel Content From Reddit with Claude and Airtable

ByAllan Vaccarizi @growthai on n8n.io

This workflow is for digital marketers, content creators, and social media managers who want to turn trending Reddit discussions into ready-to-publish LinkedIn carousel content — without manual research or copywriting. A schedule trigger fires every Monday at 10am and a Set node

Cron / scheduled trigger★★★★☆ complexityAI-powered19 nodesHTTP RequestAgentAnthropic ChatOutput Parser StructuredAirtable
AI & RAG Trigger: Cron / scheduled Nodes: 19 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Agent → Airtable 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
{
  "nodes": [
    {
      "id": "deab7f10-5bcf-4fcf-98f3-b67e2f0afe1e",
      "name": "Sticky Note13",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -48,
        0
      ],
      "parameters": {
        "color": 7,
        "width": 1024,
        "height": 336,
        "content": "## Need more advanced automation solutions? Contact us for custom enterprise workflows!\n\n# Growth-AI.fr\n\n## https://www.linkedin.com/in/allanvaccarizi/\n## https://www.linkedin.com/in/hugo-marinier-%F0%9F%A7%B2-6537b633/"
      },
      "typeVersion": 1
    },
    {
      "id": "085233cd-7a1b-4326-8832-6067b0e79fd5",
      "name": "Sticky Note16",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -48,
        -416
      ],
      "parameters": {
        "color": 7,
        "width": 1024,
        "height": 400,
        "content": "![Logo Growth AI](https://cdn.prod.website-files.com/6825df5b20329ba581df4914/68d413c43f8729fa336568a6_Logo_horizontal.png)"
      },
      "typeVersion": 1
    },
    {
      "id": "5c6343af-07c2-4987-955c-1d4a84e6cc0f",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -832,
        400
      ],
      "parameters": {
        "width": 480,
        "height": 816,
        "content": "## Turn Reddit post into Linkedin post\n\n### How it works\n\n1. A schedule trigger fires periodically and sets the target subreddit list before calling the Apify Reddit scraper.\n2. The top post from each subreddit is extracted via a code node, then filtered through two parallel filter conditions.\n3. Comments for the selected posts are fetched from Apify to provide rich context for AI processing.\n4. An AI agent (Claude) generates:\n\n   * a ready-to-publish LinkedIn post\n   * and a structured design prompt intended for a design-focused LLM (e.g. Claude Design) to generate a LinkedIn carousel\n5. The results are then saved to Airtable for further use or publication.\n\n---\n\n### Setup steps\n\n* * [ ] Configure the **Schedule Trigger** interval (e.g. daily, hourly) to match your desired posting cadence.\n* * [ ] In **Edit Fields**, set the list of subreddits (space-separated) you want to monitor.\n* * [ ] Add your **Apify API key** to both HTTP Request nodes (`Get Reddit posts` and `Get com IA`) that call the Apify actor.\n* * [ ] Connect your **Anthropic credentials** to the Anthropic Chat Model sub-node inside `Carrousel IA`.\n* * [ ] Connect your **Airtable credentials** to the `New carrousel` node and point it to the correct base and table.\n* * [ ] Review the two **Filter** nodes to adjust the criteria used to select qualifying posts.\n\n---\n\n### Customization\n\nYou can swap the Anthropic model for another LLM by replacing the sub-node. The filter conditions can be tuned to target posts by score, flair, or keyword. Additional subreddits can be added simply by editing the space-separated list in Edit Fields.\n"
      },
      "typeVersion": 1
    },
    {
      "id": "f9bdc80d-6dea-4459-9256-2b80cf6b1b3f",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -272,
        560
      ],
      "parameters": {
        "color": 7,
        "width": 416,
        "height": 320,
        "content": "## Trigger and configure subreddits\n\nThe schedule trigger fires on a set interval, and Edit Fields sets the subreddit list used for scraping."
      },
      "typeVersion": 1
    },
    {
      "id": "03e8f3db-9e06-4832-8089-88066b88fb99",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        176,
        560
      ],
      "parameters": {
        "color": 7,
        "width": 368,
        "height": 320,
        "content": "## Fetch and extract Reddit posts\n\nCalls the Apify Reddit scraper to retrieve posts, then a code node extracts the first (top) post from each subreddit."
      },
      "typeVersion": 1
    },
    {
      "id": "a42c3e53-bc14-4b24-b44e-27d0fbd62632",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        576,
        400
      ],
      "parameters": {
        "color": 7,
        "height": 560,
        "content": "## Filter qualifying posts\n\nTwo parallel filter nodes apply different criteria to the extracted posts, ensuring only relevant content proceeds."
      },
      "typeVersion": 1
    },
    {
      "id": "0b5968fc-0880-4d7d-971c-28716713dd38",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        848,
        480
      ],
      "parameters": {
        "color": 7,
        "height": 400,
        "content": "## Fetch comments for selected posts\n\nCalls Apify again to retrieve comments for the filtered posts, providing richer context for AI carousel generation."
      },
      "typeVersion": 1
    },
    {
      "id": "cabd3aa1-dd8d-424a-a7d9-ccf6ecdb7d43",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        1120,
        560
      ],
      "parameters": {
        "color": 7,
        "width": 512,
        "height": 656,
        "content": "## Generate carousel with AI and save\n\nAn AI agent powered by Claude (with a structured output parser) generates carousel content from the posts and comments, then saves it to an Airtable base."
      },
      "typeVersion": 1
    },
    {
      "id": "33366402-e2d9-4924-912b-133c4bdfc589",
      "name": "Every Monday at 10am",
      "type": "n8n-nodes-base.scheduleTrigger",
      "position": [
        -224,
        720
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "weeks",
              "triggerAtDay": [
                1
              ],
              "triggerAtHour": 10
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "d1ca0a9d-d5a5-4c4f-8eb1-c3de90677981",
      "name": "Extract First Post per Subreddit",
      "type": "n8n-nodes-base.code",
      "position": [
        400,
        720
      ],
      "parameters": {
        "jsCode": "// Dans un n8n Code Node\nconst posts = $input.all();\n\n// Grouper les posts par subreddit\nconst postsBySubreddit = {};\n\nfor (const post of posts) {\n  const subreddit = post.json.subreddit || 'unknown';\n  \n  if (!postsBySubreddit[subreddit]) {\n    postsBySubreddit[subreddit] = [];\n  }\n  \n  postsBySubreddit[subreddit].push(post);\n}\n\n// Trouver le top post de chaque subreddit\nconst topPosts = [];\n\nfor (const subreddit in postsBySubreddit) {\n  const subredditPosts = postsBySubreddit[subreddit];\n  \n  const topPost = subredditPosts.reduce((best, current) => {\n    const currentScore = current.json.score || 0;\n    const bestScore = best.json.score || 0;\n    return currentScore > bestScore ? current : best;\n  });\n  \n  topPosts.push(topPost);\n}\n\nreturn topPosts;"
      },
      "typeVersion": 2
    },
    {
      "id": "9f7915a0-f809-412c-b830-7fbbabd59861",
      "name": "Fetch Reddit Posts via Apify",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        224,
        720
      ],
      "parameters": {
        "url": "https://api.apify.com/v2/acts/TwqHBuZZPHJxiQrTU/run-sync-get-dataset-items",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n  \"urls\": [\n    {{ $json[\"Subreddit (space-separated)\"].split(' ').filter(Boolean).map(url => `\"${url}\"`).join(',\\n') }}\n  ],\n  \"sort\": \"hot\",\n  \"timeframe\": \"week\",\n  \"maxPosts\": 20,\n  \"maxComments\": 5,\n  \"scrapeComments\": false,\n  \"includeNsfw\": false\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "apifyApi"
      },
      "credentials": {
        "apifyApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "92776618-0ba3-42b1-8099-fcdaae0a81cf",
      "name": "Fetch AI Comments via Apify",
      "type": "n8n-nodes-base.httpRequest",
      "position": [
        896,
        720
      ],
      "parameters": {
        "url": "https://api.apify.com/v2/acts/TwqHBuZZPHJxiQrTU/run-sync-get-dataset-items",
        "method": "POST",
        "options": {},
        "jsonBody": "={\n    \"includeNsfw\": false,\n    \"maxComments\": 10,\n    \"maxPosts\": 10,\n    \"scrapeComments\": true,\n    \"urls\": [\n        \"{{ $json.url }}\"\n    ]\n}",
        "sendBody": true,
        "specifyBody": "json",
        "authentication": "predefinedCredentialType",
        "nodeCredentialType": "apifyApi"
      },
      "credentials": {
        "apifyApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.2
    },
    {
      "id": "a1d63898-acd5-4796-bc41-42260b95abe7",
      "name": "Carousel Content Agent",
      "type": "@n8n/n8n-nodes-langchain.agent",
      "position": [
        1168,
        720
      ],
      "parameters": {
        "text": "=Post content: {{ $json.body }}\n\nComments: {{ $input.all().filter(item => item.json.kind === 'comment').map(item => `Comment author: ${item.json.author}\\nCommentaire : ${item.json.body}`).join('\\n\\n---\\n\\n') }}\n",
        "options": {
          "systemMessage": "=# CONTEXT\n\nYou are a digital expert who identifies key tensions and problems in your field. Your mission is to transform online discussions into standalone LinkedIn content that sparks professional debates, as if you had personally reflected on the topic.\n\n# TONE & STYLE\n\n* **\u201cDirect insight\u201d angle**: You jump straight into the issue without ever referencing a source\n* **Strong opinions**: You ask challenging, non-neutral questions\n* **Technical curiosity**: You explore implications, not just facts\n* Use \u201cI\u201d only to comment/question (e.g., \u201cWhat stands out to me in this logic...\u201d)\n* No phrases like \u201cIt is interesting to note that...\u201d\n* **Emojis**: use sparingly and intentionally. Emojis at the start of bullet points to improve readability, and 1\u20132 max at key moments (hook or transitions). Never excessive, never decorative. Always aligned with a tech/professional tone.\n\n# AUDIENCE\n\nDigital professionals who want to:\n\n* Understand the **stakes** behind technical decisions\n* Be challenged on their **assumptions**\n* Discover **blind spots** they hadn\u2019t considered\n\n# TRANSFORMATION (OWNERSHIP OF THE PROBLEM, NOT CITATION)\n\n\u274c \u201cA creator just shared...\u201d (indirect citation)\n\u274c \u201cWe increasingly observe...\u201d (detached observation)\n\u274c \u201cA recent project shows...\u201d (source reference)\n\n\u2705 \u201cAutomating creative validation reduces waste. But it raises a real question about what gets eliminated through filtering.\u201d\n\u2705 \u201cSeparating creative decisions from production steps is efficient. Until the filter becomes the judge of what deserves to exist.\u201d\n\nInstead of citing or observing externally:\n\n1. **Extract the core problem** from the post and comments\n2. **Forget the source** \u2014 build the post as your own perspective\n3. **Ask a question that challenges** the reader\u2019s assumptions\n\n# OUTPUT FORMAT\n\n## LINKEDIN POST (8\u201312 lines)\n\n**Mandatory structure:**\n\n* **Lines 1\u20132**: Direct entry into the tension or insight (no source reference)\n* **Lines 3\u20136**: Core debate + 2\u20133 challenging points\n* **Lines 7\u20138**: Strong opinion or thought-provoking angle\n* **Final line**: Open question that forces a stance\n\n**Specific tone:**\n\n* Jump straight in: \u201cAutomating production makes sense. Automating idea selection is something else.\u201d\n* Highlight tension: \u201cWhat stands out here...\u201d, \u201cThe real issue is...\u201d\n* Challenge: \u201cThis raises a real question about...\u201d, \u201cHow far can we push...\u201d\n\n**Strict prohibitions:**\n\n* \u274c Any indirect citation (\u201cA creator said...\u201d, \u201cWe observe...\u201d, etc.)\n* \u274c Neutral tone without opinion\n* \u274c Weak rhetorical questions\n* \u274c Mentioning any source\n* \u274c Never use long dashes (\u2014) in the LinkedIn post\n\n# ABSOLUTE RULES\n\n\u2705 Own the problem, don\u2019t cite the source\n\u2705 Challenge assumptions\n\u2705 Highlight tensions and contradictions\n\u2705 Take a stance (even subtle)\n\u2705 End with a strong, polarizing question\n\n\u274c Never imply you\u2019re commenting on an existing post\n\u274c Never be neutral or bland\n\u274c Don\u2019t summarize \u2014 highlight what\u2019s striking\n\u274c No weak questions (\u201cWhat do you think?\u201d)\n\u274c No source mentions\n\n# TOPIC ADAPTATION\n\nAdjust your questioning angle depending on the field:\n\n**Tech/AI/Dev** \u2192 \u201cHow far can we simplify before we must reintroduce complexity?\u201d\n**Marketing/Sales** \u2192 \u201cDoes automation kill authenticity or make it scalable?\u201d\n**Process/Automation** \u2192 \u201cWho are we really optimizing for: the team or the tool?\u201d\n**Management/HR** \u2192 \u201cWhat truly creates value: the methodology or the team?\u201d\n\n# JSON OUTPUT\n\n```json\n{\n  \"post_linkedin\": \"[Post with direct insight + tension + polarizing question, no source reference]\",\n  \"claude_design_prompt\": \"[Markdown prompt for Claude Design \u2014 see instructions below]\"\n}\n```\n\n---\n\n## CLAUDE DESIGN PROMPT GENERATION\n\nThe `claude_design_prompt` field must contain a **markdown-formatted prompt** designed to be pasted directly into Claude Design to generate a LinkedIn carousel.\n\n**This prompt must include:**\n\n1. **Target format**: square LinkedIn carousel (1:1), PDF export\n2. **Core tension**: reformulated as a sharp, impactful sentence\n3. **Visual tone**: black background #000000, neon yellow accents #EFBC08 used sparingly (titles, separators, keywords), subtle glow effects, clean and minimal\n4. **Typography**: Outfit Medium for titles, Archivo Regular for body text\n5. **Key textual elements** from the post: hook, tension points, final question\n6. **Suggested narrative structure**: do not fix slide count, let Claude Design decide\n7. **Creative freedom instruction**: Claude Design chooses slide count, layout, and visual effects\n8. **Mandatory final CTA slide**: always end with a CTA inviting users to visit Growth-AI.fr or contact Growth AI\n9. **Growth AI logo**: use the logo from the design system assets on every slide\n\n**Rules for this prompt:**\n\n* Written in **markdown** with clear sections and bullets\n* Written in **French**\n* Directive on visual style, flexible on structure\n* Slide texts are suggested, not strictly imposed\n* Always end with a PDF export instruction\n\n---\n\n## PROCESS\n\n1. Extract the **core problem** from the post and comments\n2. Identify underlying **tensions** and **contradictions**\n3. Forget the source \u2014 build your own perspective\n4. Find the **angle that challenges** common assumptions\n5. Formulate a **polarizing question**\n6. Write the LinkedIn post following the rules\n7. Generate the Claude Design prompt **in markdown and in French**, including key textual elements \u2014 must include a final CTA slide pointing to Growth-AI.fr and the Growth AI logo on every slide\n8. Return the final JSON\n\n---\n\n**Important:** Never imply (even indirectly) that you are commenting on an existing post. Strictly respect the JSON output format.\n"
        },
        "promptType": "define",
        "hasOutputParser": true
      },
      "executeOnce": true,
      "retryOnFail": false,
      "typeVersion": 2.2
    },
    {
      "id": "066fc3d8-3408-411c-bbff-7e1c59592414",
      "name": "Set Target Subreddits",
      "type": "n8n-nodes-base.set",
      "position": [
        0,
        720
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "72ed179b-a50f-48b2-a229-d1afe6778be0",
              "name": "Subreddit (space-separated)",
              "type": "string",
              "value": "https://www.reddit.com/r/automation/ https://www.reddit.com/r/ArtificialInteligence/"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "66ec6f1c-aa82-4d57-821d-1a533cf538a3",
      "name": "Claude Sonnet Model",
      "type": "@n8n/n8n-nodes-langchain.lmChatAnthropic",
      "position": [
        1168,
        1056
      ],
      "parameters": {
        "model": {
          "__rl": true,
          "mode": "list",
          "value": "claude-sonnet-4-6",
          "cachedResultName": "Claude Sonnet 4.6"
        },
        "options": {}
      },
      "credentials": {
        "anthropicApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 1.3
    },
    {
      "id": "02051cdb-335f-4719-9a44-fa7913f5721a",
      "name": "Parse Structured Output",
      "type": "@n8n/n8n-nodes-langchain.outputParserStructured",
      "position": [
        1232,
        896
      ],
      "parameters": {
        "autoFix": true,
        "jsonSchemaExample": "{\n  \"post_linkedin\": \"Post avec constat direct + tension + question clivante, sans r\u00e9f\u00e9rence \u00e0 une source\",\n  \"claude_design_prompt\": \"Prompt en anglais pour Claude Design \u2014 voir instructions ci-dessous\"\n}"
      },
      "typeVersion": 1.3
    },
    {
      "id": "3c65c0fb-4fb8-4766-80ba-e632df125480",
      "name": "Save Carousel to Airtable",
      "type": "n8n-nodes-base.airtable",
      "position": [
        1488,
        720
      ],
      "parameters": {
        "base": {
          "__rl": true,
          "mode": "list",
          "value": "appYpWQZw64NBZcZT",
          "cachedResultUrl": "https://airtable.com/appYpWQZw64NBZcZT",
          "cachedResultName": "Growth AI Linkedin"
        },
        "table": {
          "__rl": true,
          "mode": "list",
          "value": "tbljbYkOefSNuCluf",
          "cachedResultUrl": "https://airtable.com/appvogh5Ec0HpBrN6/tbljbYkOefSNuCluf",
          "cachedResultName": "Social listening"
        },
        "columns": {
          "value": {
            "Post": "={{ $json.output.post_linkedin }}",
            "Prompt": "={{ $json.output.claude_design_prompt }}",
            "Reddit": "={{ $('Fetch AI Comments via Apify').item.json.query }}"
          },
          "schema": [
            {
              "id": "Reddit",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Reddit",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Secteur",
              "type": "options",
              "display": true,
              "options": [
                {
                  "name": "SEO",
                  "value": "SEO"
                },
                {
                  "name": "Automation",
                  "value": "Automation"
                },
                {
                  "name": "RAG",
                  "value": "RAG"
                },
                {
                  "name": "IA",
                  "value": "IA"
                }
              ],
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Secteur",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Prompt",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Prompt",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Post",
              "type": "string",
              "display": true,
              "removed": false,
              "readOnly": false,
              "required": false,
              "displayName": "Post",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Attachments",
              "type": "array",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Attachments",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Compte Linkedin",
              "type": "options",
              "display": true,
              "options": [
                {
                  "name": "Allan",
                  "value": "Allan"
                },
                {
                  "name": "Hugo",
                  "value": "Hugo"
                },
                {
                  "name": "Growth AI",
                  "value": "Growth AI"
                }
              ],
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Compte Linkedin",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Date de publication",
              "type": "dateTime",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Date de publication",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Programm\u00e9",
              "type": "options",
              "display": true,
              "options": [
                {
                  "name": "OUI",
                  "value": "OUI"
                },
                {
                  "name": "NON",
                  "value": "NON"
                }
              ],
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Programm\u00e9",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Page 1",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Page 1",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Page 2",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Page 2",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Page 3",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Page 3",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Page 4",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Page 4",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Page 5",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Page 5",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Page 6",
              "type": "string",
              "display": true,
              "removed": true,
              "readOnly": false,
              "required": false,
              "displayName": "Page 6",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": [],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "create"
      },
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 2.1
    },
    {
      "id": "195239bb-9d06-4b4a-adc2-f67af8941a5b",
      "name": "Filter Posts Branch 1",
      "type": "n8n-nodes-base.filter",
      "position": [
        624,
        608
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "0ad9b9a5-7725-49ae-b9d5-69e94a6151a8",
              "operator": {
                "type": "string",
                "operation": "contains"
              },
              "leftValue": "={{ $json.query }}",
              "rightValue": "automation"
            }
          ]
        }
      },
      "typeVersion": 2.3
    },
    {
      "id": "d0f387fe-5f8c-4089-ab3a-8cd06fbe4cbe",
      "name": "Filter Posts Branch 2",
      "type": "n8n-nodes-base.filter",
      "position": [
        624,
        800
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "version": 3,
            "leftValue": "",
            "caseSensitive": true,
            "typeValidation": "strict"
          },
          "combinator": "and",
          "conditions": [
            {
              "id": "0ad9b9a5-7725-49ae-b9d5-69e94a6151a8",
              "operator": {
                "type": "string",
                "operation": "contains"
              },
              "leftValue": "={{ $json.query }}",
              "rightValue": "ArtificialInteligence"
            }
          ]
        }
      },
      "typeVersion": 2.3
    }
  ],
  "connections": {
    "Claude Sonnet Model": {
      "ai_languageModel": [
        [
          {
            "node": "Parse Structured Output",
            "type": "ai_languageModel",
            "index": 0
          },
          {
            "node": "Carousel Content Agent",
            "type": "ai_languageModel",
            "index": 0
          }
        ]
      ]
    },
    "Every Monday at 10am": {
      "main": [
        [
          {
            "node": "Set Target Subreddits",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Posts Branch 1": {
      "main": [
        [
          {
            "node": "Fetch AI Comments via Apify",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Posts Branch 2": {
      "main": [
        [
          {
            "node": "Fetch AI Comments via Apify",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Set Target Subreddits": {
      "main": [
        [
          {
            "node": "Fetch Reddit Posts via Apify",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Carousel Content Agent": {
      "main": [
        [
          {
            "node": "Save Carousel to Airtable",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse Structured Output": {
      "ai_outputParser": [
        [
          {
            "node": "Carousel Content Agent",
            "type": "ai_outputParser",
            "index": 0
          }
        ]
      ]
    },
    "Fetch AI Comments via Apify": {
      "main": [
        [
          {
            "node": "Carousel Content Agent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Reddit Posts via Apify": {
      "main": [
        [
          {
            "node": "Extract First Post per Subreddit",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Extract First Post per Subreddit": {
      "main": [
        [
          {
            "node": "Filter Posts Branch 1",
            "type": "main",
            "index": 0
          },
          {
            "node": "Filter Posts Branch 2",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

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

Pro

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

About this workflow

This workflow is for digital marketers, content creators, and social media managers who want to turn trending Reddit discussions into ready-to-publish LinkedIn carousel content — without manual research or copywriting. A schedule trigger fires every Monday at 10am and a Set node…

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

Template Carnaval - time instagram. Uses toolWorkflow, lmChatOpenAi, memoryBufferWindow, agent. Event-driven trigger; 56 nodes.

Tool Workflow, OpenAI Chat, Memory Buffer Window +10
AI & RAG

📺 Full walkthrough video: https://youtu.be/03mZE9tvELU

HTTP Request, Google Sheets, Agent +2
AI & RAG

Ghost-Automated-Blog-System. Uses scheduleTrigger, rssFeedRead, httpRequest, airtable. Scheduled trigger; 38 nodes.

RSS Feed Read, HTTP Request, Airtable +5
AI & RAG

&gt; ⚠️ Self-hosted only — This template uses a community node () and cannot run on n8n Cloud.

Airtable, HTTP Request, @Mendable/N8N Nodes Firecrawl +3