# Trustpilot Reviews Miner (`cynix_dev/trustpilot-reviews-miner`) Actor

Mine Trustpilot product reviews by name: title, star rating, body. Playwright + residential proxy. G2/Capterra are separate actors sharing the same output schema for easy union.

- **URL**: https://apify.com/cynix\_dev/trustpilot-reviews-miner.md
- **Developed by:** [Cynix Dev](https://apify.com/cynix_dev) (community)
- **Categories:** Automation, E-commerce, SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.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?

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

## Trustpilot Reviews Miner

Mine **product reviews** from **Trustpilot** by product or brand name — review title, star rating and body text. Renders the listing with Playwright through a residential proxy. Built for competitor analysis, sentiment mining and product research.

> **Unofficial tool.** This Actor is not affiliated with, sponsored by, or endorsed by Trustpilot A/S. It is an independent tool that collects publicly available information.

### Why Trustpilot-only

Trustpilot is the one major review portal whose protection a lightweight Playwright + residential-proxy actor can clear reliably. **G2** and **Capterra** sit behind hard **DataDome / anti-bot CAPTCHA** walls that need dedicated anti-bot handling, so they are shipped as their own actors (`g2-reviews-miner`, `capterra-reviews-miner`) rather than bolted onto this one. All three share the **same output schema**, so their datasets union directly (see Integration below).

### Features

- **Trustpilot** — real reviews with star ratings, via the residential proxy.
- **Product / brand name input** — `slack`, `hubspot`, etc. Trustpilot keys on the brand domain, so `slack` becomes `trustpilot.com/review/slack.com`.
- **Rendered extraction** — Playwright reads the listing in a real browser.
- **Residential proxy** — Trustpilot is Cloudflare-protected; enabled by default.
- **Clean typed fields** — `source`, `product`, `title`, `rating`, `body`, `url`, `fetchedAt`.
- **Result cap** — `maxResults` (1–300).

### What people use it for

- Competitor analysis — compare review sentiment across portals (union with G2/Capterra actors).
- Sentiment mining — feed `body` text into an NLP pipeline.
- Product research — what users praise and complain about.
- Vendor evaluation — gather real-user signal before a purchase.
- Brand monitoring — track your own product's reviews.

### Input

`productName` is required.

| Field | Type | Default | What it does |
| --- | --- | --- | --- |
| `productName` **(required)** | string | `slack` | Product / brand to mine, e.g. `slack`, `hubspot`. |
| `maxResults` | integer | `50` | Cap on reviews to return (1–300). |
| `proxyConfiguration` | object | residential | Trustpilot is Cloudflare-protected; residential proxy is the default. |

#### Input example

```json
{
  "productName": "slack",
  "maxResults": 50
}
```

### Output

One record per review:

`source`, `product`, `title`, `rating`, `body`, `url`, `fetchedAt`.

Export the dataset as JSON, CSV, Excel, XML or JSONL from the Console, or pull it programmatically through the Apify API.

### Integration with G2 / Capterra actors

The three review-mining actors (`trustpilot-reviews-miner`, plus the upcoming `g2-reviews-miner` and `capterra-reviews-miner`) emit **identical fields**, only differing by the `source` tag. To build a unified review dataset:

1. Run each actor for the same `productName`.
2. Union their datasets (Apify's **Combine datasets** tool, or a single `dataset.getItems()` merge in your code).
3. Group/analyze by `source` — Trustpilot skews consumer/post-purchase, G2 & Capterra skew B2B.

Because every record carries its `source`, sentiment divergence across portals is directly comparable (all use a 1–5 star scale, so `rating` is comparable as-is).

If a run returns 0 records, check the run log: a `Trustpilot blocked by anti-bot protection` warning means the proxy IP was challenged — re-run, or switch to a different residential country/exit.

### How to use it

1. Click **Try for free** (or **Start**).
2. Fill in `productName` (the default already produces a working run).
3. Press **Start** and watch the log; results stream into the dataset.
4. When the run finishes, open **Output/Storage** and export as JSON, CSV or Excel.

Runs can be scheduled and wired into Slack, Google Sheets, Zapier, Make, webhooks or your own backend.

### Proxy configuration

Accepts a standard Apify **proxy configuration** object. Residential proxy is the default because the target rate-limits datacenter IPs; you can select a specific exit country or supply your own proxy URLs.

```json
{
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

### Pricing

Billed on Apify's **pay-per-event** model: a small charge when a run starts, plus a charge per result written. A run that finds nothing costs only the start event.

### FAQ

#### Why only Trustpilot?

G2 and Capterra are behind DataDome anti-bot CAPTCHA walls that a plain Playwright actor can't pass. They're separate actors with dedicated anti-bot handling. All three share the output schema so you can union them.

#### Why a residential proxy?

Trustpilot sits behind Cloudflare and blocks datacenter IPs. Residential routing returns the real review listings.

#### How current are the reviews?

It captures what Trustpilot displays at scrape time. For trends, schedule runs and accumulate, keyed by review URL to dedupe.

### Legal and responsible use

This Actor collects only publicly available information. You are responsible for how you use the data, including compliance with the target site's Terms of Service, robots directives, copyright, and data protection law such as GDPR and CCPA. Do not use it to gather personal data without a lawful basis.

### Support and feedback

Found a bug, hit a site change, or need an extra field? Open a ticket on the **Issues** tab. Feature requests and custom-scraper enquiries are welcome through the same channel.

# Actor input Schema

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

Product / brand to mine reviews for, e.g. 'slack', 'hubspot'. Trustpilot keys on the brand domain, so 'slack' becomes trustpilot.com/review/slack.com.

## `maxResults` (type: `integer`):

Cap on reviews to return (1-300).

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

Trustpilot is Cloudflare-protected. Residential proxy is strongly recommended (and is the default).

## Actor input object example

```json
{
  "productName": "slack",
  "maxResults": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `source` (type: `string`):

Review site (trustpilot/g2/capterra).

## `product` (type: `string`):

Product name.

## `title` (type: `string`):

Review title.

## `rating` (type: `string`):

Star rating.

## `body` (type: `string`):

Review body text.

## `url` (type: `string`):

Source URL.

## `fetchedAt` (type: `string`):

ISO timestamp.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("cynix_dev/trustpilot-reviews-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 = {}

# Run the Actor and wait for it to finish
run = client.actor("cynix_dev/trustpilot-reviews-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 '{}' |
apify call cynix_dev/trustpilot-reviews-miner --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,cynix_dev/trustpilot-reviews-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/d3aX2CrMfY96G0HpA/builds/gcBcFCXqEMdhpEnfM/openapi.json
