# Reddit Lead And Intent Finder (`b2b_leads/reddit-lead-and-intent-finder`) Actor

Find warm B2B leads on Reddit the moment they show buying or help intent. Scans posts & comments for phrases like "best CRM for…" or "alternative to…", matches your keywords, and scores each lead 0–100. No API key, no browser. Push to CRM, Slack, or Sheets.

- **URL**: https://apify.com/b2b\_leads/reddit-lead-and-intent-finder.md
- **Developed by:** [Chidubem Aneke](https://apify.com/b2b_leads) (community)
- **Categories:** Lead generation, Social media, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## 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 Lead & Intent Finder — Turn Reddit Into a Warm Lead Pipeline

**Find people on Reddit who are actively asking to buy, switch, or get help — right now.** This Actor scans posts and comments for real **buying and help intent** ("looking for a tool that…", "recommend an alternative to X", "anyone know how to…", "frustrated with Y", "best CRM for startups") and hands you a clean, **scored list of warm leads** — the person, what they said, the matched intent, and a **0–100 relevance score**.

**Stop scrolling Reddit manually.** Give it your product keywords and a few subreddits (or search queries), click **Start**, and pipe fresh, qualified leads straight to your **CRM, Slack, Google Sheets, Zapier, or Make** — no setup, no browser, with optional built-in proxy support.

> ⚡ **Built for speed & cost.** A lightweight lead engine — runs fast, uses as little as **256–512 MB RAM**, and costs a fraction of heavy browser-based tools.

---

### Why this Actor

- **🔥 Real intent, not noise** — five tunable intent categories (recommendation, alternative-seeking, problem/help, pain points, buying signals) plus your own custom phrases and regex.
- **🎯 On-topic by default** — a lead must mention your product/topic **and** show intent, so you get prospects, not chatter.
- **📊 Scored & ranked** — every lead gets a **0–100 relevance score** with a transparent breakdown (intent, topic, recency, engagement). Filter with `minRelevance`.
- **🧹 Bot & throwaway filtering** — optional author enrichment (karma, account age, verified) with `minKarma` / `minAccountAgeDays` gates.
- **🔁 Incremental by design** — scheduled runs remember what they've seen and emit **only new leads**.
- **🔔 Instant delivery** — push each new lead to a **webhook** in JSON or **Slack** format.
- **✅ Works out of the box** — no Reddit developer account or API setup required.
- **🤖 MCP-friendly** — documented input/output schemas and copy-paste JSON for Apify MCP & LLM agents.

---

### Who is this for?

| You are… | You get… |
|----------|----------|
| **B2B / SaaS founder** | People openly shopping for (or complaining about) tools like yours |
| **Growth / demand-gen team** | A steady feed of warm, intent-scored prospects to reach out to |
| **Agency / lead-gen shop** | Repeatable lead pipelines per client, delivered to their CRM |
| **Social seller** | Real conversations to join — with the exact quote and a direct link |
| **Competitor conquesting** | Catch "alternative to \<competitor\>" and "switching from \<competitor\>" the moment they post |
| **Community / support team** | Spot frustrated users and unanswered questions to help first |

---

### How it works (3 steps)

1. **Tell it what you sell** — add `topicKeywords` (your category + competitor names).
2. **Pick where to look** — `searchQueries` for Reddit search, and/or `subreddits` to scan recent posts & comments. Choose `mode: "both"` to do both.
3. **Get scored leads** — each matching post/comment becomes a lead row with the matched intent phrase, intent category, topic keywords, a snippet, and a relevance score. Optionally stream them to a webhook.

---

### Intent categories

Toggle any of these built-in presets (or use all), and add your own phrases on top:

| Category | Signals it catches (examples) |
|----------|-------------------------------|
| `seeking_recommendation` | "recommend", "any suggestions", "what should I use", "looking for a", "best … for" |
| `alternative_seeking` | "alternative to", "switching from", "instead of", "replacement for", "vs" |
| `problem_help` | "how do I", "anyone know", "need help", "struggling with", "can't figure out" |
| `pain_point` | "frustrated with", "hate that", "too expensive", "wish there was" |
| `buying_intent` | "ready to buy", "budget for", "pricing", "worth it", "free trial" |

Add `customIntentPhrases`, choose `matchMode` (`substring`, `word`, or `regex`), and toggle `caseSensitive` for full control.

---

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `topicKeywords` | string[] | – | Product/category/competitor terms a lead must mention. **Recommended.** |
| `searchQueries` | string[] | – | Queries for search mode. |
| `subreddits` | string[] | – | Subreddits to scan / scope search. Use `["all"]` to search across **all of Reddit** instead of specific communities. |
| `mode` | string | `both` | `search`, `scan`, or `both`. |
| `stream` | string | `posts` | `posts`, `comments`, or `both` (scan mode). |
| `intentPresets` | string[] | all | Which built-in intent categories to use. |
| `customIntentPhrases` | string[] | `[]` | Extra intent phrases / regex. |
| `matchMode` | string | `substring` | `substring`, `word`, or `regex`. |
| `caseSensitive` | boolean | `false` | Case-sensitive phrase matching. |
| `requireTopicMatch` | boolean | `true` | Require a topic keyword **and** an intent phrase. |
| `ignoreKeywords` | string[] | `[]` | Skip content containing these words. |
| `searchSort` | string | `relevance` | `relevance`, `hot`, `top`, `new`, `comments`. |
| `searchTime` | string | `all` | `hour`, `day`, `week`, `month`, `year`, `all`. |
| `resultsPerQuery` | integer | `50` | Search results to examine per query (1–1000). |
| `lookback` | integer | `50` | Recent posts/comments to scan per subreddit (1–1000). |
| `enrichAuthor` | boolean | `false` | Fetch author karma/age/verified. |
| `minAccountAgeDays` | integer | `0` | Drop authors newer than this (auto-enriches). |
| `minKarma` | integer | `0` | Drop authors below this total karma (auto-enriches). |
| `minRelevance` | integer | `0` | Only keep leads scoring at/above this (0–100). Guide: `0` = all matches, `40–55` = balanced, `60–75` = strong leads, `80+` = strictest. |
| `minScore` | integer | `0` | Minimum net upvotes (upvotes − downvotes). `0` keeps fresh leads; raise to 5–20 for more-validated threads. |
| `includeNsfw` | boolean | `false` | Include NSFW posts. |
| `excludeLockedOrRemoved` | boolean | `true` | Skip locked/removed content. |
| `authorAllowlist` | string[] | `[]` | Only these usernames. |
| `authorDenylist` | string[] | `[]` | Never these usernames. |
| `sinceId` | string | `""` | Only leads newer than this Reddit fullname. |
| `maxLeads` | integer | `0` | Stop after N leads (0 = unlimited). |
| `webhookUrl` | string | `""` | POST each new lead here **in addition to** saving it to the dataset. |
| `webhookFormat` | string | `json` | `json` or `slack`. |
| `includeRaw` | boolean | `false` | Attach the full raw object. |
| `proxyConfiguration` | object | Apify Proxy (US Residential) | Connection settings. |

---

### Output

One row per lead, tagged `featureType: "lead"`:

| Field | Description |
|-------|-------------|
| `leadType` | `post` or `comment` |
| `discoveryMode` | `search` or `scan` |
| `subreddit`, `author`, `authorFullname` | Where and who |
| `title`, `body`, `url`, `permalink`, `postUrl` | The content + direct outreach link |
| `score`, `numComments`, `createdAtISO` | Engagement & recency |
| `matchedIntentCategory` | Primary intent category |
| `matchedIntentCategories`, `matchedIntentPhrases` | All matched categories & phrases |
| `matchedTopicKeywords` | Topic keywords that matched |
| `matchedSnippet`, `matchedIn` | Snippet around the match + where it matched |
| `relevanceScore` | 0–100 overall score |
| `scoreBreakdown` | `{ intent, topic, recency, engagement }` |
| `authorProfile` | Karma, account age, verified (when enrichment is on) |

#### Dataset views

- **Overview** — score, intent, author, title, snippet, link.
- **Leads** — full detail with intent phrases, topics, and score breakdown.
- **Post leads** — leads sourced from posts.
- **Comment leads** — leads sourced from comments.

#### Example lead

```json
{
  "featureType": "lead",
  "leadType": "post",
  "discoveryMode": "scan",
  "subreddit": "smallbusiness",
  "author": "growthhacker22",
  "title": "HubSpot is too expensive for a 5-person team — alternatives?",
  "matchedIntentCategory": "alternative_seeking",
  "matchedIntentPhrases": ["alternative to", "too expensive"],
  "matchedTopicKeywords": ["hubspot", "CRM"],
  "matchedSnippet": "…HubSpot is too expensive, looking for an alternative to it for our small team CRM…",
  "matchedIn": "title+body",
  "relevanceScore": 84,
  "scoreBreakdown": { "intent": 34, "topic": 20, "recency": 20, "engagement": 10 },
  "postUrl": "https://www.reddit.com/r/smallbusiness/comments/abc123/..."
}
````

***

### Run it via API / MCP

Example input payload for the Apify API, SDK, or an MCP/LLM agent:

```json
{
  "topicKeywords": ["CRM", "hubspot", "salesforce"],
  "searchQueries": ["best CRM for startups", "hubspot alternative"],
  "subreddits": ["smallbusiness", "sales", "Entrepreneur"],
  "mode": "both",
  "stream": "both",
  "intentPresets": ["seeking_recommendation", "alternative_seeking", "pain_point", "buying_intent"],
  "requireTopicMatch": true,
  "minRelevance": 55,
  "enrichAuthor": true,
  "minAccountAgeDays": 30,
  "maxLeads": 200,
  "webhookUrl": "https://hooks.slack.com/services/XXX/YYY/ZZZ",
  "webhookFormat": "slack"
}
```

Start a run with the Apify API:

```bash
curl -X POST "https://api.apify.com/v2/acts/YOUR_USERNAME~reddit-lead-and-intent-finder/runs?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "topicKeywords": ["CRM","hubspot"], "subreddits": ["smallbusiness"], "mode": "scan" }'
```

***

### Scheduling, webhooks & CRM/Slack

- **Leads always land in the dataset.** The webhook is an *additional* real-time push — every lead is saved to the run's dataset regardless, so nothing is lost and your run always produces output.
- **Schedule** the Actor (e.g. every 15–60 minutes) from the Apify console. Thanks to the built-in incremental cursor, each run returns **only new leads** — no duplicates.
- **Slack:** set `webhookFormat: "slack"` and paste a Slack **Incoming Webhook** URL into `webhookUrl` to get a formatted alert per lead.
- **CRM / Sheets / Zapier / Make:** set `webhookFormat: "json"` and point `webhookUrl` at your endpoint or automation to create a contact/row per lead.
- **Bulk export:** download the dataset as JSON, CSV, or Excel, or pull it from the dataset API.

***

### FAQ

**Do I need any setup or API keys?**
No. It works out of the box — just add your keywords and subreddits, then click Start.

**How does the relevance score work?**
It blends four signals — intent strength, topic keyword hits, recency, and engagement — into a single 0–100 score, with a per-lead `scoreBreakdown` so you can see why.

**How do I only get leads about my product?**
Keep `requireTopicMatch: true` (the default) and set `topicKeywords` to your category and competitor names. A lead must then match a topic **and** an intent phrase.

**Will scheduled runs give me duplicates?**
No. The Actor persists a per-source cursor and only emits leads newer than the last run. You can also pass `sinceId` for a manual floor.

**Can I search comments?**
Comment leads come from **scan mode** (`stream: "comments"` or `"both"`). Search mode returns post leads.

**How do I filter out bots and throwaway accounts?**
Enable `enrichAuthor` and set `minKarma` and/or `minAccountAgeDays`.

**Why use a proxy?**
Optional but recommended for the most reliable results on scheduled runs. The default Apify Proxy (US Residential) works well for most users.

***

### Need something custom? Let's build it

Beyond this Actor, I take on **custom projects** — and I'd love to help with yours:

- 🕷️ **Custom scrapers & data pipelines** — any website or platform, any scale, delivered as a ready-to-run Apify Actor, API, or scheduled data feed.
- 🌐 **Web apps of any kind** — dashboards, internal tools, SaaS products, landing pages, automations, and full-stack builds.
- 🔗 **Integrations & automation** — connect your data to CRMs, Slack, Google Sheets, Zapier/Make, or your own backend.

If you need a bespoke scraping solution, a web app, or an integration built end to end, get in touch and let's make it happen.

- **📧 Email:** <dubem115@gmail.com>
- **💻 GitHub:** [github.com/DrunkCodes](https://github.com/DrunkCodes)

# Actor input Schema

## `topicKeywords` (type: `array`):

Product category, competitor names, or topics a lead must mention (e.g. "CRM", "hubspot", "project management"). By default a lead must match a topic keyword AND an intent phrase. Highly recommended.

## `searchQueries` (type: `array`):

Queries to run through Reddit search when using search mode (site-wide or scoped to the subreddits below). Example: "best CRM for startups", "hubspot alternative".

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

Subreddits to scan for recent posts/comments (scan mode) and to scope search queries. To search across ALL of Reddit instead of specific communities, add a single entry: all. Otherwise list one or more subreddit names or URLs (e.g. smallbusiness, r/sales).

## `mode` (type: `string`):

search = run your queries through Reddit search; scan = pull recent posts/comments from subreddits; both = do both.

## `stream` (type: `string`):

Which content to analyse in scan mode. Search mode always returns posts.

## `intentPresets` (type: `array`):

Built-in intent categories to detect. Leave empty to use all of them.

## `customIntentPhrases` (type: `array`):

Extra phrases (or regex when match mode is regex) that signal intent, added on top of the selected presets.

## `matchMode` (type: `string`):

substring = phrase appears anywhere; word = whole-word match; regex = treat every phrase as a regular expression.

## `caseSensitive` (type: `boolean`):

Match intent phrases and custom patterns case-sensitively. Off by default.

## `requireTopicMatch` (type: `boolean`):

When on, a lead must match at least one topic keyword AND an intent phrase. Turn off to return any intent match.

## `ignoreKeywords` (type: `array`):

Skip any post/comment that contains one of these words (e.g. giveaway, hiring, meme).

## `searchSort` (type: `string`):

Sort order for Reddit search results (search mode).

## `searchTime` (type: `string`):

Time filter for search results (applies to relevance/top sorts).

## `resultsPerQuery` (type: `integer`):

How many search results to examine per query (1–1000). Pages in batches of 100.

## `lookback` (type: `integer`):

How many recent posts/comments to scan per subreddit in scan mode (1–1000). Pages in batches of 100.

## `enrichAuthor` (type: `boolean`):

Fetch each lead author's karma, account age, and verified status. Also enables bot/throwaway filtering.

## `minAccountAgeDays` (type: `integer`):

Drop leads whose author account is younger than this many days. 0 = no minimum. Requires author enrichment (auto-enabled when set).

## `minKarma` (type: `integer`):

Drop leads whose author has less than this total karma. 0 = no minimum. Requires author enrichment (auto-enabled when set).

## `minRelevance` (type: `integer`):

Only return leads scoring at or above this value (0–100). Each lead's relevance score blends four signals: how strong the intent is, how many of your topic keywords it matches, how recent it is, and how much engagement (upvotes) it has — see scoreBreakdown on every lead. Guide: 0 = keep all matches (most volume); 40–55 = balanced quality (good default); 60–75 = only strong, on-topic, high-intent leads; 80+ = very strict, fewer but hottest leads.

## `minScore` (type: `integer`):

Only keep posts/comments with at least this many net upvotes (upvotes minus downvotes — the number shown on Reddit). 0 = keep everything (recommended for finding fresh leads, since brand-new posts usually sit at 1). Set to 5–20 to focus on threads that already have some visibility/validation. Higher values can hide new leads.

## `includeNsfw` (type: `boolean`):

Include posts marked over\_18 (NSFW). Off by default.

## `excludeLockedOrRemoved` (type: `boolean`):

Skip locked or removed posts (and stickied comments) since you can't reply to them.

## `authorAllowlist` (type: `array`):

If set, only return leads from these usernames.

## `authorDenylist` (type: `array`):

Never return leads from these usernames.

## `sinceId` (type: `string`):

Optional Reddit fullname (e.g. t3\_abc123). Only return leads newer than this ID. Scheduled runs also persist a per-source cursor automatically.

## `maxLeads` (type: `integer`):

Stop after this many leads. 0 = unlimited.

## `webhookUrl` (type: `string`):

Optional. Every lead is always saved to the run's dataset — this webhook is an ADDITIONAL real-time push. When set, each new lead is also POSTed to this URL (CRM, Slack incoming webhook, Zapier, Make, Google Sheets).

## `webhookFormat` (type: `string`):

json = full lead object; slack = Slack-friendly message payload.

## `includeRaw` (type: `boolean`):

Attach the full raw Reddit object under the raw field (larger output).

## `proxyConfiguration` (type: `object`):

Use Apify Proxy with US Residential for best results. Leave the default unless you know you need something else.

## Actor input object example

```json
{
  "topicKeywords": [
    "CRM",
    "hubspot"
  ],
  "searchQueries": [
    "best CRM for startups",
    "hubspot alternative"
  ],
  "subreddits": [
    "smallbusiness",
    "sales"
  ],
  "mode": "both",
  "stream": "posts",
  "intentPresets": [
    "seeking_recommendation",
    "alternative_seeking",
    "problem_help",
    "pain_point",
    "buying_intent"
  ],
  "customIntentPhrases": [],
  "matchMode": "substring",
  "caseSensitive": false,
  "requireTopicMatch": true,
  "ignoreKeywords": [],
  "searchSort": "relevance",
  "searchTime": "all",
  "resultsPerQuery": 50,
  "lookback": 50,
  "enrichAuthor": false,
  "minAccountAgeDays": 0,
  "minKarma": 0,
  "minRelevance": 0,
  "minScore": 0,
  "includeNsfw": false,
  "excludeLockedOrRemoved": true,
  "authorAllowlist": [],
  "authorDenylist": [],
  "sinceId": "",
  "maxLeads": 0,
  "webhookUrl": "",
  "webhookFormat": "json",
  "includeRaw": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `allResults` (type: `string`):

Complete dataset with every field for each lead.

## `overview` (type: `string`):

Compact table — score, intent, subreddit, author, title, snippet, and link.

## `leads` (type: `string`):

Full lead detail including intent phrases, topics, and score breakdown.

## `posts` (type: `string`):

Leads sourced from posts.

## `comments` (type: `string`):

Leads sourced from comments.

# 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 = {
    "topicKeywords": [
        "CRM",
        "hubspot"
    ],
    "searchQueries": [
        "best CRM for startups",
        "hubspot alternative"
    ],
    "subreddits": [
        "smallbusiness",
        "sales"
    ],
    "intentPresets": [
        "seeking_recommendation",
        "alternative_seeking",
        "problem_help",
        "pain_point",
        "buying_intent"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("b2b_leads/reddit-lead-and-intent-finder").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 = {
    "topicKeywords": [
        "CRM",
        "hubspot",
    ],
    "searchQueries": [
        "best CRM for startups",
        "hubspot alternative",
    ],
    "subreddits": [
        "smallbusiness",
        "sales",
    ],
    "intentPresets": [
        "seeking_recommendation",
        "alternative_seeking",
        "problem_help",
        "pain_point",
        "buying_intent",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("b2b_leads/reddit-lead-and-intent-finder").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 '{
  "topicKeywords": [
    "CRM",
    "hubspot"
  ],
  "searchQueries": [
    "best CRM for startups",
    "hubspot alternative"
  ],
  "subreddits": [
    "smallbusiness",
    "sales"
  ],
  "intentPresets": [
    "seeking_recommendation",
    "alternative_seeking",
    "problem_help",
    "pain_point",
    "buying_intent"
  ]
}' |
apify call b2b_leads/reddit-lead-and-intent-finder --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Reddit Lead And Intent Finder",
        "description": "Find warm B2B leads on Reddit the moment they show buying or help intent. Scans posts & comments for phrases like \"best CRM for…\" or \"alternative to…\", matches your keywords, and scores each lead 0–100. No API key, no browser. Push to CRM, Slack, or Sheets.",
        "version": "0.0",
        "x-build-id": "v6c46fOroOKzJXbdD"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/b2b_leads~reddit-lead-and-intent-finder/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-b2b_leads-reddit-lead-and-intent-finder",
                "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/b2b_leads~reddit-lead-and-intent-finder/runs": {
            "post": {
                "operationId": "runs-sync-b2b_leads-reddit-lead-and-intent-finder",
                "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/b2b_leads~reddit-lead-and-intent-finder/run-sync": {
            "post": {
                "operationId": "run-sync-b2b_leads-reddit-lead-and-intent-finder",
                "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",
                "properties": {
                    "topicKeywords": {
                        "title": "Topic keywords",
                        "type": "array",
                        "description": "Product category, competitor names, or topics a lead must mention (e.g. \"CRM\", \"hubspot\", \"project management\"). By default a lead must match a topic keyword AND an intent phrase. Highly recommended.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchQueries": {
                        "title": "Search queries",
                        "type": "array",
                        "description": "Queries to run through Reddit search when using search mode (site-wide or scoped to the subreddits below). Example: \"best CRM for startups\", \"hubspot alternative\".",
                        "items": {
                            "type": "string"
                        }
                    },
                    "subreddits": {
                        "title": "Subreddits (or all of Reddit)",
                        "type": "array",
                        "description": "Subreddits to scan for recent posts/comments (scan mode) and to scope search queries. To search across ALL of Reddit instead of specific communities, add a single entry: all. Otherwise list one or more subreddit names or URLs (e.g. smallbusiness, r/sales).",
                        "items": {
                            "type": "string"
                        }
                    },
                    "mode": {
                        "title": "Discovery mode",
                        "enum": [
                            "search",
                            "scan",
                            "both"
                        ],
                        "type": "string",
                        "description": "search = run your queries through Reddit search; scan = pull recent posts/comments from subreddits; both = do both.",
                        "default": "both"
                    },
                    "stream": {
                        "title": "Content to scan",
                        "enum": [
                            "posts",
                            "comments",
                            "both"
                        ],
                        "type": "string",
                        "description": "Which content to analyse in scan mode. Search mode always returns posts.",
                        "default": "posts"
                    },
                    "intentPresets": {
                        "title": "Intent categories",
                        "type": "array",
                        "description": "Built-in intent categories to detect. Leave empty to use all of them.",
                        "items": {
                            "type": "string",
                            "enum": [
                                "seeking_recommendation",
                                "alternative_seeking",
                                "problem_help",
                                "pain_point",
                                "buying_intent"
                            ],
                            "enumTitles": [
                                "Seeking recommendation",
                                "Alternative seeking",
                                "Problem / help",
                                "Pain point",
                                "Buying intent"
                            ]
                        },
                        "default": [
                            "seeking_recommendation",
                            "alternative_seeking",
                            "problem_help",
                            "pain_point",
                            "buying_intent"
                        ]
                    },
                    "customIntentPhrases": {
                        "title": "Custom intent phrases",
                        "type": "array",
                        "description": "Extra phrases (or regex when match mode is regex) that signal intent, added on top of the selected presets.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "matchMode": {
                        "title": "Match mode",
                        "enum": [
                            "substring",
                            "word",
                            "regex"
                        ],
                        "type": "string",
                        "description": "substring = phrase appears anywhere; word = whole-word match; regex = treat every phrase as a regular expression.",
                        "default": "substring"
                    },
                    "caseSensitive": {
                        "title": "Case sensitive matching",
                        "type": "boolean",
                        "description": "Match intent phrases and custom patterns case-sensitively. Off by default.",
                        "default": false
                    },
                    "requireTopicMatch": {
                        "title": "Require a topic keyword match",
                        "type": "boolean",
                        "description": "When on, a lead must match at least one topic keyword AND an intent phrase. Turn off to return any intent match.",
                        "default": true
                    },
                    "ignoreKeywords": {
                        "title": "Ignore keywords",
                        "type": "array",
                        "description": "Skip any post/comment that contains one of these words (e.g. giveaway, hiring, meme).",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "searchSort": {
                        "title": "Search sort",
                        "enum": [
                            "relevance",
                            "hot",
                            "top",
                            "new",
                            "comments"
                        ],
                        "type": "string",
                        "description": "Sort order for Reddit search results (search mode).",
                        "default": "relevance"
                    },
                    "searchTime": {
                        "title": "Search time window",
                        "enum": [
                            "hour",
                            "day",
                            "week",
                            "month",
                            "year",
                            "all"
                        ],
                        "type": "string",
                        "description": "Time filter for search results (applies to relevance/top sorts).",
                        "default": "all"
                    },
                    "resultsPerQuery": {
                        "title": "Results per query",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "How many search results to examine per query (1–1000). Pages in batches of 100.",
                        "default": 50
                    },
                    "lookback": {
                        "title": "Scan lookback",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "How many recent posts/comments to scan per subreddit in scan mode (1–1000). Pages in batches of 100.",
                        "default": 50
                    },
                    "enrichAuthor": {
                        "title": "Enrich author profile",
                        "type": "boolean",
                        "description": "Fetch each lead author's karma, account age, and verified status. Also enables bot/throwaway filtering.",
                        "default": false
                    },
                    "minAccountAgeDays": {
                        "title": "Minimum account age (days)",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Drop leads whose author account is younger than this many days. 0 = no minimum. Requires author enrichment (auto-enabled when set).",
                        "default": 0
                    },
                    "minKarma": {
                        "title": "Minimum total karma",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Drop leads whose author has less than this total karma. 0 = no minimum. Requires author enrichment (auto-enabled when set).",
                        "default": 0
                    },
                    "minRelevance": {
                        "title": "Minimum relevance score",
                        "minimum": 0,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Only return leads scoring at or above this value (0–100). Each lead's relevance score blends four signals: how strong the intent is, how many of your topic keywords it matches, how recent it is, and how much engagement (upvotes) it has — see scoreBreakdown on every lead. Guide: 0 = keep all matches (most volume); 40–55 = balanced quality (good default); 60–75 = only strong, on-topic, high-intent leads; 80+ = very strict, fewer but hottest leads.",
                        "default": 0
                    },
                    "minScore": {
                        "title": "Minimum Reddit upvotes",
                        "type": "integer",
                        "description": "Only keep posts/comments with at least this many net upvotes (upvotes minus downvotes — the number shown on Reddit). 0 = keep everything (recommended for finding fresh leads, since brand-new posts usually sit at 1). Set to 5–20 to focus on threads that already have some visibility/validation. Higher values can hide new leads.",
                        "default": 0
                    },
                    "includeNsfw": {
                        "title": "Include NSFW content",
                        "type": "boolean",
                        "description": "Include posts marked over_18 (NSFW). Off by default.",
                        "default": false
                    },
                    "excludeLockedOrRemoved": {
                        "title": "Exclude locked / removed",
                        "type": "boolean",
                        "description": "Skip locked or removed posts (and stickied comments) since you can't reply to them.",
                        "default": true
                    },
                    "authorAllowlist": {
                        "title": "Author allowlist",
                        "type": "array",
                        "description": "If set, only return leads from these usernames.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "authorDenylist": {
                        "title": "Author denylist",
                        "type": "array",
                        "description": "Never return leads from these usernames.",
                        "default": [],
                        "items": {
                            "type": "string"
                        }
                    },
                    "sinceId": {
                        "title": "Since fullname (incremental)",
                        "type": "string",
                        "description": "Optional Reddit fullname (e.g. t3_abc123). Only return leads newer than this ID. Scheduled runs also persist a per-source cursor automatically.",
                        "default": ""
                    },
                    "maxLeads": {
                        "title": "Max leads",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Stop after this many leads. 0 = unlimited.",
                        "default": 0
                    },
                    "webhookUrl": {
                        "title": "Webhook URL",
                        "type": "string",
                        "description": "Optional. Every lead is always saved to the run's dataset — this webhook is an ADDITIONAL real-time push. When set, each new lead is also POSTed to this URL (CRM, Slack incoming webhook, Zapier, Make, Google Sheets).",
                        "default": ""
                    },
                    "webhookFormat": {
                        "title": "Webhook format",
                        "enum": [
                            "json",
                            "slack"
                        ],
                        "type": "string",
                        "description": "json = full lead object; slack = Slack-friendly message payload.",
                        "default": "json"
                    },
                    "includeRaw": {
                        "title": "Include raw Reddit JSON",
                        "type": "boolean",
                        "description": "Attach the full raw Reddit object under the raw field (larger output).",
                        "default": false
                    },
                    "proxyConfiguration": {
                        "title": "Proxy settings",
                        "type": "object",
                        "description": "Use Apify Proxy with US Residential for best results. Leave the default unless you know you need something else.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ],
                            "apifyProxyCountry": "US"
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
