# Reddit Scraper: Pain Points & Demand Miner (`lsso/reddit-demand-miner`) Actor

Find what people complain about, which tools they are looking for, who is willing to pay and which competitors they leave on Reddit. Type a keyword or subreddit: get labelled posts and comments plus an insights report. No login, no API key.

- **URL**: https://apify.com/lsso/reddit-demand-miner.md
- **Developed by:** [Haidong Nan](https://apify.com/lsso) (community)
- **Categories:** Social media, Marketing, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## 🔎 Reddit Pain Point & Demand Miner

**Find out what people hate, what they are looking for and what they would pay for, straight from Reddit.** Type a product, brand or topic (`notion`, `shopify`, `invoice app`) or a list of subreddits. The Actor finds the right communities, reads the posts and the comments of the most discussed threads, and labels every item as a **complaint, "looking for a tool", feature request, question or praise**. On top you get an insights report with **top pain points**, **what people are searching for**, **competitor moves** ("alternative to X", "switched from X to Y") and **willing-to-pay mentions**.

- ✅ **Keyword or subreddit**: `notion` finds r/Notion by itself. No subreddit for your topic? The keyword is searched in r/SaaS, r/Entrepreneur, r/smallbusiness, r/startups, r/software and r/productivity
- ✅ **Posts + comments** with upvotes, comment count, flair, date and link. **No usernames are collected**
- ✅ **Every item labelled**: complaint, looking for a tool, request, question, praise, other, plus a `willingToPay` flag
- ✅ **Competitor moves**: which brands people want an alternative to, which ones they leave and where they go
- ✅ **Pain point and demand themes**: recurring phrases, weighted by upvotes, with example posts
- ✅ **HTML insights report + clean JSON / CSV / Excel**
- ✅ **No login, no Reddit API key**. $1 per 1,000 results

### 🎯 Who is it for?

- **Founders and indie hackers**: validate an idea before you build it. Real people asking "is there a tool for…" is the best signal there is.
- **Product managers**: the top complaints about your product and your competitors, ranked by upvotes.
- **Marketers and agencies**: the exact words customers use, for ads, landing pages and cold emails.
- **E-commerce sellers**: what buyers complain about in r/AmazonSeller, r/shopify, r/FulfillmentByAmazon or any product niche.

### 🚀 Quick start

1. Type one or more **keywords** (e.g. `notion`) and/or **subreddits** (e.g. `SaaS`).
2. Pick a **time window** (default: last 90 days).
3. Click **Start**. Open the **REPORT** in the Storage tab, or download all posts and comments as JSON, CSV or Excel.

### ⬇️ Input examples

Everything people said about Notion in the last 30 days (this is the run the examples below come from):

```json
{ "keywords": ["notion"], "days": 30, "maxPostsPerSubreddit": 150, "commentsFromTopPosts": 10 }
```

Idea validation: who is looking for an invoicing tool in small-business communities, demand signals only:

```json
{ "keywords": ["invoice"], "subreddits": ["smallbusiness", "freelance", "Entrepreneur"], "days": 180, "onlyDemandSignals": true }
```

Weekly monitoring of a whole community (schedule it):

```json
{ "subreddits": ["SaaS"], "days": 7, "maxPostsPerSubreddit": 500 }
```

### ⬆️ Output

One row per post or comment:

```json
{
  "type": "post",
  "id": "1wl2t46",
  "subreddit": "Notion",
  "title": "anything similar to notion that’s not obsidian?",
  "text": "anything similar to notion that’s not obsidian?\n\ni have used notion for years because...",
  "label": "seeking",
  "willingToPay": false,
  "score": 63,
  "numComments": 51,
  "createdAt": "2026-09-20T00:55:16.000Z",
  "url": "https://www.reddit.com/r/Notion/comments/1wl2t46/",
  "flair": ":community: Community",
  "matchedKeyword": null,
  "postId": "1wl2t46",
  "postTitle": "anything similar to notion that’s not obsidian?"
}
```

Comments have `"type": "comment"`, the `postId` and `postTitle` of their thread and a `depth` (0 = top-level).

The key-value store has **OUTPUT** (insights as JSON) and **REPORT** (HTML):

```json
{
  "items": 675,
  "mix": { "complaint": { "count": 64, "share": 0.095 }, "seeking": { "count": 19, "share": 0.028 }, "request": { "count": 11, "share": 0.016 } },
  "willingToPay": { "count": 0, "examples": [] },
  "painPoints": [{ "theme": "price", "mentions": 7, "totalScore": 125, "examples": [] }, { "theme": "price increase", "mentions": 4, "totalScore": 102, "examples": [] }],
  "demandThemes": [{ "theme": "obsidian", "mentions": 6, "totalScore": 79, "examples": [] }],
  "competitorFlows": { "alternativesWanted": [], "leaving": [{ "name": "Evernote", "mentions": 1 }], "movingTo": [{ "name": "Obsidian", "mentions": 2 }] },
  "topSeeking": [], "topComplaints": [], "topRequests": [], "topQuestions": [],
  "subreddits": [{ "subreddit": "Notion", "items": 668, "complaint": 64, "seeking": 19, "request": 11 }]
}
```

### 💵 Pricing

| Event | Price |
|---|---|
| Post or comment returned | **$0.001** ($1 per 1,000) |
| Insights report (themes, competitor moves, willing to pay), once per run with 20+ items | **$0.10** |

**Example:** the Notion run above (154 posts + 521 comments from the last 30 days) + the report = **$0.78**. With **Only return demand signals** you pay only for complaints, "looking for" posts, requests and willing-to-pay mentions, and the report still uses everything that was read.

### 🤖 Use it from AI agents (MCP)

Add this URL as an MCP server in Claude, Cursor or any MCP client and ask *"What do people complain about in r/shopify this month?"*:

```
https://mcp.apify.com?tools=lsso/reddit-demand-miner
```

### ❓ FAQ

**Where does the data come from?** From a public, near real-time archive of Reddit (the same public posts and comments you can see on reddit.com), so no Reddit login or API key is needed.

**How are items labelled?** With keyword rules and negation handling, tuned for English. "Looking for a tool" means phrases like *is there a tool for…*, *alternative to…*, *anything similar to…*. A complaint needs a clear negative signal. Rules are fast, free and consistent; they are not perfect, so the report always links to the original posts.

**Why are upvotes on very new posts low?** The archive stores a post shortly after it is published, so upvote and comment counts of posts from the last day or two can be lower than on reddit.com. Older posts are accurate. Rankings use upvotes plus the comments the Actor actually read, so new threads still surface.

**What about NSFW content?** NSFW posts are skipped, and so are bots such as AutoModerator.

**Is it legal? What about privacy?** The Actor reads only public posts that anyone can see without logging in, through a public third-party archive of Reddit. It does **not** output usernames or any other personal data; only the post text, scores, dates and links. Reddit content belongs to its authors: use the results for research and analysis, and follow Reddit's terms and privacy laws such as GDPR in how you use and store them. Do not use the output to contact or track individual users.

### 📝 Changelog

- **1.1** (2026-09-25): Usernames are no longer collected. Faster runs (no extra requests to reddit.com). A report is created and charged only when at least 20 items are found. If the archive stops responding mid-run, you get (and pay for) the results collected so far.
- **1.0** (2026-09-24): First release: keyword and subreddit mode, automatic subreddit discovery, posts and comments, six labels, willing-to-pay flag, pain point and demand themes, competitor moves, HTML insights report.

# Actor input Schema

## `keywords` (type: `array`):

A product, brand or topic, e.g. `notion`, `shopify`, `invoice app`, `crm`. The Actor finds the matching subreddits (r/Notion) and searches your keywords in them.

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

Optional. Communities to read, e.g. `SaaS`, `smallbusiness`, `r/AmazonSeller` or a reddit.com/r/... link. With keywords: only posts matching them. Without keywords: every post in the time window.

## `autoDiscoverSubreddits` (type: `boolean`):

Look up subreddits named after each keyword (e.g. `notion` → r/Notion). If none exists, the keyword is searched in r/SaaS, r/Entrepreneur, r/smallbusiness, r/startups, r/software and r/productivity.

## `days` (type: `integer`):

Only posts from the last N days.

## `maxPostsPerSubreddit` (type: `integer`):

Newest posts first.

## `includeComments` (type: `boolean`):

Also read the comments of the most discussed posts. Comments are where people answer "I switched to X" or "same problem here".

## `commentsFromTopPosts` (type: `integer`):

Posts with the most comments are read first.

## `maxCommentsPerPost` (type: `integer`):

Comments and replies per post.

## `onlyDemandSignals` (type: `boolean`):

Return only complaints, "looking for a tool" posts, feature requests and willing-to-pay mentions. You pay only for what is returned; the insights report still uses everything that was read.

## `analysis` (type: `boolean`):

Pain points, what people look for, competitor moves and willing-to-pay mentions, as JSON (OUTPUT) and HTML (REPORT) in the key-value store.

## Actor input object example

```json
{
  "keywords": [
    "notion"
  ],
  "subreddits": [],
  "autoDiscoverSubreddits": true,
  "days": 90,
  "maxPostsPerSubreddit": 100,
  "includeComments": true,
  "commentsFromTopPosts": 20,
  "maxCommentsPerPost": 100,
  "onlyDemandSignals": false,
  "analysis": true
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `insights` (type: `string`):

No description

## `report` (type: `string`):

No description

# 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 = {
    "keywords": [
        "notion"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("lsso/reddit-demand-miner").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 = { "keywords": ["notion"] }

# Run the Actor and wait for it to finish
run = client.actor("lsso/reddit-demand-miner").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 '{
  "keywords": [
    "notion"
  ]
}' |
apify call lsso/reddit-demand-miner --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,lsso/reddit-demand-miner"
        }
    }
}
```

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/ULOpsgDuPKbikGz4a/builds/5AFifgB4idDGzq4Wv/openapi.json
