AutomationFlowsData & Sheets › Reddit Monitor Master V3

Reddit Monitor Master V3

Reddit Monitor Master v3. Uses airtable, supabase, slack, httpRequest. Event-driven trigger; 52 nodes.

Event trigger★★★★★ complexity52 nodesAirtableSupabaseSlackHTTP RequestError Trigger
Data & Sheets Trigger: Event Nodes: 52 Complexity: ★★★★★ Added:

This workflow follows the Airtable → HTTP Request recipe pattern — see all workflows that pair these two integrations.

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "name": "Reddit Monitor Master v3",
  "nodes": [
    {
      "parameters": {},
      "id": "10cc083a-b028-4260-995e-dd7f30c585cc",
      "name": "Manual Trigger",
      "type": "n8n-nodes-base.manualTrigger",
      "typeVersion": 1,
      "position": [
        -1504,
        256
      ]
    },
    {
      "parameters": {
        "rule": {
          "interval": [
            {
              "field": "minutes",
              "minutesInterval": 15
            }
          ]
        }
      },
      "id": "3784a761-1f7b-461a-a3bd-9d95e3f981d1",
      "name": "Schedule Trigger",
      "type": "n8n-nodes-base.scheduleTrigger",
      "typeVersion": 1.2,
      "position": [
        -1504,
        448
      ]
    },
    {
      "parameters": {
        "httpMethod": "POST",
        "path": "reddit-monitor-webhook",
        "options": {}
      },
      "id": "db0bc28a-631f-4167-885e-e99bd70943ca",
      "name": "Webhook Trigger",
      "type": "n8n-nodes-base.webhook",
      "typeVersion": 1,
      "position": [
        -1504,
        640
      ]
    },
    {
      "parameters": {
        "jsCode": "const staticData = $getWorkflowStaticData('global');\nstaticData.redditCalls = 0;\nreturn [{\n  json: {\n    startTime: new Date().getTime(),\n    redditCalls: 0,\n    scannedCount: 0,\n    newCount: 0\n  }\n}];"
      },
      "id": "064b95f1-567d-4156-b886-f82da82ae9a4",
      "name": "Record Start Time",
      "type": "n8n-nodes-base.code",
      "typeVersion": 1,
      "position": [
        -1280,
        448
      ]
    },
    {
      "parameters": {
        "jsCode": "return [{\n  json: {\n    icp_description: \"Our ideal customer is a SaaS founder, agency owner, freelancer, or marketer looking for: payment alternatives, invoicing automation, workflow optimization, or lead generation tools. Key pain points include Stripe/Square deactivation, high processor fees, manual invoicing overhead, or lead prospecting bottlenecks.\",\n    target_roles: [\"Founder\", \"CEO\", \"Owner\", \"Freelancer\", \"Marketer\", \"Operator\"]\n  }\n}];"
      },
      "id": "9cddb94b-4e6f-48fa-b860-54e4d7cd753e",
      "name": "Define ICP Profile",
      "type": "n8n-nodes-base.code",
      "typeVersion": 1,
      "position": [
        -1056,
        448
      ]
    },
    {
      "parameters": {
        "operation": "search",
        "base": "appPKGU5OMe5HKqD6",
        "table": "Config",
        "options": {}
      },
      "id": "ff9548f0-2b25-4e6c-bba5-e44e64ec8337",
      "name": "Read Config Airtable",
      "type": "n8n-nodes-base.airtable",
      "typeVersion": 2,
      "position": [
        -384,
        304
      ],
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "getAll",
        "tableId": "pending_scans"
      },
      "id": "32f819d2-5add-4c20-b88d-54c1a09850e4",
      "name": "Fetch Pending Scans",
      "type": "n8n-nodes-base.supabase",
      "typeVersion": 1,
      "position": [
        -832,
        528
      ],
      "alwaysOutputData": true,
      "credentials": {
        "supabaseApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "combinator": "and",
          "conditions": [
            {
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.id }}"
            }
          ]
        },
        "options": {}
      },
      "id": "e6aff083-8268-4e51-ac85-089c65425fa6",
      "name": "Is Real Scan?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        -608,
        528
      ]
    },
    {
      "parameters": {
        "operation": "update",
        "tableId": "pending_scans",
        "filters": {
          "conditions": [
            {
              "keyName": "id",
              "condition": "eq",
              "keyValue": "={{ $json.id || 0 }}"
            }
          ]
        },
        "fieldsUi": {
          "fieldValues": [
            {
              "fieldId": "status",
              "fieldValue": "processing"
            },
            {
              "fieldId": "started_at",
              "fieldValue": "={{ new Date().toISOString() }}"
            }
          ]
        }
      },
      "id": "4f5b6e35-f3ab-4238-a9cb-d3428e13f408",
      "name": "Mark Pending Scans Processing",
      "type": "n8n-nodes-base.supabase",
      "typeVersion": 1,
      "position": [
        -384,
        592
      ],
      "credentials": {
        "supabaseApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {},
      "id": "e899f274-78a2-44b4-ad2b-cad9f0fc1122",
      "name": "Merge Scans and Configs",
      "type": "n8n-nodes-base.merge",
      "typeVersion": 1,
      "position": [
        -160,
        448
      ]
    },
    {
      "parameters": {
        "jsCode": "const items = $input.all();\nconst processed = [];\nfor (const item of items) {\n  let sub = item.json.subreddit;\n  let kw = item.json.keywords;\n  if (!sub || !kw) continue;\n  \n  sub = sub.trim();\n  if (sub.includes('/r/')) {\n    const parts = sub.split('/r/');\n    if (parts.length > 1) {\n      sub = parts[1];\n    }\n  } else if (sub.toLowerCase().startsWith('r/')) {\n    sub = sub.substring(2);\n  }\n  \n  // Clean trailing slashes and subpaths (e.g. \"SaaS/\" or \"SaaS/comments/...\")\n  sub = sub.split('/')[0].trim();\n  \n  if (sub && kw) {\n    processed.push({\n      json: {\n        ...item.json,\n        subreddit: sub,\n        keywords: kw.trim()\n      }\n    });\n  }\n}\nreturn processed;"
      },
      "id": "dbd00039-63d7-4f71-aa62-11a0188961ac",
      "name": "Filter Config List",
      "type": "n8n-nodes-base.code",
      "typeVersion": 1,
      "position": [
        64,
        448
      ]
    },
    {
      "parameters": {
        "batchSize": 1,
        "options": {}
      },
      "id": "a6f040c1-f0c4-4422-8d89-cd32fbac7f23",
      "name": "Loop Over Configs",
      "type": "n8n-nodes-base.splitInBatches",
      "typeVersion": 1,
      "position": [
        288,
        448
      ]
    },
    {
      "parameters": {
        "jsCode": "const staticData = $getWorkflowStaticData('global');\nconst currentConfig = $input.first().json;\nconst limitExceeded = (staticData.redditCalls || 0) >= 30;\nreturn [{\n  json: {\n    ...currentConfig,\n    limitExceeded\n  }\n}];"
      },
      "id": "08cfbb8e-565f-4b1b-87a1-12e35bb8875e",
      "name": "Rate Limiter Check",
      "type": "n8n-nodes-base.code",
      "typeVersion": 1,
      "position": [
        512,
        384
      ]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "combinator": "and",
          "conditions": [
            {
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              },
              "leftValue": "={{ $json.limitExceeded }}"
            }
          ]
        },
        "options": {}
      },
      "id": "d44b3376-6dac-4225-9b39-76266ddb9650",
      "name": "Check Rate Limit",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        736,
        384
      ]
    },
    {
      "parameters": {
        "tableId": "pending_scans",
        "fieldsUi": {
          "fieldValues": [
            {
              "fieldId": "subreddit",
              "fieldValue": "={{ $json.subreddit }}"
            },
            {
              "fieldId": "keywords",
              "fieldValue": "={{ $json.keywords }}"
            },
            {
              "fieldId": "priority",
              "fieldValue": "={{ $json.priority }}"
            },
            {
              "fieldId": "status",
              "fieldValue": "pending"
            }
          ]
        }
      },
      "id": "549e6aec-7d10-4a05-a07d-492e60d5787f",
      "name": "Queue Pending Scan",
      "type": "n8n-nodes-base.supabase",
      "typeVersion": 1,
      "position": [
        960,
        480
      ],
      "credentials": {
        "supabaseApi": {
          "name": "<your credential>"
        }
      },
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "combinator": "and",
          "conditions": [
            {
              "operator": {
                "type": "string",
                "operation": "notEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.error }}"
            }
          ]
        },
        "options": {}
      },
      "id": "d7b1db90-ba06-444f-89d1-38a5a9efa6fd",
      "name": "Check Queue Error",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        1184,
        480
      ]
    },
    {
      "parameters": {
        "channel": "#reddit-monitor",
        "text": "=\ud83d\udea8 *Queue Pending Scan Failed*\n*Error:* {{ $json.error?.message || \"Unknown error during insert\" }}\n*Subreddit:* {{ $('Loop Over Configs').item.json.subreddit }}\n*Keywords:* {{ $('Loop Over Configs').item.json.keywords }}",
        "otherOptions": {},
        "attachments": []
      },
      "id": "f03578f1-0f9f-4636-9be8-9f1cd4f6aa0a",
      "name": "Queue Error Alert",
      "type": "n8n-nodes-base.slack",
      "typeVersion": 1,
      "position": [
        1408,
        544
      ],
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "authentication": "headerAuth",
        "url": "https://api.zernio.com/v1/reddit/search",
        "options": {},
        "queryParametersUi": {
          "parameter": [
            {
              "name": "q",
              "value": "={{ $json.keywords }}"
            },
            {
              "name": "subreddit",
              "value": "={{ $json.subreddit }}"
            },
            {
              "name": "accountId",
              "value": "={{ $json.zernio_account_id || \"6a22ca6d2b2567671ae23132\" }}"
            },
            {
              "name": "sort",
              "value": "new"
            },
            {
              "name": "limit",
              "value": "25"
            }
          ]
        }
      },
      "id": "bf16ea22-1017-4328-945f-12cf049f1c70",
      "name": "Search Reddit",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 1,
      "position": [
        1184,
        240
      ],
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "const staticData = $getWorkflowStaticData('global');\nstaticData.redditCalls = (staticData.redditCalls || 0) + 1;\nreturn $input.all();"
      },
      "id": "e3cc9ced-976e-4fba-bd46-87112939b860",
      "name": "Increment Rate Counter",
      "type": "n8n-nodes-base.code",
      "typeVersion": 1,
      "position": [
        1408,
        240
      ]
    },
    {
      "parameters": {
        "unit": "seconds"
      },
      "id": "96300e66-c75a-455b-97f2-cc6619a71d69",
      "name": "Wait 1s",
      "type": "n8n-nodes-base.wait",
      "typeVersion": 1,
      "position": [
        1632,
        400
      ]
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "combinator": "and",
          "conditions": [
            {
              "operator": {
                "type": "boolean",
                "operation": "true",
                "singleValue": true
              },
              "leftValue": "={{ $('Loop Over Configs').context.noItemsLeft }}"
            }
          ]
        },
        "options": {}
      },
      "id": "2dfd7a6c-6083-4cdc-9433-a40837bc6f9e",
      "name": "Loop Check IF",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        1856,
        544
      ]
    },
    {
      "parameters": {
        "jsCode": "const allPosts = [];\nlet items = [];\ntry {\n  items = $('Search Reddit').all();\n} catch (e) {\n  // Search Reddit hasn't been executed\n}\nfor (const item of items) {\n  const data = item.json;\n  if (!data) continue;\n  \n  let posts = [];\n  if (Array.isArray(data)) {\n    posts = data;\n  } else if (data.items && Array.isArray(data.items)) {\n    posts = data.items;\n  } else if (data.posts && Array.isArray(data.posts)) {\n    posts = data.posts;\n  } else if (data.data && Array.isArray(data.data)) {\n    posts = data.data;\n  } else if (data.data && data.data.children && Array.isArray(data.data.children)) {\n    posts = data.data.children.map(c => c.data || c);\n  } else if (typeof data === 'object') {\n    posts = [data];\n  }\n  \n  for (const p of posts) {\n    if (p) {\n      allPosts.push(p);\n    }\n  }\n}\n\nconst seenIds = new Set();\nconst uniquePosts = [];\nfor (const post of allPosts) {\n  const id = post.id || post._id || post.post_id || post.postId;\n  if (id && !seenIds.has(id)) {\n    seenIds.add(id);\n    uniquePosts.push(post);\n  }\n}\n\nreturn uniquePosts.map(p => ({ json: p }));"
      },
      "id": "9783b282-2ce0-4844-9f7c-f75119a2d295",
      "name": "Gather Posts",
      "type": "n8n-nodes-base.code",
      "typeVersion": 1,
      "position": [
        2080,
        544
      ]
    },
    {
      "parameters": {
        "jsCode": "let crypto;\ntry {\n  crypto = require('crypto');\n} catch (e) {}\n\nconst posts = $input.all();\nreturn posts.map(item => {\n  const post = item.json;\n  const id = post.id || post._id || post.post_id || post.postId || '';\n  const title = post.title || post.subject || '';\n  const body = post.selftext || post.body || post.content || '';\n  \n  let url = post.url || post.permalink || '';\n  if (url && url.startsWith('/')) {\n    url = 'https://www.reddit.com' + url;\n  }\n  \n  const subreddit = post.subreddit || '';\n  const upvotes = post.ups || post.upvotes || post.score || 0;\n  \n  let createdTime = post.created_time || post.created_utc || post.createdAt || post.created || '';\n  if (createdTime) {\n    if (typeof createdTime === 'number') {\n      if (createdTime < 1e11) {\n        createdTime = new Date(createdTime * 1000).toISOString();\n      } else {\n        createdTime = new Date(createdTime).toISOString();\n      }\n    } else {\n      try {\n        createdTime = new Date(createdTime).toISOString();\n      } catch (e) {\n        createdTime = new Date().toISOString();\n      }\n    }\n  } else {\n    createdTime = new Date().toISOString();\n  }\n  \n  const textToHash = (title + body).trim().toLowerCase();\n  \n  let hash = '';\n  if (crypto) {\n    hash = crypto.createHash('md5').update(textToHash).digest('hex');\n  } else {\n    let hval = 0x811c9dc5;\n    for (let i = 0; i < textToHash.length; i++) {\n      hval ^= textToHash.charCodeAt(i);\n      hval += (hval << 1) + (hval << 4) + (hval << 7) + (hval << 8) + (hval << 24);\n    }\n    hash = (hval >>> 0).toString(16).padStart(8, '0');\n  }\n  \n  return {\n    json: {\n      post_id: id,\n      title: title,\n      body: body,\n      url: url,\n      subreddit: subreddit,\n      upvotes: upvotes,\n      created_time: createdTime,\n      content_hash: hash,\n      source: 'reddit'\n    }\n  };\n});"
      },
      "id": "d0844bbe-7be0-4846-ae7f-8d53803911f2",
      "name": "Prepare Post Hashes",
      "type": "n8n-nodes-base.code",
      "typeVersion": 1,
      "position": [
        2304,
        544
      ]
    },
    {
      "parameters": {
        "operation": "getAll",
        "tableId": "seen_posts",
        "filters": {
          "conditions": [
            {
              "keyName": "post_id",
              "condition": "eq",
              "keyValue": "={{ $json.post_id }}"
            },
            {
              "keyName": "content_hash",
              "condition": "eq",
              "keyValue": "={{ $json.content_hash }}"
            }
          ]
        }
      },
      "id": "614e230f-c9ca-4224-9368-e2793977e6f6",
      "name": "Check Seen Status",
      "type": "n8n-nodes-base.supabase",
      "typeVersion": 1,
      "position": [
        2528,
        544
      ],
      "alwaysOutputData": true,
      "credentials": {
        "supabaseApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "combinator": "and",
          "conditions": [
            {
              "operator": {
                "type": "string",
                "operation": "isEmpty",
                "singleValue": true
              },
              "leftValue": "={{ $json.id }}"
            }
          ]
        },
        "options": {}
      },
      "id": "cfb3bf37-1b0c-4241-a599-ae7a4c3288b9",
      "name": "Filter New Posts",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        2752,
        544
      ]
    },
    {
      "parameters": {
        "tableId": "seen_posts",
        "fieldsUi": {
          "fieldValues": [
            {
              "fieldId": "post_id",
              "fieldValue": "={{ $json.post_id }}"
            },
            {
              "fieldId": "content_hash",
              "fieldValue": "={{ $json.content_hash }}"
            },
            {
              "fieldId": "source",
              "fieldValue": "reddit"
            },
            {
              "fieldId": "subreddit",
              "fieldValue": "={{ $json.subreddit }}"
            }
          ]
        }
      },
      "id": "0ae426bc-3c86-478e-9818-49a052e39c3c",
      "name": "Insert Seen Post",
      "type": "n8n-nodes-base.supabase",
      "typeVersion": 1,
      "position": [
        2976,
        640
      ],
      "credentials": {
        "supabaseApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "authentication": "headerAuth",
        "url": "https://openrouter.ai/api/v1/chat/completions",
        "jsonParameters": true,
        "options": {}
      },
      "id": "4a510334-a70e-4b00-a08b-fe94e4a13436",
      "name": "OpenAI Direct API",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 1,
      "position": [
        3200,
        640
      ],
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "jsCode": "const response = $input.first().json;\nconst content = response.choices && response.choices[0] && response.choices[0].message ? response.choices[0].message.content : '{}';\n\nlet parsed;\ntry {\n  const cleanJson = content.replace(/\\`\\`\\`json\\n?/g, '').replace(/\\`\\`\\`\\n?/g, '').trim();\n  parsed = JSON.parse(cleanJson);\n} catch (e) {\n  parsed = {\n    summary: 'Parse error: ' + content.substring(0, 100),\n    sentiment: 'neutral',\n    intent: 'unknown',\n    relevance_score: 0,\n    urgency: 'low',\n    business_opportunity_score: 0,\n    recommended_action: 'archive',\n    competitor_mentioned: 'no',\n    brand_mentioned: 'no',\n    pain_point_category: 'None',\n    pain_point_description: 'None',\n    pain_point_severity: 0\n  };\n}\n\nreturn [{\n  json: {\n    ...parsed,\n    raw_response: content\n  }\n}];"
      },
      "id": "1099bee4-b4a7-455c-852f-295278707c90",
      "name": "Parse AI Response",
      "type": "n8n-nodes-base.code",
      "typeVersion": 1,
      "position": [
        3424,
        640
      ]
    },
    {
      "parameters": {
        "values": {
          "string": [
            {
              "name": "post_id",
              "value": "={{ $('Prepare Post Hashes').item.json.post_id }}"
            },
            {
              "name": "title",
              "value": "={{ $('Prepare Post Hashes').item.json.title }}"
            },
            {
              "name": "body",
              "value": "={{ $('Prepare Post Hashes').item.json.body }}"
            },
            {
              "name": "url",
              "value": "={{ $('Prepare Post Hashes').item.json.url }}"
            },
            {
              "name": "subreddit",
              "value": "={{ $('Prepare Post Hashes').item.json.subreddit }}"
            },
            {
              "name": "upvotes",
              "value": "={{ $('Prepare Post Hashes').item.json.upvotes }}"
            },
            {
              "name": "created_time",
              "value": "={{ $('Prepare Post Hashes').item.json.created_time }}"
            },
            {
              "name": "content_hash",
              "value": "={{ $('Prepare Post Hashes').item.json.content_hash }}"
            },
            {
              "name": "summary",
              "value": "={{ $json.summary }}"
            },
            {
              "name": "sentiment",
              "value": "={{ $json.sentiment }}"
            },
            {
              "name": "intent",
              "value": "={{ $json.intent }}"
            },
            {
              "name": "relevance_score",
              "value": "={{ $json.relevance_score }}"
            },
            {
              "name": "urgency",
              "value": "={{ $json.urgency }}"
            },
            {
              "name": "business_opportunity_score",
              "value": "={{ $json.business_opportunity_score }}"
            },
            {
              "name": "recommended_action",
              "value": "={{ $json.recommended_action }}"
            },
            {
              "name": "competitor_mentioned",
              "value": "={{ $json.competitor_mentioned }}"
            },
            {
              "name": "brand_mentioned",
              "value": "={{ $json.brand_mentioned }}"
            },
            {
              "name": "pain_point_category",
              "value": "={{ $json.pain_point_category }}"
            },
            {
              "name": "pain_point_description",
              "value": "={{ $json.pain_point_description }}"
            },
            {
              "name": "pain_point_severity",
              "value": "={{ $json.pain_point_severity }}"
            }
          ]
        },
        "options": {}
      },
      "id": "e4048abf-e260-42b2-a7fd-153231af03d7",
      "name": "Pass Post Data",
      "type": "n8n-nodes-base.set",
      "typeVersion": 1,
      "position": [
        3648,
        640
      ]
    },
    {
      "parameters": {
        "rules": {
          "rules": [
            {},
            {},
            {}
          ]
        }
      },
      "id": "7c46ac1e-edf0-4baf-bcf2-11c6511b213d",
      "name": "Route Analysis",
      "type": "n8n-nodes-base.switch",
      "typeVersion": 1,
      "position": [
        3872,
        416
      ]
    },
    {
      "parameters": {
        "tableId": "posts",
        "fieldsUi": {
          "fieldValues": [
            {
              "fieldId": "post_id",
              "fieldValue": "={{ $json.post_id }}"
            },
            {
              "fieldId": "subreddit",
              "fieldValue": "={{ $json.subreddit }}"
            },
            {
              "fieldId": "title",
              "fieldValue": "={{ $json.title }}"
            },
            {
              "fieldId": "body",
              "fieldValue": "={{ $json.body }}"
            },
            {
              "fieldId": "url",
              "fieldValue": "={{ $json.url }}"
            },
            {
              "fieldId": "upvotes",
              "fieldValue": "={{ $json.upvotes }}"
            },
            {
              "fieldId": "created_time",
              "fieldValue": "={{ $json.created_time }}"
            },
            {
              "fieldId": "sentiment",
              "fieldValue": "={{ $json.sentiment }}"
            },
            {
              "fieldId": "intent",
              "fieldValue": "={{ $json.intent }}"
            },
            {
              "fieldId": "relevance_score",
              "fieldValue": "={{ $json.relevance_score }}"
            },
            {
              "fieldId": "urgency",
              "fieldValue": "={{ $json.urgency }}"
            },
            {
              "fieldId": "business_opportunity_score",
              "fieldValue": "={{ $json.business_opportunity_score }}"
            },
            {
              "fieldId": "recommended_action",
              "fieldValue": "alert"
            },
            {
              "fieldId": "competitor_mentioned",
              "fieldValue": "={{ $json.competitor_mentioned }}"
            },
            {
              "fieldId": "brand_mentioned",
              "fieldValue": "={{ $json.brand_mentioned }}"
            },
            {
              "fieldId": "summary",
              "fieldValue": "={{ $json.summary }}"
            },
            {
              "fieldId": "pain_point_category",
              "fieldValue": "={{ $json.pain_point_category }}"
            },
            {
              "fieldId": "pain_point_description",
              "fieldValue": "={{ $json.pain_point_description }}"
            },
            {
              "fieldId": "pain_point_severity",
              "fieldValue": "={{ $json.pain_point_severity }}"
            }
          ]
        }
      },
      "id": "6da6d898-477d-4a1d-a3b2-aa35147d2c5a",
      "name": "Insert Post (Immediate)",
      "type": "n8n-nodes-base.supabase",
      "typeVersion": 1,
      "position": [
        4096,
        160
      ],
      "credentials": {
        "supabaseApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "channel": "#reddit-monitor",
        "text": "=\ud83d\udea8 *Immediate Lead Alert: High Relevance Opportunity*\n*Subreddit:* r/{{ $json.subreddit }}\n*Title:* {{ $json.title }}\n*Relevance Score:* {{ $json.relevance_score }}/100 | *Opportunity Score:* {{ $json.business_opportunity_score }}/10\n*Summary:* {{ $json.summary }}\n*Sentiment:* {{ $json.sentiment }} | *Intent:* {{ $json.intent }}\n*Link:* {{ $json.url }}",
        "otherOptions": {},
        "attachments": []
      },
      "id": "028145bd-a360-4228-a9bd-261add6014a1",
      "name": "Send Slack Alert",
      "type": "n8n-nodes-base.slack",
      "typeVersion": 1,
      "position": [
        4320,
        160
      ],
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "authentication": "headerAuth",
        "url": "https://api.clickup.com/api/v2/list/YOUR_CLICKUP_LIST_ID/task",
        "jsonParameters": true,
        "options": {}
      },
      "id": "60c69c95-25e2-4de8-9af4-d1e7b6456cbe",
      "name": "Create ClickUp Task",
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 1,
      "position": [
        4544,
        160
      ],
      "credentials": {
        "httpHeaderAuth": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "tableId": "alerts",
        "fieldsUi": {
          "fieldValues": [
            {
              "fieldId": "post_id",
              "fieldValue": "={{ $json.post_id }}"
            },
            {
              "fieldId": "channel",
              "fieldValue": "slack+gmail+crm"
            },
            {
              "fieldId": "status",
              "fieldValue": "sent"
            }
          ]
        }
      },
      "id": "e9bdf140-f353-41ea-a2b4-b906d1affde6",
      "name": "Log Alert Sent",
      "type": "n8n-nodes-base.supabase",
      "typeVersion": 1,
      "position": [
        4768,
        160
      ],
      "credentials": {
        "supabaseApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "create",
        "base": "appPKGU5OMe5HKqD6",
        "table": "Weekly-Report",
        "options": {}
      },
      "id": "dbde68a5-2d11-4677-91af-350c2fd1c79b",
      "name": "Log Immediate to Airtable",
      "type": "n8n-nodes-base.airtable",
      "typeVersion": 2,
      "position": [
        4992,
        160
      ],
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      },
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "tableId": "posts",
        "fieldsUi": {
          "fieldValues": [
            {
              "fieldId": "post_id",
              "fieldValue": "={{ $json.post_id }}"
            },
            {
              "fieldId": "subreddit",
              "fieldValue": "={{ $json.subreddit }}"
            },
            {
              "fieldId": "title",
              "fieldValue": "={{ $json.title }}"
            },
            {
              "fieldId": "body",
              "fieldValue": "={{ $json.body }}"
            },
            {
              "fieldId": "url",
              "fieldValue": "={{ $json.url }}"
            },
            {
              "fieldId": "upvotes",
              "fieldValue": "={{ $json.upvotes }}"
            },
            {
              "fieldId": "created_time",
              "fieldValue": "={{ $json.created_time }}"
            },
            {
              "fieldId": "sentiment",
              "fieldValue": "={{ $json.sentiment }}"
            },
            {
              "fieldId": "intent",
              "fieldValue": "={{ $json.intent }}"
            },
            {
              "fieldId": "relevance_score",
              "fieldValue": "={{ $json.relevance_score }}"
            },
            {
              "fieldId": "urgency",
              "fieldValue": "={{ $json.urgency }}"
            },
            {
              "fieldId": "business_opportunity_score",
              "fieldValue": "={{ $json.business_opportunity_score }}"
            },
            {
              "fieldId": "recommended_action",
              "fieldValue": "digest"
            },
            {
              "fieldId": "competitor_mentioned",
              "fieldValue": "={{ $json.competitor_mentioned }}"
            },
            {
              "fieldId": "brand_mentioned",
              "fieldValue": "={{ $json.brand_mentioned }}"
            },
            {
              "fieldId": "summary",
              "fieldValue": "={{ $json.summary }}"
            },
            {
              "fieldId": "pain_point_category",
              "fieldValue": "={{ $json.pain_point_category }}"
            },
            {
              "fieldId": "pain_point_description",
              "fieldValue": "={{ $json.pain_point_description }}"
            },
            {
              "fieldId": "pain_point_severity",
              "fieldValue": "={{ $json.pain_point_severity }}"
            }
          ]
        }
      },
      "id": "20d55ecf-7233-45a2-b069-4460e5344055",
      "name": "Insert Post (Digest)",
      "type": "n8n-nodes-base.supabase",
      "typeVersion": 1,
      "position": [
        4544,
        352
      ],
      "credentials": {
        "supabaseApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "tableId": "digest_queue",
        "fieldsUi": {
          "fieldValues": [
            {
              "fieldId": "post_id",
              "fieldValue": "={{ $json.post_id }}"
            },
            {
              "fieldId": "status",
              "fieldValue": "pending"
            }
          ]
        }
      },
      "id": "94049fa0-e5b4-46a1-91e9-d2d0cd1992ea",
      "name": "Add to Digest Queue",
      "type": "n8n-nodes-base.supabase",
      "typeVersion": 1,
      "position": [
        4768,
        352
      ],
      "credentials": {
        "supabaseApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "create",
        "base": "appPKGU5OMe5HKqD6",
        "table": "Weekly-Report",
        "options": {}
      },
      "id": "4c86b1f4-ef82-43d4-9cd3-2500522db2a5",
      "name": "Log Digest to Airtable",
      "type": "n8n-nodes-base.airtable",
      "typeVersion": 2,
      "position": [
        4992,
        352
      ],
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      },
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "tableId": "posts",
        "fieldsUi": {
          "fieldValues": [
            {
              "fieldId": "post_id",
              "fieldValue": "={{ $json.post_id }}"
            },
            {
              "fieldId": "subreddit",
              "fieldValue": "={{ $json.subreddit }}"
            },
            {
              "fieldId": "title",
              "fieldValue": "={{ $json.title }}"
            },
            {
              "fieldId": "body",
              "fieldValue": "={{ $json.body }}"
            },
            {
              "fieldId": "url",
              "fieldValue": "={{ $json.url }}"
            },
            {
              "fieldId": "upvotes",
              "fieldValue": "={{ $json.upvotes }}"
            },
            {
              "fieldId": "created_time",
              "fieldValue": "={{ $json.created_time }}"
            },
            {
              "fieldId": "sentiment",
              "fieldValue": "={{ $json.sentiment }}"
            },
            {
              "fieldId": "intent",
              "fieldValue": "={{ $json.intent }}"
            },
            {
              "fieldId": "relevance_score",
              "fieldValue": "={{ $json.relevance_score }}"
            },
            {
              "fieldId": "urgency",
              "fieldValue": "={{ $json.urgency }}"
            },
            {
              "fieldId": "business_opportunity_score",
              "fieldValue": "={{ $json.business_opportunity_score }}"
            },
            {
              "fieldId": "recommended_action",
              "fieldValue": "trend_analysis"
            },
            {
              "fieldId": "competitor_mentioned",
              "fieldValue": "={{ $json.competitor_mentioned }}"
            },
            {
              "fieldId": "brand_mentioned",
              "fieldValue": "={{ $json.brand_mentioned }}"
            },
            {
              "fieldId": "summary",
              "fieldValue": "={{ $json.summary }}"
            },
            {
              "fieldId": "pain_point_category",
              "fieldValue": "={{ $json.pain_point_category }}"
            },
            {
              "fieldId": "pain_point_description",
              "fieldValue": "={{ $json.pain_point_description }}"
            },
            {
              "fieldId": "pain_point_severity",
              "fieldValue": "={{ $json.pain_point_severity }}"
            }
          ]
        }
      },
      "id": "e8c3ef96-9c34-49a0-8f05-75a43c948842",
      "name": "Insert Post (Trend)",
      "type": "n8n-nodes-base.supabase",
      "typeVersion": 1,
      "position": [
        4544,
        544
      ],
      "credentials": {
        "supabaseApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "tableId": "trend_analysis",
        "fieldsUi": {
          "fieldValues": [
            {
              "fieldId": "post_id",
              "fieldValue": "={{ $json.post_id }}"
            },
            {
              "fieldId": "status",
              "fieldValue": "pending"
            }
          ]
        }
      },
      "id": "37442563-71fb-4cb0-b026-350b7d417c8f",
      "name": "Add to Trend Queue",
      "type": "n8n-nodes-base.supabase",
      "typeVersion": 1,
      "position": [
        4768,
        544
      ],
      "credentials": {
        "supabaseApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "create",
        "base": "appPKGU5OMe5HKqD6",
        "table": "Weekly-Report",
        "options": {}
      },
      "id": "08d946ad-c2bb-4f49-9dd2-150918b01787",
      "name": "Log Trend to Airtable",
      "type": "n8n-nodes-base.airtable",
      "typeVersion": 2,
      "position": [
        4992,
        544
      ],
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      },
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "tableId": "posts",
        "fieldsUi": {
          "fieldValues": [
            {
              "fieldId": "post_id",
              "fieldValue": "={{ $json.post_id }}"
            },
            {
              "fieldId": "subreddit",
              "fieldValue": "={{ $json.subreddit }}"
            },
            {
              "fieldId": "title",
              "fieldValue": "={{ $json.title }}"
            },
            {
              "fieldId": "body",
              "fieldValue": "={{ $json.body }}"
            },
            {
              "fieldId": "url",
              "fieldValue": "={{ $json.url }}"
            },
            {
              "fieldId": "upvotes",
              "fieldValue": "={{ $json.upvotes }}"
            },
            {
              "fieldId": "created_time",
              "fieldValue": "={{ $json.created_time }}"
            },
            {
              "fieldId": "sentiment",
              "fieldValue": "={{ $json.sentiment }}"
            },
            {
              "fieldId": "intent",
              "fieldValue": "={{ $json.intent }}"
            },
            {
              "fieldId": "relevance_score",
              "fieldValue": "={{ $json.relevance_score }}"
            },
            {
              "fieldId": "urgency",
              "fieldValue": "={{ $json.urgency }}"
            },
            {
              "fieldId": "business_opportunity_score",
              "fieldValue": "={{ $json.business_opportunity_score }}"
            },
            {
              "fieldId": "recommended_action",
              "fieldValue": "archive"
            },
            {
              "fieldId": "competitor_mentioned",
              "fieldValue": "={{ $json.competitor_mentioned }}"
            },
            {
              "fieldId": "brand_mentioned",
              "fieldValue": "={{ $json.brand_mentioned }}"
            },
            {
              "fieldId": "summary",
              "fieldValue": "={{ $json.summary }}"
            },
            {
              "fieldId": "pain_point_category",
              "fieldValue": "={{ $json.pain_point_category }}"
            },
            {
              "fieldId": "pain_point_description",
              "fieldValue": "={{ $json.pain_point_description }}"
            },
            {
              "fieldId": "pain_point_severity",
              "fieldValue": "={{ $json.pain_point_severity }}"
            }
          ]
        }
      },
      "id": "bab645d8-a0b8-47c9-9818-1b918ff52461",
      "name": "Insert Post (Archive)",
      "type": "n8n-nodes-base.supabase",
      "typeVersion": 1,
      "position": [
        4768,
        736
      ],
      "credentials": {
        "supabaseApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "create",
        "base": "appPKGU5OMe5HKqD6",
        "table": "Weekly-Report",
        "options": {}
      },
      "id": "56657240-4daf-4ba0-b1db-00ed8ebaa26c",
      "name": "Log Archive to Airtable",
      "type": "n8n-nodes-base.airtable",
      "typeVersion": 2,
      "position": [
        4992,
        736
      ],
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      },
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "conditions": {
          "options": {
            "caseSensitive": true,
            "leftValue": "",
            "typeValidation": "strict",
            "version": 2
          },
          "combinator": "and",
          "conditions": [
            {
              "operator": {
                "type": "number",
                "operation": "greaterEqual",
                "singleValue": true
              },
              "leftValue": "={{ $json.pain_point_severity }}",
              "rightValue": 5
            }
          ]
        },
        "options": {}
      },
      "id": "4d60bc0e-0efe-4911-aeda-36b27ed7e744",
      "name": "Is Pain Point?",
      "type": "n8n-nodes-base.if",
      "typeVersion": 2,
      "position": [
        3872,
        880
      ]
    },
    {
      "parameters": {
        "channel": "#reddit-pain-points",
        "text": "=\ud83d\udd25 *New Industry Pain Point Identified* (Severity: {{ $json.pain_point_severity }}/10)\n*Subreddit:* r/{{ $json.subreddit }}\n*Category:* {{ $json.pain_point_category }}\n*Analysis:* {{ $json.pain_point_description }}\n*Post Title:* {{ $json.title }}\n*Link:* {{ $json.url }}",
        "otherOptions": {},
        "attachments": []
      },
      "id": "bf6c9d83-98d6-4561-9f9a-2d4ab41d5b0b",
      "name": "Send Pain Point Slack Alert",
      "type": "n8n-nodes-base.slack",
      "typeVersion": 1,
      "position": [
        4096,
        880
      ],
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "create",
        "base": "appPKGU5OMe5HKqD6",
        "table": "Pain-Points",
        "options": {}
      },
      "id": "915785b6-c0e1-4133-97c0-98f4d995a634",
      "name": "Log Pain Point to Airtable",
      "type": "n8n-nodes-base.airtable",
      "typeVersion": 2,
      "position": [
        4320,
        880
      ],
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      },
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {
        "numberInputs": 5
      },
      "id": "30900401-f253-4d5e-b09d-b0c115856a51",
      "name": "Consolidate Run Data",
      "type": "n8n-nodes-base.merge",
      "typeVersion": 3,
      "position": [
        5216,
        336
      ]
    },
    {
      "parameters": {
        "jsCode": "const items = $input.all();\nconst newPosts = items.filter(item => item.json.recommended_action !== undefined);\nlet totalScanned = 0;\ntry { totalScanned = $('Gather Posts').all().length; } catch(e) {}\nconst duration = new Date().getTime() - ($('Record Start Time').first().json.startTime || Date.now());\nconst newPostsCount = newPosts.length;\nconst aiCost = newPostsCount * 0.0002;\n\nreturn [{\n  json: {\n    duration_ms: duration,\n    posts_scanned: totalScanned,\n    new_posts_found: newPostsCount,\n    ai_cost: aiCost,\n    run_timestamp: new Date().toISOString()\n  }\n}];"
      },
      "id": "d7fc8f9f-99bd-4d76-9b0d-ce20ffe62c81",
      "name": "Calculate Health Stats",
      "type": "n8n-nodes-base.code",
      "typeVersion": 1,
      "position": [
        5440,
        384
      ]
    },
    {
      "parameters": {
        "tableId": "monitor_health",
        "fieldsUi": {
          "fieldValues": [
            {
              "fieldId": "duration_ms",
              "fieldValue": "={{ $json.duration_ms }}"
            },
            {
              "fieldId": "posts_scanned",
              "fieldValue": "={{ $json.posts_scanned }}"
            },
            {
              "fieldId": "new_posts_found",
              "fieldValue": "={{ $json.new_posts_found }}"
            },
            {
              "fieldId": "ai_cost",
              "fieldValue": "={{ $json.ai_cost }}"
            }
          ]
        }
      },
      "id": "ec43b994-2bf6-47fa-aebd-0359441931c3",
      "name": "Log Run Stats",
      "type": "n8n-nodes-base.supabase",
      "typeVersion": 1,
      "position": [
        5664,
        384
      ],
      "credentials": {
        "supabaseApi": {
          "name": "<your credential>"
        }
      }
    },
    {
      "parameters": {
        "operation": "create",
        "base": "appPKGU5OMe5HKqD6",
        "table": "Run-Stats",
        "options": {}
      },
      "id": "3211273e-0051-4e3d-a4af-c63675236eb9",
      "name": "Log Run Stats to Airtable",
      "type": "n8n-nodes-base.airtable",
      "typeVersion": 2,
      "position": [
        5888,
        384
      ],
      "credentials": {
        "airtableTokenApi": {
          "name": "<your credential>"
        }
      },
      "onError": "continueRegularOutput"
    },
    {
      "parameters": {},
      "id": "7821bde7-df81-4bc4-91a0-5c0122df5085",
      "name": "Error Trigger",
      "type": "n8n-nodes-base.errorTrigger",
      "typeVersion": 1,
      "position": [
        -1504,
        1104
      ]
    },
    {
      "parameters": {
        "channel": "#reddit-monitor",
        "text": "=\ud83d\udea8 *Reddit Monitor Master Failure*\n*Error Name:* {{ $json.execution.error.name }}\n*Error Message:* {{ $json.execution.error.message }}\n*Workflow ID:* {{ $json.workflow.id }}\n*Execution ID:* {{ $json.execution.id }}",
        "otherOptions": {},
        "attachments": []
      },
      "id": "197af8bd-2129-40e6-aa17-0c57547835d9",
      "name": "Slack Error Notification",
      "type": "n8n-nodes-base.slack",
      "typeVersion": 1,
      "position": [
        -1280,
        1104
      ],
      "credentials": {
        "slackApi": {
          "name": "<your credential>"
        }
      }
    }
  ],
  "connections": {
    "Manual Trigger": {
      "main": [
        [
          {
            "node": "Record Start Time",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Schedule Trigger": {
      "main": [
        [
          {
            "node": "Record Start Time",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Webhook Trigger": {
      "main": [
        [
          {
            "node": "Record Start Time",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Record Start Time": {
      "main": [
        [
          {
            "node": "Define ICP Profile",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Define ICP Profile": {
      "main": [
        [
          {
            "node": "Read Config Airtable",
            "type": "main",
            "index": 0
          },
          {
            "node": "Fetch Pending Scans",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Fetch Pending Scans": {
      "main": [
        [
          {
            "node": "Is Real Scan?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Is Real Scan?": {
      "main": [
        [
          {
            "node": "Mark Pending Scans Processing",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Merge Scans and Configs",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Mark Pending Scans Processing": {
      "main": [
        [
          {
            "node": "Merge Scans and Configs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read Config Airtable": {
      "main": [
        [
          {
            "node": "Merge Scans and Configs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Merge Scans and Configs": {
      "main": [
        [
          {
            "node": "Filter Config List",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter Config List": {
      "main": [
        [
          {
            "node": "Loop Over Configs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Configs": {
      "main": [
        [
          {
            "node": "Rate Limiter Check",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Rate Limiter Check": {
      "main": [
        [
          {
            "node": "Check Rate Limit",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Rate Limit": {
      "main": [
        [
          {
            "node": "Queue Pending Scan",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Search Reddit",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Queue Pending Scan": {
      "main": [
        [
          {
            "node": "Check Queue Error",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Queue Error": {
      "main": [
        [
          {
            "node": "Queue Error Alert",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait 1s",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Queue Error Alert": {
      "main": [
        [
          {
            "node": "Wait 1s",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Search Reddit": {
      "main": [
        [
          {
            "node": "Increment Rate Counter",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Increment Rate Counter": {
      "main": [
        [
          {
            "node": "Wait 1s",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait 1s": {
      "main": [
        [
          {
            "node": "Loop Check IF",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Check IF": {
      "main": [
        [
          {
            "node": "Gather Posts",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Loop Over Configs",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Gather Posts": {
      "main": [
        [
          {
            "node": "Prepare Post Hashes",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Prepare Post Hashes": {
      "main": [
        [
          {
            "node": "Check Seen Status",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Check Seen Status": {
      "main": [
        [
          {
            "node": "Filter New Posts",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Filter New Posts": {
      "main": [
        [
          {
            "node": "Insert Seen Post",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Consolidate Run Data",
            "type": "main",
            "index": 4
          }
        ]
      ]
    },
    "Insert Seen Post": {
      "main": [
        [
          {
            "node": "OpenAI Direct API",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "OpenAI Direct API": {
      "main": [
        [
          {
            "node": "Parse AI Response",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Parse AI Response": {
      "main": [
        [
          {
            "node": "Pass Post Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Pass Post Data": {
      "main": [
        [
          {
            "node": "Route Analysis",
            "type": "main",
            "index": 0
          },
          {
            "node": "Is Pain Point?",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Is Pain Point?": {
      "main": [
        [
          {
            "node": "Send Pain Point Slack Alert",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Pain Point Slack Alert": {
      "main": [
        [
          {
            "node": "Log Pain Point to Airtable",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Route Analysis": {
      "main": [
        [
          {
            "node": "Insert Post (Immediate)",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Insert Post (Digest)",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Insert Post (Trend)",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Insert Post (Archive)",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Insert Post (Immediate)": {
      "main": [
        [
          {
            "node": "Send Slack Alert",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Send Slack Alert": {
      "main": [
        [
          {
            "node": "Create ClickUp Task",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Create ClickUp Task": {
      "main": [
        [
          {
            "node": "Log Alert Sent",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Log Alert Sent": {
      "main": [
        [
          {
            "node": "Log Immediate to Airtable",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Log Immediate to Airtable": {
      "main": [
        [
          {
            "node": "Consolidate Run Data",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Insert Post (Digest)": {
      "main": [
        [
          {
            "node": "Add to Digest Queue",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Add to Digest Queue": {
      "main": [
        [
          {
            "node": "Log Digest to Airtable",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Log Digest to Airtable": {
      "main": [
        [
          {
            "node": "Consolidate Run Data",
            "type": "main",
            "index": 1
          }
        ]
      ]
    },
    "Insert Post (Trend)": {
      "main": [
        [
          {
            "node": "Add to Trend Queue",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Add to Trend Queue": {
      "main": [
        [
          {
            "node": "Log Trend to Airtable",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Log Trend to Airtable": {
      "main": [
        [
          {
            "node": "Consolidate Run Data",
            "type": "main",
            "index": 2
          }
        ]
      ]
    },
    "Insert Post (Archive)": {
      "main": [
        [
          {
            "node": "Log Archive to Airtable",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Log Archive to Airtable": {
      "main": [
        [
          {
            "node": "Consolidate Run Data",
            "type": "main",
            "index": 3
          }
        ]
      ]
    },
    "Consolidate Run Data": {
      "main": [
        [
          {
            "node": "Calculate Health Stats",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Calculate Health Stats": {
      "main": [
        [
          {
            "node": "Log Run Stats",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Log Run Stats": {
      "main": [
        [
          {
            "node": "Log Run Stats to Airtable",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Error Trigger": {
      "main": [
        [
          {
            "node": "Slack Error Notification",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  },
  "active": true,
  "settings": {
    "executionOrder": "v1",
    "binaryMode": "separate"
  },
  "versionId": "046e3bd7-9da7-4b1f-b9b7-095b714959b3",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "nodeGroups": [],
  "id": "OE5FqDWDZkLZbjrn",
  "tags": []
}

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

Reddit Monitor Master v3. Uses airtable, supabase, slack, httpRequest. Event-driven trigger; 52 nodes.

Source: https://gist.github.com/niihhhall/5c75dd095371a2137dc03b3c1496d273 — original creator credit. Request a take-down →

More Data & Sheets workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

Data & Sheets

This workflow acts as a junior finance research analyst for a UK boutique M&A or corporate finance team. It listens for Slack messages, classifies the request, gathers company or market data, and prod

HTTP Request, Google Drive, Google Docs +5
Data & Sheets

This enables webhooks for nearly realtime updates (every 5 seconds) from Notion Databases.

Notion, Supabase, Execute Workflow Trigger +1
Data & Sheets

dummy_client - Shopify abandoned carts. Uses httpRequest, shopifyTrigger, whatsApp, supabase. Event-driven trigger; 25 nodes.

HTTP Request, Shopify Trigger, WhatsApp +2
Data & Sheets

This workflow automatically collects historical price data from Polymarket Up/Down markets and stores it in Supabase, creating a structured and query-ready dataset for analysis. By continuously fetchi

Form Trigger, HTTP Request, Data Table +1
Data & Sheets

Webhook. Uses manualTrigger, stickyNote, httpRequest, supabase. Event-driven trigger; 21 nodes.

HTTP Request, Supabase