# Trustpilot Reviews Scraper — Deep History & Sync (`zenomastro/trustpilot-reviews-reliable`) Actor

Trustpilot reviews scraper for deep reputation research. Go beyond the usual ~200-review anonymous window, filter by rating/language/date/verification/replies, discover brands, export business insights, and run incremental only-new review pulls with persistent monitoring.

- **URL**: https://apify.com/zenomastro/trustpilot-reviews-reliable.md
- **Developed by:** [Rosario Vitale](https://apify.com/zenomastro) (community)
- **Categories:** Business, E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.29 / 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.

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

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

## Trustpilot Reviews Scraper API — 200+ History & Incremental

### Why use this Actor?

Trustpilot reviews scraper for deep reputation research. Go beyond the usual ~200-review anonymous window, filter by rating/language/date/verification/replies, discover brands, export business insights, and run incremental only-new review pulls with persistent monitoring.

### Features

- **Companies or Trustpilot review URLs** — Direct company domains or Trustpilot review URLs. Can be combined with search/category discovery.
- **Maximum reviews per company** — Maximum matching review rows emitted for each unique company.
- **Maximum total reviews** — Hard cap across all companies for predictable runtime and spend.
- **Review order** — Newest first or Trustpilot relevance order.
- **Star ratings** — Optional star filters. Empty means all 1-5 star ratings.
- **Review languages** — Optional ISO language codes such as en, de, fr, it. Empty means all languages and enables automatic language slicing for very deep runs.
- **Published after** — Optional inclusive lower boundary: YYYY-MM-DD or ISO 8601.
- **Published before** — Optional inclusive upper boundary: YYYY-MM-DD or ISO 8601.
- **Review text contains** — Optional case-insensitive keyword across review title and text. Filtered rows are not billed.
- **Verified reviews only** — Only emit reviews whose Trustpilot verification label reports isVerified=true.
- **Company reply** — Return any reviews, only reviews with a company reply, or only reviews without a reply.
- **Minimum useful/like count** — Only emit reviews with at least this many Trustpilot likes/useful votes.

### Use cases

- Brand reputation monitoring.
- Customer feedback research.
- Competitor benchmarking.
- Verified-review datasets.

### Example input

```json
{
  "companies": [
    "booking.com"
  ],
  "maxReviewsPerCompany": 500,
  "maxTotalReviews": 5000,
  "sortBy": "newest",
  "verifiedOnly": false,
  "companyReply": "any"
}
```

### Pricing & cost control

Use the bounded input limits and filters to keep runs predictable. Pay-per-result Actors only charge primary result rows; summary, status and monitoring metadata are designed to add context without inflating result volume.

### FAQ

**What is this Actor for?**\
It is designed for brand reputation monitoring, customer feedback research, competitor benchmarking.

**Can I run it on a schedule?**\
Yes. You can schedule Actor runs on Apify and send the resulting dataset into automations, webhooks, storage, or downstream APIs.

**How do I control cost and run size?**\
Use the input limits and filters shown in the Actor input form. The Actor applies bounded defaults and hard caps so large jobs remain predictable.

### Search keywords

trustpilot reviews scraper, trustpilot review scraper free, trustpilot review scraper github, apify trustpilot reviews scraper, outscraper's trustpilot reviews scraper, scrape trustpilot reviews, trustpilot removed my review, stripe reviews trustpilot, trustpilot bad reviews, trustpilot scraper, trustpilot scraper github, trustpilot scraper free, trustpilot scraper python, trustpilot scraper api

Extract public Trustpilot customer reviews and company reputation data into clean structured records for brand monitoring, customer-experience analysis, competitor research, sentiment pipelines, support intelligence, market research, and AI/LLM workflows.

The Actor uses a real Chromium session only to pass Trustpilot's public browser challenge and initialize the current review application. Pagination then uses Trustpilot's same-origin Next.js review data flow inside that session instead of repeatedly rendering full pages.

### What you get

Each successful review row can include rating, title, full text, language, likes, published/experience dates, reviewer name/country/review count, Trustpilot verification fields, company reply, business TrustScore, total review count, stable IDs, and source-slice metadata.

Optional free business\_summary rows add company profile data, categories, contact information, claim/collection status, review-language distribution, rating distribution, and reply behavior.

### Input

Example:

```json
{
  "companies": ["booking.com", "https://www.trustpilot.com/review/www.revolut.com"],
  "maxReviewsPerCompany": 500,
  "maxTotalReviews": 5000,
  "sortBy": "newest",
  "starRatings": [],
  "languageCodes": [],
  "reviewedAfter": "",
  "reviewedBefore": "",
  "containsText": "",
  "verifiedOnly": false,
  "companyReply": "any",
  "minLikes": 0,
  "deepPagination": true,
  "includeBusinessSummary": true,
  "autoProxyFallback": true,
  "proxyConfiguration": {"useApifyProxy": false}
}
```

### Deep pagination beyond 200 reviews

Trustpilot normally limits anonymous pagination for a single filter combination. This Actor automatically segments larger jobs into star-rating and language windows, deduplicates review IDs globally, and adds bounded relevance/date windows when a segment hits its page ceiling.

For normal small jobs the extra work is skipped. For deeper history the Actor derives useful language slices from Trustpilot's current review statistics rather than relying on a fixed language list.

### Filters

Filtering happens before paid review rows are emitted. You can combine star ratings, languages, date boundaries, text keyword, verified-review status, minimum likes, and company-reply presence. Rows rejected by filters are not billed.

### Reliability design

The Actor uses strict input validation, duplicate-company removal, current Next.js build discovery, real browser challenge/session initialization, bounded session refresh, direct-first Chromium, optional Apify Proxy fallback, global review-ID deduplication, bounded retries/timeouts, per-company/global caps, diagnostic rows, and maximum-charge handling.

### Output row types

review: a successful, billable Trustpilot review.

business\_summary: a free company-level profile/reputation row.

status: a free informational row when no review matches the selected filters.

error: a free diagnostic row for invalid input, unavailable profile, WAF/session failure, or another per-company issue.

### Pricing

Launch pricing target: **$0.00029 per successfully emitted review**, about **$0.29 per 1,000 Trustpilot reviews**, plus the small Actor-start event shown by Apify.

Only successful review rows trigger the paid review event. Summaries, status rows, errors, retries, duplicates, and filtered-out reviews are free.

### Spend controls

Use maxReviewsPerCompany, maxTotalReviews, maxPagesPerSlice, and Apify's maximum-total-charge setting to bound spend and runtime.

### Source limits

Trustpilot controls public review data and anonymous pagination behavior. Deep slicing materially extends accessible history, but the Actor never claims unavailable records and never fabricates missing fields.

### Responsible use

This Actor reads public review/profile information. Use reviewer names, review text, company responses, and other public data in accordance with applicable privacy, copyright, data-protection requirements, and Trustpilot's applicable terms. Do not use the output to harass, deanonymize, or build sensitive profiles of reviewers.

### Support

For a reproducible issue, provide the company domain or Trustpilot review URL, filters, proxy mode, and Apify run ID. Never include API tokens, proxy passwords, or private credentials.

### Extended capabilities

- Accept company domains directly or discover Trustpilot company profiles from brand searches and category/listing pages.
- Filter by stars, language, review date, text, verification, likes, and company reply.
- Use browser session recovery plus JSON/SSR pagination fallback, optional proxy fallback, and persistent monitoring.

# Actor input Schema

## `companies` (type: `array`):

Direct company domains or Trustpilot review URLs. Can be combined with search/category discovery.

## `maxReviewsPerCompany` (type: `integer`):

Maximum matching review rows emitted for each unique company.

## `maxTotalReviews` (type: `integer`):

Hard cap across all companies for predictable runtime and spend.

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

Newest first or Trustpilot relevance order.

## `starRatings` (type: `array`):

Optional star filters. Empty means all 1-5 star ratings.

## `languageCodes` (type: `array`):

Optional ISO language codes such as en, de, fr, it. Empty means all languages and enables automatic language slicing for very deep runs.

## `reviewedAfter` (type: `string`):

Optional inclusive lower boundary: YYYY-MM-DD or ISO 8601.

## `reviewedBefore` (type: `string`):

Optional inclusive upper boundary: YYYY-MM-DD or ISO 8601.

## `containsText` (type: `string`):

Optional case-insensitive keyword across review title and text. Filtered rows are not billed.

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

Only emit reviews whose Trustpilot verification label reports isVerified=true.

## `companyReply` (type: `string`):

Return any reviews, only reviews with a company reply, or only reviews without a reply.

## `minLikes` (type: `integer`):

Only emit reviews with at least this many Trustpilot likes/useful votes.

## `deepPagination` (type: `boolean`):

Automatically segment by star rating and language to reach review history beyond Trustpilot's normal anonymous pagination window.

## `includeBusinessSummary` (type: `boolean`):

Add one free company-summary row with TrustScore, total reviews, categories, contact/profile and review-language statistics.

## `maxPagesPerSlice` (type: `integer`):

Trustpilot exposes 20 reviews per page and normally caps anonymous browsing at 10 pages per filter combination.

## `maxAutoLanguages` (type: `integer`):

For very deep runs, cap the number of automatically discovered languages used for star x language segmentation.

## `browserTimeoutSecs` (type: `integer`):

Maximum seconds to pass Trustpilot's browser challenge and initialize a company session.

## `requestTimeoutSecs` (type: `integer`):

Maximum seconds for each paginated Trustpilot JSON request.

## `retries` (type: `integer`):

Retries a company session after transient browser/WAF/network failures.

## `autoProxyFallback` (type: `boolean`):

Try direct Chromium first; if Trustpilot blocks the session, retry through Apify Proxy when available.

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

Optional explicit proxy configuration. Leave disabled for direct-first mode.

## `monitorKey` (type: `string`):

Reuse the same key on scheduled runs to mark reviews already seen by this Actor.

## `onlyNew` (type: `boolean`):

With monitorKey, output and bill only reviews that were not seen in prior runs.

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

Add a free per-source summary with average score, reply rate and score distribution for the matched review sample.

## `companySearchQueries` (type: `array`):

Search Trustpilot for brands or companies, then scrape the discovered company review profiles.

## `categoryUrls` (type: `array`):

Optional public Trustpilot category or listing pages. Company profiles discovered on these pages become review targets.

## `maxDiscoveredCompanies` (type: `integer`):

Hard cap across brand searches and category pages.

## `maxRuntimeSecs` (type: `integer`):

Soft runtime cap in seconds. The Actor stops cleanly with partial results before the platform hard timeout, protecting reliability and paid usage.

## Actor input object example

```json
{
  "companies": [
    "booking.com"
  ],
  "maxReviewsPerCompany": 100,
  "maxTotalReviews": 1000,
  "sortBy": "newest",
  "starRatings": [],
  "languageCodes": [],
  "reviewedAfter": "",
  "reviewedBefore": "",
  "containsText": "",
  "verifiedOnly": false,
  "companyReply": "any",
  "minLikes": 0,
  "deepPagination": false,
  "includeBusinessSummary": true,
  "maxPagesPerSlice": 5,
  "maxAutoLanguages": 5,
  "browserTimeoutSecs": 45,
  "requestTimeoutSecs": 25,
  "retries": 1,
  "autoProxyFallback": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  },
  "monitorKey": "",
  "onlyNew": false,
  "includeReviewInsights": true,
  "companySearchQueries": [],
  "categoryUrls": [],
  "maxDiscoveredCompanies": 50,
  "maxRuntimeSecs": 1200
}
```

# Actor output Schema

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

// Run the Actor and wait for it to finish
const run = await client.actor("zenomastro/trustpilot-reviews-reliable").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("zenomastro/trustpilot-reviews-reliable").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 zenomastro/trustpilot-reviews-reliable --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,zenomastro/trustpilot-reviews-reliable"
        }
    }
}
```

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/b9OFUjcJripIPSdfA/builds/LodGjfEz6ry68MZhu/openapi.json
