# Reddit Pain Point and Trend Miner (`ghostgrid/reddit-pain-point-miner`) Actor

Mine Reddit pain points using public Reddit endpoints when available, with PullPush archive fallback for post-level data when Reddit blocks cloud traffic.

- **URL**: https://apify.com/ghostgrid/reddit-pain-point-miner.md
- **Developed by:** [GhostGrid](https://apify.com/ghostgrid) (community)
- **Categories:** AI, Business, Automation
- **Stats:** 1 total users, 0 monthly users, 96.8% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.90 / 1,000 posts

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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 Pain Point and Trend Miner

Scrape data from [www.reddit.com](https://www.reddit.com) with this Actor.

Mine Reddit for pain points, complaints, buyer intent signals, and startup ideas from any subreddit.

### What does this Actor do?

Mines Reddit for pain points, complaints, buyer intent signals, and startup ideas. Analyzes posts and comments with keyword matching, sentiment analysis, and competitor tracking.

The Actor outputs structured JSON data to the Apify dataset, ready for export to CSV, JSON, Excel, or direct API consumption.

### Why use it?

Discover startup ideas by finding recurring complaints and unmet needs in Reddit communities. Useful for founders, product managers, and market researchers doing customer discovery.

### What data can it extract?

| Field | Type | Description |
|-------|------|-------------|
| `type` | String | Extracted field |
| `subreddit` | String | Extracted field |
| `source` | String | Extracted field |
| `title` | String | Extracted field |
| `body` | String | Extracted field |
| `selftext` | String | Extracted field |
| `url` | String | Extracted field |
| `score` | Integer | Reddit score |
| `num_comments` | Integer | Number of comments |
| `complaint_category` | String | Extracted field |
| `buyer_intent` | String | Extracted field |
| `sentiment` | String | Extracted field |
| `mentioned_tools` | String | Extracted field |
| `pricing_mentions` | String | Extracted field |
| `keywords_matched` | String | Extracted field |
| `repeated_phrases` | String | Extracted field |
| `mode` | String | Extracted field |
| `fetch_status` | String | Extracted field |
| `error_message` | String | Extracted field |
| `crawled_at` | String | Extracted field |

### How to use it

1. Click **Start** to run the Actor
2. Configure the input parameters (see table below)
3. Wait for the Actor to finish
4. Download results from the **Output** tab in CSV, JSON, or other formats

### How much does it cost?

This Actor uses Pay Per Event (PPE) pricing. You are charged for posts and comments written to the dataset. A run with 100 posts and no comments costs about $0.093, including the $0.003 run-start charge.

| Event | Price |
|-------|-------|
| Actor start | $0.003 |
| Per post | $0.0009 |
| Per comment | $0.00035 |

### Input

| Parameter | Description | Type | Default |
|-----------|-------------|------|---------|
| `subreddits` | Subreddits | array | Required |
| `keywords` | Keywords | array | \[] |
| `competitor_names` | Competitor Names | array | \[] |
| `date_range` | Date Range | string | month |
| `min_score` | Minimum Score | integer | 0 |
| `min_comments` | Minimum Comments | integer | 0 |
| `mode` | Mining Mode | string | general |
| `max_posts` | Max Posts | integer | 100 |
| `include_comments` | Include Comments | boolean | True |
| `max_comments_per_post` | Max Comments per Post | integer | 20 |
| `proxyConfiguration` | Proxy Configuration | object | Apify Proxy, US |
| `llm_api_key` | Optional OpenAI-compatible key for buyer-intent scoring | secret | - |
| `llm_model` | LLM model name | string | gpt-4o-mini |
| `llm_base_url` | OpenAI-compatible API base URL | string | https://api.openai.com/v1 |

### Output

Each result item is pushed to the dataset as a JSON object:

```json
{
  "type": "Sample type",
  "subreddit": "Sample subreddit",
  "source": "Sample source",
  "title": "Sample title",
  "body": "Sample text content..."
}
```

### FAQ

**How do I configure the input?**

Provide the required input parameters (see table below). All optional fields have sensible defaults.

**How many results can I get?**

There is no hard limit. Use the max items or max pages parameters to control how much data is collected.

**Does this Actor use proxies?**

Some targets may require Apify Proxy to avoid rate limits. Reddit frequently blocks datacenter traffic; use a residential proxy group or a custom proxy when available. If all sources are unavailable, the Actor writes a status item instead of failing the run.

### Disclaimer

This Actor extracts publicly available data. Personal data may be present in results. Users are responsible for compliance with applicable data protection laws including GDPR. This Actor is not affiliated with the target website.

# Actor input Schema

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

List of subreddit names without the r/ prefix (e.g. SaaS, startups, artificial).

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

Optional keyword filters. Only posts containing at least one of these words will be processed.

## `competitor_names` (type: `array`):

Brand or product names to track mentions of (e.g. Stripe, Intercom, Notion).

## `date_range` (type: `string`):

Time window to search within.

## `min_score` (type: `integer`):

Only include posts with at least this many upvotes.

## `min_comments` (type: `integer`):

Only include posts with at least this many comments.

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

Determines which signals and keywords are prioritized during analysis.

## `max_posts` (type: `integer`):

Maximum number of posts to analyze per subreddit.

## `include_comments` (type: `boolean`):

Whether to fetch and analyze the top comments on each post.

## `max_comments_per_post` (type: `integer`):

Maximum number of top comments to fetch per post.

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

Use Apify Proxy for Reddit requests. Reddit often blocks datacenter traffic, so a US proxy is recommended.

## `llm_api_key` (type: `string`):

Optional. OpenAI-compatible API key for LLM-powered buyer intent scoring. If omitted, rule-based analysis is used.

## `llm_model` (type: `string`):

Model name to use for LLM scoring (e.g. gpt-4o-mini, gpt-4o, deepseek-chat).

## `llm_base_url` (type: `string`):

Base URL for the LLM API (e.g. https://api.openai.com/v1).

## Actor input object example

```json
{
  "subreddits": [
    "SaaS"
  ],
  "keywords": [],
  "competitor_names": [],
  "date_range": "month",
  "min_score": 0,
  "min_comments": 0,
  "mode": "general",
  "max_posts": 100,
  "include_comments": true,
  "max_comments_per_post": 20,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [],
    "apifyProxyCountry": "US"
  },
  "llm_model": "gpt-4o-mini",
  "llm_base_url": "https://api.openai.com/v1"
}
```

# 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 = {
    "subreddits": [
        "SaaS"
    ],
    "keywords": [],
    "competitor_names": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("ghostgrid/reddit-pain-point-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 = {
    "subreddits": ["SaaS"],
    "keywords": [],
    "competitor_names": [],
}

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=ghostgrid/reddit-pain-point-miner",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/UEhWJscvBhDr5V70O/builds/2BNjp1O8ZbbCSeez3/openapi.json
