# Review Complaint Analyzer - Pain Themes, Severity & Trends (`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
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

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

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

### 🧩 Related Actors

- [ReclameAqui Scraper](https://apify.com/webdata_labs/reclameaqui-scraper) - Brazilian complaint records and company reputation scores.
- [Hellopeter Reviews Scraper](https://apify.com/webdata_labs/hellopeter-company-reviews-scraper) - South African consumer reviews and company responses.
- [App Store Reviews Scraper](https://apify.com/webdata_labs/apple-app-store-reviews-scraper) - iOS ratings and the complaint themes underneath them.
- [Ad Creative Analyzer](https://apify.com/webdata_labs/ai-ad-creative-intelligence-api) - break scraped ad creatives down into hooks, offers, CTAs and angles.
- [Product Taxonomy Mapper API](https://apify.com/webdata_labs/ai-product-taxonomy-mapper-api) - map messy product titles onto a clean category tree.

### ❓ 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(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 '{
  "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": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,webdata_labs/review-pain-miner-api"
        }
    }
}
```

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/zjq6SfCJMyFXCexkw/builds/lhC7SeUub6ggJq50x/openapi.json
