# Reddit Buyer Intent & Product Request Finder (`herazur/reddit-buyer-intent-product-request-finder`) Actor

Find Reddit posts asking for software recommendations, alternatives and tools. Rank buyer-intent signals with explainable lead scores, competitor mentions and urgency evidence. Export qualified opportunities to CSV or JSON.

- **URL**: https://apify.com/herazur/reddit-buyer-intent-product-request-finder.md
- **Developed by:** [Furkan Toluç](https://apify.com/herazur) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$20.00 / 1,000 qualified leads

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/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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 Buyer Intent & Product Request Finder

Turn Reddit software discussions into a ranked review queue of potential buying opportunities. Enter **CRM software**, **project management**, or another product category to find people asking for recommendations, alternatives, cheaper products, and tools that solve a specific problem.

This Actor searches Reddit using Reddit Scraper Lite, removes duplicate posts and common promotions, then identifies intent signals and explains each score. No LLM key is required.

### Quick start

1. Enter a product or category in **Product or category**.
2. Start with 10 posts and the last month. Optionally specify a subreddit and competitor names.
3. Run the Actor and review the **Qualified buyer opportunities** table.
4. Export JSON, CSV, Excel, or connect the dataset to your own workflow.

```json
{
  "query": "CRM software",
  "maxPosts": 10,
  "maxLeads": 50,
  "minLeadScore": 45,
  "maxAgeDays": 30,
  "time": "month",
  "competitors": ["HubSpot", "Salesforce", "Pipedrive", "Zoho"],
  "excludePromotional": true,
  "maxSourceChargeUsd": 2
}
```

### What it finds

- **Switching:** alternatives to a product, replacing a tool, migrating or switching from a competitor.
- **Price pain:** too expensive, price increases, cheaper or affordable alternatives.
- **Product request:** need a tool, looking for software, seeking a solution.
- **Recommendation:** recommendations, anyone using a product, best product for a use case.

Each result contains post title and text, original Reddit URL, subreddit, publication date when available, primary intent and additional intents, competitor mentions, purchase-intent band, urgency evidence, lead score, and a transparent score breakdown. Competitor mentions do not prove that the author currently uses that product.

### Example output (illustrative)

For “HubSpot CRM is getting too expensive. Any alternatives for a 10-person agency? We need to switch this week.” the Actor identifies Switching and Price pain, HubSpot, and explicit urgency from “this week”. With a fresh post, this combination scores 100. Without timing language, urgency is **UNKNOWN**, even if the buyer score is high.

```json
{
  "intent": "Switching",
  "competitor": "HubSpot",
  "purchaseIntent": "HIGH",
  "urgency": "HIGH",
  "urgencyEvidence": "this week",
  "leadScore": 100
}
```

### Scoring and limitations

English-language, deterministic text rules assign a strongest-intent weight (25–38), multiple-signal bonus (12), topic match (15), competitor mention (8), business context (10), explicit timing (12), and post recency within seven days (5). Results are capped at 100. HIGH means at least 70; MEDIUM means at least 45. Promotions and resolved requests are filtered by default; when retained they receive a 45-point penalty.

Scores are **prioritization heuristics, not calibrated purchase probabilities, verified leads, or guaranteed sales**. Rules can miss sarcasm, negation, unusual phrasing, and other languages. Read the original post before taking action. A result never implies consent to outreach. No private contact enrichment, direct messages, or automatic outreach is performed.

Reddit search coverage, availability, ranking, and the source Actor affect results. An empty dataset can be legitimate. Source failures cause a failed run rather than fabricated or demo results. Maximum post age filters out posts with unknown dates; set `maxAgeDays` to 0 when analyzing an undated dataset.

### Pricing and source costs

The analysis fee is charged per **qualified lead saved** using the `qualified-lead` event. See this Actor's Pricing tab for the current amount. Filtered posts and within-run duplicates incur no analysis event fee.

**Live searches also run `trudax/reddit-scraper-lite` on your Apify account. Its separate scraping and startup fees apply, including when no leads qualify.** `maxSourceChargeUsd` caps that source run (default $2); it does not include this Actor's lead fees. This Actor's maximum charge setting does not cap the child scraper's separate budget. You need permission to run the dependency and read its dataset. No separate Reddit login or LLM key is requested by this Actor.

Provide `sourceDatasetId` to analyze a dataset you already have without launching another scraper. Both modes charge the same analysis event fee for saved leads. Source data must be accessible to the run's token. This also lets you use your own authorized data collection pipeline.

### Inputs

| Input | Default | Purpose |
| --- | --- | --- |
| `query` | Required | Topic/category, up to 200 characters |
| `maxPosts` | 10 | Source post cap, 1–1,000 |
| `maxLeads` | 50 | Maximum saved leads, 1–1,000 |
| `minLeadScore` | 45 | Minimum score, 0–100 |
| `maxAgeDays` | 30 | Age filter; 0 disables it |
| `time` | month | Reddit search time window |
| `subreddit` | All | Optional bare subreddit name |
| `competitors` | Common SaaS names | Up to 50 literal competitor names |
| `competitorQueries` | false | Add alternatives searches for first five competitors |
| `excludePromotional` | true | Exclude common promotions and resolved requests |
| `maxSourceChargeUsd` | 2 | Separate source-run budget, $0.10–$20 |
| `sourceDatasetId` | None | Reuse an accessible dataset instead of scraping |

### Daily monitoring and integrations

Save your input as an Apify task and configure an Apify schedule for daily checks. Use a short age window, then deduplicate downstream by `id` or `url` across runs. This Actor deduplicates within a run and skips results already saved when the run restarts; it does not maintain a shared history across independent runs.

The default key-value store contains `SUMMARY` with fetched, unique, duplicate, qualifying, and saved counts, plus the source run/dataset IDs. Integrations can consume the dataset through the Apify API or a completion webhook.

### Responsible use and support

Use data only for purposes you are authorized to perform and follow Reddit's applicable terms, community rules, privacy requirements, and data retention/deletion obligations. This Actor is independent of Reddit and does not grant a Reddit data license. Review potential opportunities manually and avoid unsolicited bulk outreach.

For errors, open an issue on this Actor with the run ID, non-sensitive input, and expected behavior. Never post API tokens or private dataset contents in public issues.

# Actor input Schema

## `query` (type: `string`):

Product category to search, such as CRM software. English queries work best.

## `maxPosts` (type: `integer`):

Caps source posts, including posts that do not qualify. Source scraping costs extra.

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

Maximum ranked leads saved and billed.

## `minLeadScore` (type: `integer`):

Heuristic score from 0 to 100; not a purchase probability.

## `maxAgeDays` (type: `integer`):

Exclude older or undated posts. Set 0 to disable the age filter.

## `time` (type: `string`):

Reddit search time window.

## `subreddit` (type: `string`):

Bare community name, for example SaaS. Omit to search all Reddit.

## `competitors` (type: `array`):

Names to identify in posts. Overrides the built-in common SaaS list.

## `competitorQueries` (type: `boolean`):

Search alternatives for the first five competitor names. Allows competitor-only relevance matches. Configure category-specific competitors first.

## `excludePromotional` (type: `boolean`):

Filter common self-promotion and no-longer-looking phrases.

## `maxSourceChargeUsd` (type: `number`):

Separate budget for the Reddit Scraper Lite dependency. Its fees are charged to your Apify account even when no leads qualify.

## `sourceDatasetId` (type: `string`):

Analyze an accessible Apify dataset instead of running the scraper. Accepts title, body/selftext, url/permalink, and createdAt/created\_utc fields.

## Actor input object example

```json
{
  "query": "CRM software",
  "maxPosts": 10,
  "maxLeads": 50,
  "minLeadScore": 45,
  "maxAgeDays": 30,
  "time": "month",
  "competitorQueries": false,
  "excludePromotional": true,
  "maxSourceChargeUsd": 2
}
```

# Actor output Schema

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

Ranked posts with evidence and heuristic scores.

## `summary` (type: `string`):

Source references and processing counts.

# 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 = {
    "query": "CRM software"
};

// Run the Actor and wait for it to finish
const run = await client.actor("herazur/reddit-buyer-intent-product-request-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 = { "query": "CRM software" }

# Run the Actor and wait for it to finish
run = client.actor("herazur/reddit-buyer-intent-product-request-finder").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "query": "CRM software"
}' |
apify call herazur/reddit-buyer-intent-product-request-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,herazur/reddit-buyer-intent-product-request-finder"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/DTrEwGjojZ0IdLFOJ/builds/SrjkwSlCqfOza5LH4/openapi.json
