AutomationFlowsAI & RAG › Automate Reddit Brand Monitoring & Responses with Gpt-4o-mini, Sheets & Slack

Automate Reddit Brand Monitoring & Responses with Gpt-4o-mini, Sheets & Slack

ByDaniel Shashko @tomax on n8n.io

This workflow automates intelligent Reddit marketing by monitoring brand mentions, analyzing sentiment with AI, and engaging authentically with communities. Every 24 hours, the system searches Reddit for posts containing your configured brand keywords across all subreddits,…

Cron / scheduled trigger★★★★☆ complexityAI-powered20 nodesRedditOpenAIGoogle SheetsSlack
AI & RAG Trigger: Cron / scheduled Nodes: 20 Complexity: ★★★★☆ AI nodes: yes Added:

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

This workflow follows the Google Sheets → OpenAI 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": "947d8563-99c3-40bb-9fef-13f482cb8567",
      "name": "Daily Marketing Check",
      "type": "n8n-nodes-base.scheduleTrigger",
      "notes": "Runs every 24 hours to scan Reddit for brand mentions and engagement opportunities",
      "position": [
        -1456,
        32
      ],
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "hours",
              "hoursInterval": 24
            }
          ]
        }
      },
      "typeVersion": 1.2
    },
    {
      "id": "70d74090-8308-4ff8-995a-afa2b3e53448",
      "name": "Search Brand Mentions",
      "type": "n8n-nodes-base.reddit",
      "notes": "Searches Reddit for posts mentioning your brand, products, or relevant keywords",
      "position": [
        -1008,
        32
      ],
      "parameters": {
        "limit": 50,
        "keyword": "={{ $json.brandKeyword }}",
        "location": "allReddit",
        "operation": "search",
        "additionalFields": {
          "sort": "new"
        }
      },
      "typeVersion": 1
    },
    {
      "id": "958f4ae4-caf9-46ee-9ab5-e7a5f7cf9da9",
      "name": "Brand Keywords Config",
      "type": "n8n-nodes-base.code",
      "notes": "Configure your brand name and relevant keywords to monitor",
      "position": [
        -1232,
        32
      ],
      "parameters": {
        "jsCode": "// Configure your brand monitoring keywords\nconst brandKeywords = [\n  \"YourBrandName\",\n  \"your-product-name\",\n  \"industry-keyword\"\n];\n\n// Return array of keywords to search\nreturn brandKeywords.map(keyword => ({\n  json: {\n    brandKeyword: keyword\n  }\n}));"
      },
      "typeVersion": 2
    },
    {
      "id": "f9fda183-58fe-4b81-a7b3-7ddecaba3ba7",
      "name": "AI Post Analysis",
      "type": "@n8n/n8n-nodes-langchain.openAi",
      "notes": "Uses AI to analyze sentiment, relevance, and generate contextual responses",
      "position": [
        -800,
        32
      ],
      "parameters": {
        "modelId": {
          "__rl": true,
          "mode": "list",
          "value": ""
        },
        "options": {
          "temperature": 0.7
        },
        "messages": {
          "values": [
            {}
          ]
        }
      },
      "typeVersion": 1.4
    },
    {
      "id": "95982fd8-f412-475e-b4a5-6aaa69ec3b58",
      "name": "Filter Engagement-Worthy",
      "type": "n8n-nodes-base.if",
      "notes": "Only engages with posts that are relevant, high-quality, and appropriate",
      "position": [
        -576,
        32
      ],
      "parameters": {
        "options": {},
        "conditions": {
          "options": {
            "combineOperation": "all"
          },
          "conditions": [
            {
              "id": "condition-relevant",
              "operator": {
                "type": "boolean",
                "operation": "true"
              },
              "leftValue": "={{ $json.isRelevant }}",
              "rightValue": true
            },
            {
              "id": "condition-score",
              "operator": {
                "type": "number",
                "operation": "gt"
              },
              "leftValue": "={{ $json.engagementScore }}",
              "rightValue": 60
            },
            {
              "id": "condition-type",
              "operator": {
                "type": "string",
                "operation": "notEquals"
              },
              "leftValue": "={{ $json.responseType }}",
              "rightValue": "pass"
            }
          ]
        }
      },
      "typeVersion": 2
    },
    {
      "id": "71b6a70e-fe6a-4f6e-a5c9-c90181696e56",
      "name": "Loop Through Posts",
      "type": "n8n-nodes-base.splitInBatches",
      "notes": "Process each post one at a time to avoid rate limits",
      "position": [
        -352,
        -48
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "1e154007-38ff-4201-8576-972c99bb9197",
      "name": "Post Helpful Comment",
      "type": "n8n-nodes-base.reddit",
      "notes": "Posts AI-generated helpful comment to engage with the community",
      "position": [
        -128,
        -48
      ],
      "parameters": {
        "postId": "={{ $('Search Brand Mentions').item.json.data.id }}",
        "resource": "postComment",
        "commentText": "={{ $('AI Post Analysis').item.json.suggestedResponse }}"
      },
      "typeVersion": 1
    },
    {
      "id": "dcfe45e5-64ec-4d91-abd2-3472b45fb4dc",
      "name": "Log to Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "notes": "Tracks all Reddit interactions in a Google Sheet for analysis",
      "position": [
        96,
        -48
      ],
      "parameters": {
        "columns": {
          "value": {
            "postId": "={{ $('Search Brand Mentions').item.json.data.id }}",
            "postUrl": "=https://reddit.com{{ $('Search Brand Mentions').item.json.data.permalink }}",
            "postTitle": "={{ $('Search Brand Mentions').item.json.data.title }}",
            "reasoning": "={{ $('AI Post Analysis').item.json.reasoning }}",
            "sentiment": "={{ $('AI Post Analysis').item.json.sentiment }}",
            "subreddit": "={{ $('Search Brand Mentions').item.json.data.subreddit }}",
            "timestamp": "={{ $now.toISO() }}",
            "responseType": "={{ $('AI Post Analysis').item.json.responseType }}",
            "commentPosted": "={{ $json.success ? 'Yes' : 'Failed' }}",
            "engagementScore": "={{ $('AI Post Analysis').item.json.engagementScore }}"
          },
          "schema": [
            {
              "id": "timestamp",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "timestamp",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "postId",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "postId",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "postTitle",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "postTitle",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "subreddit",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "subreddit",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "postUrl",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "postUrl",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "sentiment",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "sentiment",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "engagementScore",
              "type": "number",
              "display": true,
              "required": false,
              "displayName": "engagementScore",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "responseType",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "responseType",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "commentPosted",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "commentPosted",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "reasoning",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "reasoning",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "defineBelow",
          "matchingColumns": []
        },
        "options": {},
        "operation": "append",
        "sheetName": {
          "__rl": true,
          "mode": "id",
          "value": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "id",
          "value": "YOUR_SHEET_ID"
        }
      },
      "typeVersion": 4.5
    },
    {
      "id": "0c7a75ed-891c-45dd-95fc-c86c0e07862e",
      "name": "Generate Daily Summary",
      "type": "n8n-nodes-base.code",
      "notes": "Aggregates all data into a comprehensive daily report",
      "position": [
        320,
        32
      ],
      "parameters": {
        "jsCode": "// Aggregate all processed items\nconst items = $input.all();\n\nconst totalPosts = items.length;\nconst postsEngaged = items.filter(i => i.json.commentPosted === 'Yes').length;\nconst sentimentBreakdown = items.reduce((acc, item) => {\n  const sentiment = item.json.sentiment || 'unknown';\n  acc[sentiment] = (acc[sentiment] || 0) + 1;\n  return acc;\n}, {});\n\nconst avgScore = items.reduce((sum, item) => sum + (item.json.engagementScore || 0), 0) / totalPosts;\n\nconst topPosts = items\n  .sort((a, b) => (b.json.engagementScore || 0) - (a.json.engagementScore || 0))\n  .slice(0, 5)\n  .map(item => ({\n    title: item.json.postTitle,\n    subreddit: item.json.subreddit,\n    score: item.json.engagementScore,\n    url: item.json.postUrl\n  }));\n\nreturn [{\n  json: {\n    summary: {\n      totalPosts,\n      postsEngaged,\n      engagementRate: `${((postsEngaged / totalPosts) * 100).toFixed(1)}%`,\n      avgEngagementScore: avgScore.toFixed(1),\n      sentimentBreakdown,\n      topPosts,\n      reportDate: new Date().toISOString().split('T')[0]\n    }\n  }\n}];"
      },
      "typeVersion": 2
    },
    {
      "id": "59090839-871e-4fd1-bd07-251104e4115f",
      "name": "Send Slack Report",
      "type": "n8n-nodes-base.slack",
      "notes": "Sends comprehensive daily report to Slack with metrics and top opportunities",
      "position": [
        528,
        32
      ],
      "parameters": {
        "text": "=\ud83d\udcca *Reddit Brand Marketing Daily Report*\n\n*Date:* {{ $json.summary.reportDate }}\n\n*Overall Performance:*\n\u2022 Posts Analyzed: {{ $json.summary.totalPosts }}\n\u2022 Comments Posted: {{ $json.summary.postsEngaged }}\n\u2022 Engagement Rate: {{ $json.summary.engagementRate }}\n\u2022 Avg Engagement Score: {{ $json.summary.avgEngagementScore }}/100\n\n*Sentiment Breakdown:*\n{{ Object.entries($json.summary.sentimentBreakdown).map(([k,v]) => `\u2022 ${k}: ${v} posts`).join('\\n') }}\n\n*Top 5 Engagement Opportunities:*\n{{ $json.summary.topPosts.map((post, i) => `${i+1}. ${post.title}\\n   \ud83d\udccd r/${post.subreddit} | Score: ${post.score}\\n   \ud83d\udd17 ${post.url}`).join('\\n\\n') }}\n\n\u2705 All interactions logged to Google Sheets",
        "select": "channel",
        "channelId": {
          "__rl": true,
          "mode": "id",
          "value": "YOUR_CHANNEL_ID"
        },
        "otherOptions": {}
      },
      "typeVersion": 2.2
    },
    {
      "id": "6b53e5f2-79c8-41f9-b779-5efbe6aeaf37",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1904,
        -112
      ],
      "parameters": {
        "color": 4,
        "width": 347,
        "height": 469,
        "content": "## Reddit Brand Marketing Workflow\n\n**Purpose:** Automate Reddit monitoring and engagement for brand marketing\n\n**Features:**\n- Daily automated scans\n- AI-powered sentiment analysis\n- Smart comment generation\n- Engagement tracking\n- Daily Slack reports\n\n**Setup Required:**\n1. Reddit OAuth credentials\n2. OpenAI API key\n3. Google Sheets document\n4. Slack channel\n5. Configure brand keywords in Code node"
      },
      "typeVersion": 1
    },
    {
      "id": "4b1cf549-13f1-4acb-bc92-226fc8275380",
      "name": "Sticky Note1",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1488,
        -112
      ],
      "parameters": {
        "width": 176,
        "height": 112,
        "content": "Schedule trigger runs workflow every 24 hours automatically daily\n"
      },
      "typeVersion": 1
    },
    {
      "id": "61e35218-b58c-42b7-a369-71b42c4d64ef",
      "name": "Sticky Note2",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1264,
        -112
      ],
      "parameters": {
        "width": 176,
        "height": 112,
        "content": "JavaScript code node defining brand keywords to monitor Reddit\n"
      },
      "typeVersion": 1
    },
    {
      "id": "b9a32a51-137c-48e1-83aa-82d64001e52f",
      "name": "Sticky Note3",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -1040,
        -112
      ],
      "parameters": {
        "width": 176,
        "height": 112,
        "content": "Reddit node searches all subreddits for brand keyword mentions\n"
      },
      "typeVersion": 1
    },
    {
      "id": "9ca8ec09-cd5d-440b-ba21-3f4c69b62a73",
      "name": "Sticky Note4",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -800,
        -112
      ],
      "parameters": {
        "width": 320,
        "height": 112,
        "content": "OpenAI analyzes sentiment, relevance, generates contextual helpful comment responses + Conditional node filters only high-quality relevant posts worth engaging\n"
      },
      "typeVersion": 1
    },
    {
      "id": "b1e5a451-6954-479c-a225-d9c3bfddc55e",
      "name": "Sticky Note5",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -384,
        -192
      ],
      "parameters": {
        "width": 176,
        "height": 112,
        "content": "Split in batches processes each post individually respecting limits"
      },
      "typeVersion": 1
    },
    {
      "id": "dafc1ea5-66a4-4bc0-a6e5-9c954295071b",
      "name": "Sticky Note6",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        -160,
        -192
      ],
      "parameters": {
        "width": 176,
        "height": 112,
        "content": "Reddit node posts AI-generated comment to worthy Reddit discussions"
      },
      "typeVersion": 1
    },
    {
      "id": "2e85a5e7-61df-4969-8012-ddb4a1336178",
      "name": "Sticky Note7",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        64,
        -192
      ],
      "parameters": {
        "width": 176,
        "height": 112,
        "content": "Appends all interaction data to spreadsheet for permanent tracking\n"
      },
      "typeVersion": 1
    },
    {
      "id": "4529d6c8-87ca-4d11-a609-6463cfe6d236",
      "name": "Sticky Note8",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        288,
        -112
      ],
      "parameters": {
        "width": 176,
        "height": 112,
        "content": "JavaScript aggregates metrics, sentiment breakdown, generates comprehensive daily report"
      },
      "typeVersion": 1
    },
    {
      "id": "ee43aa3b-6acd-40bf-982c-0a667797b886",
      "name": "Sticky Note9",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        496,
        -112
      ],
      "parameters": {
        "width": 176,
        "height": 112,
        "content": "Posts formatted daily summary with metrics to team Slack channel"
      },
      "typeVersion": 1
    }
  ],
  "connections": {
    "AI Post Analysis": {
      "main": [
        [
          {
            "node": "Filter Engagement-Worthy",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Through Posts": {
      "main": [
        [
          {
            "node": "Post Helpful Comment",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Generate Daily Summary",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Log to Google Sheets": {
      "main": [
        [
          {
            "node": "Loop Through Posts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Post Helpful Comment": {
      "main": [
        [
          {
            "node": "Log to Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Brand Keywords Config": {
      "main": [
        [
          {
            "node": "Search Brand Mentions",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Daily Marketing Check": {
      "main": [
        [
          {
            "node": "Brand Keywords Config",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Search Brand Mentions": {
      "main": [
        [
          {
            "node": "AI Post Analysis",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Generate Daily Summary": {
      "main": [
        [
          {
            "node": "Send Slack Report",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Engagement-Worthy": {
      "main": [
        [
          {
            "node": "Loop Through Posts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}
Pro

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

About this workflow

This workflow automates intelligent Reddit marketing by monitoring brand mentions, analyzing sentiment with AI, and engaging authentically with communities. Every 24 hours, the system searches Reddit for posts containing your configured brand keywords across all subreddits,…

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

Imagine a dedicated financial expert tirelessly working behind the scenes, sifting through every transaction, every investment move, and every accounting entry. That's exactly what this automated syst

HTTP Request, Google Sheets, OpenAI +3
AI & RAG

This workflow automatically collects the latest technology news, filters for emerging topics, and uses AI to score relevance and generate clean, ready-to-share content. It helps you focus on high-impa

RSS Feed Read, OpenAI, Google Sheets +1
AI & RAG

(n8n + Google Sheets + OpenAI + Slack)

Google Sheets, Slack, OpenAI
AI & RAG

Automate your social media content pipeline from idea to scheduled post. This workflow reads content ideas from a Google Sheet, uses OpenAI to generate platform-optimized posts for LinkedIn, X (Twitte

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

Property management companies, building managers, and inspection teams who want to automate recurring property inspections, improve issue tracking, and streamline reporting.

Google Sheets, OpenAI, Gmail +2