# Reddit Buying Intent Lead Monitor (`cherubic_snipefish/reddit-buying-intent-lead-monitor`) Actor

Find B2B buying-intent posts on Reddit from search RSS feeds. Extract post title, subreddit, author, URL, matched keywords, intent score, and suggested outreach angle.

- **URL**: https://apify.com/cherubic\_snipefish/reddit-buying-intent-lead-monitor.md
- **Developed by:** [Deva](https://apify.com/cherubic_snipefish) (community)
- **Categories:** Lead generation, Social media, Marketing
- **Stats:** 2 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-usage

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Reddit Buying Intent Lead Monitor

Find people asking for tools, vendors, recommendations, alternatives, pricing help, and competitor replacements on Reddit. This Actor uses Reddit search RSS feeds and turns posts into scored B2B leads with a suggested outreach angle.

### What it does

- Searches Reddit for buyer-intent phrases such as `looking for`, `recommend`, `alternative to`, `too expensive`, and `best tool`.
- Supports global Reddit search or narrowed subreddit searches.
- Parses Reddit Atom/RSS entries without browser automation.
- Scores each post from 0 to 100 using buying-intent, competitor-replacement, pricing-pain, complaint-pain, business-context, and urgency signals.
- Outputs clean lead records with post URL, subreddit, author, title, content preview, matched intent, and outreach angle.
- Optional stateful deduplication stores previously returned Reddit URLs in the default key-value store, so scheduled daily alerts only emit fresh posts.
- Optional custom intent/category terms boost posts that mention your product category, competitor, or pain vocabulary.
- Optional competitor term tagging returns `mentionedCompetitors` for battlecard and replacement workflows without altering the score.

### Best use cases

- SaaS teams finding prospects asking for tools in their category.
- Agencies monitoring Reddit for service-buying discussions.
- Product marketers tracking competitor pain and replacement demand.
- Sales teams building daily warm-lead alerts.
- Founders validating demand and copy from real buyer language.

### Example input

```json
{
  "queries": [
    "\"looking for\" CRM",
    "\"alternative to\" HubSpot",
    "\"recommend\" email marketing tool"
  ],
  "subreddits": ["sales", "smallbusiness", "SaaS"],
  "maxItems": 50,
  "minIntentScore": 40,
  "daysBack": 14,
  "extraIntentTerms": ["pipeline reporting", "lead scoring", "sales automation"],
  "competitorTerms": ["HubSpot", "Salesforce", "Pipedrive"],
  "includeNegativeIntent": true,
  "enableStatefulDedup": true,
  "dedupeKey": "crm-alerts"
}
````

### Output fields

| Field | Description |
|---|---|
| `intentScore` | 0 to 100 lead score. |
| `matchedIntent` | Human-readable matched signal labels. |
| `mentionedCompetitors` | Configured competitor/vendor terms found in the post title or content. |
| `outreachAngle` | Suggested positioning for a useful, non-spammy reply or follow-up. |
| `title` | Reddit post title. |
| `content` | Text extracted from the RSS entry summary/content. |
| `subreddit` | Subreddit parsed from the URL. |
| `author` | Reddit author when included in the feed. |
| `updatedAt` | Reddit feed update timestamp. |
| `url` | Reddit post URL. |
| `query` | Search query that found the post. |
| `source` | Data source label. |

### Example output

```json
{
  "intentScore": 86,
  "matchedIntent": "active search; pricing pain; business context",
  "outreachAngle": "Lead shows pricing pain. Lead with ROI, lower-cost plan, or transparent pricing.",
  "title": "Looking for a CRM for our small sales team",
  "subreddit": "sales",
  "author": "u_example",
  "updatedAt": "2026-07-04T00:00:00Z",
  "url": "https://www.reddit.com/r/sales/comments/.../",
  "query": "\"looking for\" CRM",
  "source": "Reddit search RSS"
}
```

### Query ideas

Use category-specific queries:

```text
"looking for" CRM
"recommend" invoicing software
"alternative to" HubSpot
"too expensive" Salesforce
"best tool" cold email
"need" accounting software "small business"
```

### Pricing strategy

Pay per qualified lead:

- small actor-start fee per run,
- qualified-lead event only when a lead is written to the dataset.

This aligns cost with useful output and works well for recurring daily monitoring.

### Scheduling ideas

Run daily with focused category queries and send dataset results to Slack, Discord, Airtable, Google Sheets, HubSpot, Salesforce, or n8n.
Enable `enableStatefulDedup` for recurring alert workflows. Use a different `dedupeKey` per campaign or product category if you want separate seen-post histories.

### Daily alert recipe

For the highest-signal daily sales workflow, keep each run narrow: 3-8 category queries, 3-10 relevant subreddits, `daysBack` of 1-3, `minIntentScore` of 45+, and stateful dedupe enabled. Start broad for a discovery run, then schedule separate campaigns by ICP so each dataset is easy to route to the right sales or founder workflow.

Example focused CRM campaign:

```json
{
  "queries": [
    "\"looking for\" CRM",
    "\"alternative to\" HubSpot",
    "\"Salesforce\" \"too expensive\""
  ],
  "subreddits": ["sales", "smallbusiness", "SaaS"],
  "daysBack": 2,
  "minIntentScore": 45,
  "enableStatefulDedup": true,
  "dedupeKey": "crm-daily-alerts"
}
```

### Data source and limitations

- Source: public Reddit search RSS/Atom feeds.
- Reddit can rate-limit RSS endpoints, especially subreddit-specific searches. The Actor retries and skips temporarily blocked feeds instead of failing the whole run.
- This Actor does not log in, bypass access controls, solve CAPTCHAs, or scrape private content.
- Reddit leads require careful, helpful engagement. Use the output for research and thoughtful replies, not spam.

### Roadmap

- Category-specific example campaign templates.
- Configurable intent dictionaries by category. (Initial custom term boosts are implemented via `extraIntentTerms`.)
- Competitor-name extraction. (Initial configured competitor tagging is implemented via `competitorTerms`.)
- Slack/Discord webhook templates.
- CRM enrichment fields.

# Actor input Schema

## `queries` (type: `array`):

Reddit search queries that indicate buying intent. Use product category plus intent phrase, e.g. "looking for CRM".

## `subreddits` (type: `array`):

Optional subreddit filters. Leave empty to search all Reddit.

## `maxItems` (type: `integer`):

Maximum scored posts to return.

## `minIntentScore` (type: `integer`):

Only output posts with this score or higher.

## `daysBack` (type: `integer`):

Only include posts updated within this many days.

## `includeNegativeIntent` (type: `boolean`):

Include posts that look like complaints, churn risk, or competitor pain signals.

## `extraIntentTerms` (type: `array`):

Optional product, competitor, or pain terms that boost category relevance when found in the post title or content.

## `competitorTerms` (type: `array`):

Optional competitor or vendor names to detect and return in mentionedCompetitors without changing the intent score.

## `enableStatefulDedup` (type: `boolean`):

When enabled, store returned Reddit post URLs in the default key-value store and skip them in future runs. Useful for daily alerts.

## `dedupeKey` (type: `string`):

Key-value store record used for seen URLs. Change this to maintain separate alert streams for different campaigns.

## `maxSeenUrls` (type: `integer`):

Maximum number of previously emitted Reddit URLs to retain for stateful deduplication.

## Actor input object example

```json
{
  "queries": [
    "\"looking for\" CRM",
    "\"recommend\" email marketing tool",
    "\"alternative to\" HubSpot"
  ],
  "subreddits": [],
  "maxItems": 50,
  "minIntentScore": 40,
  "daysBack": 14,
  "includeNegativeIntent": true,
  "extraIntentTerms": [],
  "competitorTerms": [],
  "enableStatefulDedup": false,
  "dedupeKey": "seen-reddit-lead-urls",
  "maxSeenUrls": 5000
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("cherubic_snipefish/reddit-buying-intent-lead-monitor").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("cherubic_snipefish/reddit-buying-intent-lead-monitor").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call cherubic_snipefish/reddit-buying-intent-lead-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=cherubic_snipefish/reddit-buying-intent-lead-monitor",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Reddit Buying Intent Lead Monitor",
        "description": "Find B2B buying-intent posts on Reddit from search RSS feeds. Extract post title, subreddit, author, URL, matched keywords, intent score, and suggested outreach angle.",
        "version": "0.1",
        "x-build-id": "TnT2h6GIHm7oNCVbJ"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/cherubic_snipefish~reddit-buying-intent-lead-monitor/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-cherubic_snipefish-reddit-buying-intent-lead-monitor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/cherubic_snipefish~reddit-buying-intent-lead-monitor/runs": {
            "post": {
                "operationId": "runs-sync-cherubic_snipefish-reddit-buying-intent-lead-monitor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/cherubic_snipefish~reddit-buying-intent-lead-monitor/run-sync": {
            "post": {
                "operationId": "run-sync-cherubic_snipefish-reddit-buying-intent-lead-monitor",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "queries",
                    "maxItems"
                ],
                "properties": {
                    "queries": {
                        "title": "Search queries",
                        "type": "array",
                        "description": "Reddit search queries that indicate buying intent. Use product category plus intent phrase, e.g. \"looking for CRM\".",
                        "default": [
                            "\"looking for\" CRM",
                            "\"recommend\" email marketing tool",
                            "\"alternative to\" HubSpot"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "subreddits": {
                        "title": "Subreddits",
                        "type": "array",
                        "description": "Optional subreddit filters. Leave empty to search all Reddit.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxItems": {
                        "title": "Maximum leads",
                        "minimum": 1,
                        "maximum": 300,
                        "type": "integer",
                        "description": "Maximum scored posts to return.",
                        "default": 50
                    },
                    "minIntentScore": {
                        "title": "Minimum intent score",
                        "minimum": 0,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Only output posts with this score or higher.",
                        "default": 40
                    },
                    "daysBack": {
                        "title": "Days back",
                        "minimum": 1,
                        "maximum": 365,
                        "type": "integer",
                        "description": "Only include posts updated within this many days.",
                        "default": 14
                    },
                    "includeNegativeIntent": {
                        "title": "Include negative/complaint intent",
                        "type": "boolean",
                        "description": "Include posts that look like complaints, churn risk, or competitor pain signals.",
                        "default": true
                    },
                    "extraIntentTerms": {
                        "title": "Extra intent/category terms",
                        "type": "array",
                        "description": "Optional product, competitor, or pain terms that boost category relevance when found in the post title or content.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "competitorTerms": {
                        "title": "Competitor terms to tag",
                        "type": "array",
                        "description": "Optional competitor or vendor names to detect and return in mentionedCompetitors without changing the intent score.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "enableStatefulDedup": {
                        "title": "Skip previously returned posts",
                        "type": "boolean",
                        "description": "When enabled, store returned Reddit post URLs in the default key-value store and skip them in future runs. Useful for daily alerts.",
                        "default": false
                    },
                    "dedupeKey": {
                        "title": "Deduplication storage key",
                        "type": "string",
                        "description": "Key-value store record used for seen URLs. Change this to maintain separate alert streams for different campaigns.",
                        "default": "seen-reddit-lead-urls"
                    },
                    "maxSeenUrls": {
                        "title": "Maximum stored seen URLs",
                        "minimum": 100,
                        "maximum": 50000,
                        "type": "integer",
                        "description": "Maximum number of previously emitted Reddit URLs to retain for stateful deduplication.",
                        "default": 5000
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
