# Review Pain Miner API (`webdata_labs/review-pain-miner-api`) Actor

\[💵 $5.00 / 1K] Turn product reviews into ranked pain themes, severity, trend signals, evidence, and recommended actions.

- **URL**: https://apify.com/webdata\_labs/review-pain-miner-api.md
- **Developed by:** [WebData Labs](https://apify.com/webdata_labs) (community)
- **Categories:** AI, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

$5.00 / 1,000 review pain insight rows

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

## Review Pain Miner API

Turn product reviews into ranked customer pain themes, severity scores, trend signals, evidence, and recommended actions. Use inline JSON or enrich an existing Apify dataset.

### ✅ What you get

- Ranked complaint and product-pain themes
- Severity and evidence-volume confidence
- Earlier-vs-later trend direction when dates are available
- Up to five auditable review excerpts per theme
- Deduplicated counts, rating summary, and recommended next actions

### ❌ What this isn't

This is not a generic sentiment wrapper and it does not claim causality. Version 1 uses a transparent multilingual taxonomy so the same input produces the same result without LLM cost or API keys.

### 🔎 Use cases

- Find recurring product complaints before roadmap planning
- Detect pain that increased after a release
- Compare complaint themes across competitors
- Turn App Store, Trustpilot, Google, or marketplace review datasets into action-ready output

### 👥 Who it is for

Product managers, voice-of-customer teams, app agencies, reputation teams, and researchers who already have review data but need prioritized findings.

### ⚙️ Input

Pass `reviews` inline or supply an Apify `datasetId`. Common source fields are detected automatically. Use `fieldMapping` when your columns have custom names.

### 📥 Example input

```json
{
  "productName": "Example App",
  "reviews": [
    { "id": "r1", "text": "The app keeps crashing during upload", "rating": 1, "date": "2026-07-01", "version": "4.2" },
    { "id": "r2", "text": "Upload crashed again after the update", "rating": 1, "date": "2026-07-05", "version": "4.2" }
  ],
  "minimumThemeMentions": 2
}
```

### 📤 Output

Each `THEME` row includes the theme, mention count/share, severity, trend, confidence, recommended action, and evidence objects. A final `SUMMARY` row and the `OUTPUT` key-value record contain run-level findings.

### 💵 Pricing

Pay-per-result pricing starts at $5 per 1,000 output rows. A typical analysis emits only a handful of theme rows plus one summary row. Apify platform usage is included.

### 🔁 Example tasks

- Mine one-star mobile app complaints
- Detect pain themes rising after a release
- Compare competitor review complaints

### ⚠️ Limitations

- Taxonomy detection can miss novel or highly domain-specific wording.
- Trend comparison requires at least six dated reviews.
- Evidence confidence measures volume, not causal certainty.
- Review content may contain personal data; only process data you are allowed to use.

### 🧩 Integration

Run from Apify Console, REST API, schedules, webhooks, or `apify-client`. Dataset output is JSON/CSV/Excel compatible.

### ❓ FAQ

**Does it need an OpenAI key?** No. The MVP is deterministic and has no third-party AI cost.

**Can it analyze an existing Actor dataset?** Yes. Pass its dataset ID.

**Does it support custom schemas?** Yes. Map custom columns with `fieldMapping`.

### 🛠️ Support

For reproducible issues, include a sanitized sample row, the field mapping, and the run ID. Do not include API keys or sensitive personal data.

# Actor input Schema

## `reviews` (type: `array`):

Inline review objects. Common text, rating, date, version, URL, and author fields are detected automatically.

## `datasetId` (type: `string`):

Optional Apify dataset containing review rows.

## `productName` (type: `string`):

Optional product label included in the summary row.

## `maxReviews` (type: `integer`):

Maximum number of source rows to analyze in this run.

## `minimumThemeMentions` (type: `integer`):

Hide themes supported by fewer matching reviews.

## `comparePeriods` (type: `boolean`):

Split dated reviews at the median date and label themes as rising, stable, or falling.

## `fieldMapping` (type: `object`):

Map non-standard source column names.

## Actor input object example

```json
{
  "reviews": [
    {
      "id": "r1",
      "text": "The app keeps crashing whenever I upload a photo.",
      "rating": 1,
      "date": "2026-06-01",
      "version": "4.1"
    },
    {
      "id": "r2",
      "text": "Still crashes after the latest update and support never replies.",
      "rating": 1,
      "date": "2026-06-15",
      "version": "4.2"
    },
    {
      "id": "r3",
      "text": "Photo upload is slow and sometimes shows an error.",
      "rating": 2,
      "date": "2026-07-01",
      "version": "4.2"
    },
    {
      "id": "r4",
      "text": "I was charged after cancelling my subscription.",
      "rating": 1,
      "date": "2026-07-05",
      "version": "4.2"
    },
    {
      "id": "r5",
      "text": "Please add an export button. The navigation is confusing.",
      "rating": 3,
      "date": "2026-07-08",
      "version": "4.2"
    },
    {
      "id": "r6",
      "text": "The app crashes on startup and I cannot login.",
      "rating": 1,
      "date": "2026-07-10",
      "version": "4.2"
    }
  ],
  "productName": "Example product",
  "maxReviews": 1000,
  "minimumThemeMentions": 2,
  "comparePeriods": true
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `summary` (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 = {
    "reviews": [
        {
            "id": "r1",
            "text": "The app keeps crashing whenever I upload a photo.",
            "rating": 1,
            "date": "2026-06-01",
            "version": "4.1"
        },
        {
            "id": "r2",
            "text": "Still crashes after the latest update and support never replies.",
            "rating": 1,
            "date": "2026-06-15",
            "version": "4.2"
        },
        {
            "id": "r3",
            "text": "Photo upload is slow and sometimes shows an error.",
            "rating": 2,
            "date": "2026-07-01",
            "version": "4.2"
        },
        {
            "id": "r4",
            "text": "I was charged after cancelling my subscription.",
            "rating": 1,
            "date": "2026-07-05",
            "version": "4.2"
        },
        {
            "id": "r5",
            "text": "Please add an export button. The navigation is confusing.",
            "rating": 3,
            "date": "2026-07-08",
            "version": "4.2"
        },
        {
            "id": "r6",
            "text": "The app crashes on startup and I cannot login.",
            "rating": 1,
            "date": "2026-07-10",
            "version": "4.2"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("webdata_labs/review-pain-miner-api").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 = { "reviews": [
        {
            "id": "r1",
            "text": "The app keeps crashing whenever I upload a photo.",
            "rating": 1,
            "date": "2026-06-01",
            "version": "4.1",
        },
        {
            "id": "r2",
            "text": "Still crashes after the latest update and support never replies.",
            "rating": 1,
            "date": "2026-06-15",
            "version": "4.2",
        },
        {
            "id": "r3",
            "text": "Photo upload is slow and sometimes shows an error.",
            "rating": 2,
            "date": "2026-07-01",
            "version": "4.2",
        },
        {
            "id": "r4",
            "text": "I was charged after cancelling my subscription.",
            "rating": 1,
            "date": "2026-07-05",
            "version": "4.2",
        },
        {
            "id": "r5",
            "text": "Please add an export button. The navigation is confusing.",
            "rating": 3,
            "date": "2026-07-08",
            "version": "4.2",
        },
        {
            "id": "r6",
            "text": "The app crashes on startup and I cannot login.",
            "rating": 1,
            "date": "2026-07-10",
            "version": "4.2",
        },
    ] }

# Run the Actor and wait for it to finish
run = client.actor("webdata_labs/review-pain-miner-api").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 '{
  "reviews": [
    {
      "id": "r1",
      "text": "The app keeps crashing whenever I upload a photo.",
      "rating": 1,
      "date": "2026-06-01",
      "version": "4.1"
    },
    {
      "id": "r2",
      "text": "Still crashes after the latest update and support never replies.",
      "rating": 1,
      "date": "2026-06-15",
      "version": "4.2"
    },
    {
      "id": "r3",
      "text": "Photo upload is slow and sometimes shows an error.",
      "rating": 2,
      "date": "2026-07-01",
      "version": "4.2"
    },
    {
      "id": "r4",
      "text": "I was charged after cancelling my subscription.",
      "rating": 1,
      "date": "2026-07-05",
      "version": "4.2"
    },
    {
      "id": "r5",
      "text": "Please add an export button. The navigation is confusing.",
      "rating": 3,
      "date": "2026-07-08",
      "version": "4.2"
    },
    {
      "id": "r6",
      "text": "The app crashes on startup and I cannot login.",
      "rating": 1,
      "date": "2026-07-10",
      "version": "4.2"
    }
  ]
}' |
apify call webdata_labs/review-pain-miner-api --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/zjq6SfCJMyFXCexkw/builds/Os5L4bfrC854DZGlQ/openapi.json
