# Trustpilot Scraper: Reviews, Ratings & Replies | Fast API (`apivault_labs/trustpilot-scraper-reviews-ratings-api`) Actor

Fast Trustpilot scraper for all reviews, ratings, replies, TrustScore, and company profiles. Bypass the 200-review limit with API pagination, bulk runs, and CSV/JSON/Excel-ready output.

- **URL**: https://apify.com/apivault\_labs/trustpilot-scraper-reviews-ratings-api.md
- **Developed by:** [Apivault Labs](https://apify.com/apivault_labs) (community)
- **Categories:** Automation, E-commerce, SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.14 / 1,000 trustpilot reviews

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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 Scraper — Reviews, Ratings & Replies

Fast **Trustpilot scraper** for collecting Trustpilot reviews, ratings, business replies, TrustScore, and company-profile data. Bypass the 200-review limit with complete API pagination and export every review as a separate row.

Scrape all Trustpilot reviews through a fast request-only API workflow. Run bulk company and competitor monitoring, track brand reputation and complaints, analyze ratings and replies, and export clean results to CSV, JSON, or Excel from Apify.

### Why use this Trustpilot scraper?

- **All reviews beyond the 200 limit** — pagination retrieves up to 100 reviews per API request and continues through the available history.
- **Reviews, ratings, and replies** — full review text, star rating, dates, verification, reviewer details, and responses from the business.
- **TrustScore and company profiles** — company rating, review totals, star distribution, country, website, and response metrics.
- **Fast API and bulk scraping** — process multiple companies concurrently without a browser or residential proxy.
- **CSV, JSON, and Excel export** — every review is a separate dataset item, ready for analysis or automation.
- **Competitor and complaint monitoring** — filter low ratings, identify recurring complaint themes, and compare brand reputation.
- **Incremental updates** — collect only reviews published since the previous saved state.

The Actor accepts either a saved `accessToken` or the outer `jwt` cookie for authenticated requests, and collects reviews through fast request-based pagination without a browser.

No browser, WAF cookie, residential proxy, or Trustpilot Business API key is required. Tokens are never emitted to logs or datasets.

### Pricing

Pay per review written to the Reviews dataset. Company summaries and input-status records are not billed as review results. Apify platform usage costs (compute, storage, and network) are charged separately to the user.

| Apify plan | Per review | Per 1,000 reviews | Run start |
|---|---:|---:|---:|
| FREE | $0.00100 | $1.00 | $0.00500 |
| Bronze | $0.00025 | $0.25 | $0.00005 |
| Silver | $0.00018 | $0.18 | $0.00005 |
| Gold | $0.00014 | $0.14 | $0.00005 |
| Platinum | $0.00012 | $0.12 | $0.00005 |
| Diamond | $0.00010 | $0.10 | $0.00005 |

Paid plans get the lowest Trustpilot scraping price, while the FREE tier remains inexpensive enough for real testing without turning signup credits into unlimited bulk extraction.

### Flexible start input

Use `startUrls` for any mix of bare brands/domains, normal websites, Trustpilot company profiles (`/review/`), individual reviews (`/reviews/`), consumer profiles (`/users/`), and Trustpilot search URLs (`/search?query=`). The legacy `companyUrls` field remains accepted. `searchTerms` can be combined with all URL inputs.

Use `lastDays` for rolling windows, or enable `incremental` to collect only reviews newer than the saved timestamp. Supply `incrementalStateStoreId` for automatic state reuse between runs. Enable `expandRegionalDomains` to discover exact-name regional profiles, with `maxRegionalDomains` as a safety cap. `maxConcurrency` controls how many companies are processed in parallel.

Enable `includeReviewInsights` for a deterministic company digest with average rating, sentiment split, rating distribution, verified/reply percentages, languages, complaint themes, frequent negative terms, and feature-request snippets. It does not use AI or require another API key.

### Content modes

- `companyInformationAndReviews` — company profile followed by reviews.
- `reviews` — review rows only.
- `companyInformation` — one company-information row, without review requests.
- `bulkCompanyInformation` — company-information rows for every supplied domain.

### Repeat runs and regional brands

For a first incremental run, enable `incremental`. The Actor writes the newest timestamp per company to `INCREMENTAL_STATE`. To make later runs reuse it automatically, point `incrementalStateStoreId` to a persistent Apify key-value store; the Actor reads and updates that record without exposing authentication data.

Regional discovery resolves the supplied company, searches Trustpilot for profiles with the exact normalized display name, removes duplicates, and respects `maxRegionalDomains`. It is disabled by default to avoid unexpected requests.

### Filters and output

The Actor supports multiple companies, start page, maximum pages/reviews, star ratings, languages, reviewer countries, verified reviews, reviews with replies, an exact `startDate`, and presets for the last 30 days or 3/6/12 months.

Full review rows include complete text, dates, verification and source metadata, reviewer profile/avatar, company reply and response time, TrustScore, star distribution, and company metadata. `compact` returns essential fields, while `includeRaw` preserves the complete API object. Company items can include sampled reply rate, average response time, and review insights.

### Local run

Copy `INPUT.example.json` to `INPUT.json`, set `TRUSTPILOT_ACCESS_TOKEN` or `TRUSTPILOT_JWT`, then run:

```powershell
go test ./...
go run .
```

Local results are written to `OUTPUT.json`. On Apify, output is separated into **Reviews**, **Companies**, and **Input errors** datasets. `SUMMARY`, `INPUT_STATUS`, and `INCREMENTAL_STATE` are also stored in the default key-value store.

Store the consumer token only as an Apify secret and replace it if the session expires or is revoked.

# Actor input Schema

## `startUrls` (type: `array`):

One item per row: brand/domain, normal website, Trustpilot /review/, /reviews/, /users/, or /search?query= URL.

## `searchTerms` (type: `array`):

Examples: bankfive, Apple, Vans. May be combined with Start URLs.

## `includeReviewInsights` (type: `boolean`):

Adds rating/sentiment statistics, complaint themes, top negative terms, and feature-request snippets without AI.

## `contentMode` (type: `string`):

Choose reviews, company information, or both.

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

Use 0 to fetch every available review. Each review becomes a separate dataset row.

## `dateRange` (type: `string`):

Convenient relative published-date filter; startDate takes precedence.

## `lastDays` (type: `integer`):

Rolling cutoff recalculated on every run. Leave empty or 0 to disable.

## `startDate` (type: `string`):

Optional YYYY-MM-DD cutoff.

## `filterStars` (type: `array`):

Leave empty to include every rating.

## `sampling` (type: `string`):

Balanced covers every rating; proportional keeps the returned rating mix/order.

## `filterLanguages` (type: `array`):

ISO language codes such as en, de, or fr. Leave empty for all.

## `filterCountries` (type: `array`):

Country codes such as US or DE. Leave empty for all.

## `verifiedOnly` (type: `boolean`):

Keep only reviews marked as verified by Trustpilot.

## `repliesOnly` (type: `boolean`):

Keep only reviews that contain a company reply.

## `strictNameMatch` (type: `boolean`):

Reject autosuggest results that do not closely match the requested brand.

## `includeCompanyDetails` (type: `boolean`):

Writes one company-information item to the separate Companies dataset.

## `includeCompanyResponseMetrics` (type: `boolean`):

Calculate sampled reply count, reply rate, and average response time.

## `emitInputStatus` (type: `boolean`):

Writes invalid, failed, and empty inputs to the separate Input errors dataset and INPUT\_STATUS record.

## `compact` (type: `boolean`):

Return essential review fields only.

## `includeRaw` (type: `boolean`):

Preserve the complete mobile API review object under raw.

## `startPage` (type: `integer`):

Start review pagination from this API page.

## `maxPages` (type: `integer`):

Each page contains up to 100 reviews.

## `sortBy` (type: `string`):

Auto and recency return newest reviews first. Relevance is attempted and safely falls back to newest if the API rejects it.

## `maxRetries` (type: `integer`):

Retries for temporary API or network failures.

## `timeout` (type: `integer`):

Per-request timeout in seconds.

## `trustpilotAccessToken` (type: `string`):

Sent as Authorization: Bearer. Prefer the TRUSTPILOT\_ACCESS\_TOKEN Actor secret.

## `trustpilotJwt` (type: `string`):

Alternative jwt cookie; accessToken is extracted in memory.

## `incremental` (type: `boolean`):

First run builds state. Later runs skip reviews already seen. For automatic persistence, provide a state store ID below.

## `incrementalStateStoreId` (type: `string`):

Optional Apify key-value store ID used to read and update INCREMENTAL\_STATE across runs.

## `incrementalState` (type: `object`):

Optional domain-to-latest-publishedAt map. Useful when state is supplied directly by API.

## `expandRegionalDomains` (type: `boolean`):

Find additional country or regional Trustpilot profiles whose display name exactly matches the resolved company.

## `maxRegionalDomains` (type: `integer`):

Safety cap when regional profile discovery is enabled.

## `maxConcurrency` (type: `integer`):

Parallel company requests. Three is a safe default for speed and rate limits.

## Actor input object example

```json
{
  "startUrls": [
    "whatsapp.checkleaked.cc"
  ],
  "searchTerms": [],
  "includeReviewInsights": true,
  "contentMode": "companyInformationAndReviews",
  "maxReviews": 0,
  "dateRange": "all",
  "lastDays": 0,
  "startDate": "",
  "filterStars": [],
  "sampling": "balanced",
  "filterLanguages": [],
  "filterCountries": [],
  "verifiedOnly": false,
  "repliesOnly": false,
  "strictNameMatch": false,
  "includeCompanyDetails": true,
  "includeCompanyResponseMetrics": true,
  "emitInputStatus": true,
  "compact": false,
  "includeRaw": false,
  "startPage": 1,
  "maxPages": 100,
  "sortBy": "auto",
  "maxRetries": 3,
  "timeout": 45,
  "incremental": false,
  "incrementalStateStoreId": "",
  "incrementalState": {},
  "expandRegionalDomains": false,
  "maxRegionalDomains": 10,
  "maxConcurrency": 3
}
```

# Actor output Schema

## `reviews` (type: `string`):

Every review as a separate item.

## `companies` (type: `string`):

One profile and optional insights item per company.

## `inputStatus` (type: `string`):

Invalid, failed, or empty inputs.

# 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 = {
    "startUrls": [
        "whatsapp.checkleaked.cc"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("apivault_labs/trustpilot-scraper-reviews-ratings-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 = { "startUrls": ["whatsapp.checkleaked.cc"] }

# Run the Actor and wait for it to finish
run = client.actor("apivault_labs/trustpilot-scraper-reviews-ratings-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 '{
  "startUrls": [
    "whatsapp.checkleaked.cc"
  ]
}' |
apify call apivault_labs/trustpilot-scraper-reviews-ratings-api --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,apivault_labs/trustpilot-scraper-reviews-ratings-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/1oi5wwO1HhVHXWqqw/builds/DXnhhpN6EanSdA8ln/openapi.json
