# Trustpilot Reviews Scraper - Reviews, Ratings & Replies (`scrapewise/trustpilot-reviews-scraper`) Actor

Scrape Trustpilot reviews without login: rating, title, text, dates, verification, company reply, reviewer country, plus the company profile (TrustScore, totals, categories). Any language, filters by stars, date, verified and replied. Up to 1,000 reviews per language.

- **URL**: https://apify.com/scrapewise/trustpilot-reviews-scraper.md
- **Developed by:** [Scrapewise Data](https://apify.com/scrapewise) (community)
- **Categories:** E-commerce, Marketing
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.51 / 1,000 review delivereds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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?

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

Trustpilot Reviews Scraper turns **public Trustpilot reviews** into clean JSON, CSV or Excel, **without login or cookies**. Give it company domains and get every review's rating, title, text, dates, verification, language, reviewer country and **the company's reply**, plus one **company profile** row with the TrustScore, total reviews, reviews in the last 12 months and categories. Any language, filters by stars, date, verified reviews and replied reviews, and **up to 1,000 reviews per language** by splitting past Trustpilot's 200 review page limit.

**US$ 0.60 per 1,000 reviews. US$ 2.00 per 1,000 company profile rows. No monthly fee, no start fee. Error rows are free.**

### At a glance

- **Company reply:** Text and date, on every review that has one
- **Languages:** All languages at once, or one language (en, pt, de, fr, es, it, nl, da, sv, nb, pl, fi, ja)
- **Filters:** Stars, published after (date or last N days), verified only, replied only
- **Depth:** Trustpilot shows 200 reviews per filter to logged-out visitors; above 200 the Actor splits by star rating (up to 1,000 per language)
- **Company profile row:** TrustScore, stars, total reviews, last 12 months, categories, reviews per language
- **Error rows:** Free, with an `errorCode`

### One real row

`www.bol.com`, all languages, last 180 days (collected on 2026-09-30):

```json
{
  "type": "review",
  "reviewId": "6a881312391e697529d5fd7d",
  "reviewUrl": "https://www.trustpilot.com/reviews/6a881312391e697529d5fd7d",
  "companyDomain": "www.bol.com",
  "companyName": "Bol",
  "rating": 4,
  "title": "Fast delivery",
  "text": "Fast delivery, clear overview, and great discounts in collaboration with other companies.",
  "language": "en",
  "publishedAt": "2026-08-21T10:57:54.000Z",
  "experiencedAt": "2026-08-19T00:00:00.000Z",
  "isVerified": false,
  "source": "Organic",
  "reviewerName": "T.W.",
  "reviewerCountry": "BE",
  "reviewerReviewCount": 4,
  "companyReply": "Thank you for your review!",
  "companyReplyAt": "2026-08-21T14:33:32.000Z"
}
```

Company row from the same run: `{"companyName": "Bol", "trustScore": 2.6, "numberOfReviews": 48630, "numberOfReviewsLast12Months": 4627}`.

### What you can do with it

- **Reputation monitoring:** schedule a daily run with `publishedAfter: 1` on your brand and your competitors, and alert on every new 1 or 2 star review.
- **Customer support benchmarks:** how many reviews each company answers, how fast and how.
- **Product and market research:** what people praise and complain about, by country and language.
- **Datasets for AI and sentiment analysis:** clean text, rating and language on every row.

### Input

| Field | What it does |
|---|---|
| `companies` | Domains as Trustpilot uses them (`www.amazon.com`, `booking.com`) or `trustpilot.com/review/` links |
| `maxReviewsPerCompany` | Default 100. Above 200 the list is split by star rating |
| `language` | `all` (default) or a language code |
| `stars` | Only these ratings, for example `["1", "2"]` |
| `publishedAfter` | `YYYY-MM-DD` or a number of days |
| `verifiedOnly`, `withRepliesOnly` | Only verified reviews, only reviews with a company reply |
| `includeCompanyProfile` | One company row per company (default on) |
| `trustpilotSite` | Force a country site (optional) |

```json
{ "companies": ["www.amazon.com", "www.booking.com"], "stars": ["1", "2"], "publishedAfter": "30", "maxReviewsPerCompany": 500 }
```

### Output fields

#### Review rows (`type: "review"`)

`reviewId`, `reviewUrl`, `companyDomain`, `companyName`, `rating`, `title`, `text`, `language`, `publishedAt`, `experiencedAt`, `updatedAt`, `isVerified`, `verificationLevel`, `source`, `likes`, `reviewerName`, `reviewerCountry`, `reviewerReviewCount`, `companyReply`, `companyReplyAt`.

Only what Trustpilot shows publicly about the reviewer: display name, country and review count. Never ids, photos or profile links.

#### Company rows (`type: "company"`)

`companyName`, `companyDomain`, `companyId`, `trustScore`, `stars`, `numberOfReviews`, `numberOfReviewsLast12Months`, `websiteUrl`, `categories` (in the language of the Trustpilot site used), `isClaimed`, `reviewsByLanguage`, `trustpilotUrl`.

#### Error codes (never charged)

| errorCode | Meaning |
|---|---|
| `NOT_FOUND` | The company has no Trustpilot page |
| `NO_RESULTS` | No review for this company and filters |
| `BLOCKED` | Trustpilot's connection check failed after retries; run again |
| `INVALID_INPUT` | A value the Actor does not understand |
| `NOT_REACHED`, `UNEXPECTED` | The run timeout arrived, or something unforeseen broke; only that company is lost |

### Pricing

| Event | Per 1,000 |
|---|---|
| Review delivered | US$ 0.60 |
| Company profile row | US$ 2.00 |

500 reviews of a company cost US$ 0.30. Duplicates, reviews outside the date filter and error rows are free, and there is no Apify compute bill on top.

### Limitations

- **200 reviews per filter** is Trustpilot's own limit for logged-out visitors. Splitting by star rating gets up to 1,000 per language; for more, add date windows across runs with `publishedAfter`.
- Trustpilot checks every new visitor with a browser challenge. The Actor passes it once per run with a headless browser, so each run spends a few seconds on startup.
- This Actor reads public pages only and respects the site's terms.

### Changelog

- **2026-09-30, 0.1:** first release. Reviews and company profiles, all languages, filters by stars, date, verified and replied, split by star rating past the 200 review limit, free error rows.

# Actor input Schema

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

Company domains as Trustpilot uses them (www.amazon.com, booking.com) or trustpilot.com/review/ links, one per line.

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

Trustpilot shows 200 reviews per filter to logged-out visitors; above 200 the Actor splits the list by star rating to reach up to 1,000 per language.

## `language` (type: `string`):

'all' for every language, or a code: en, pt, de, fr, es, it, nl, da, sv, nb, pl, fi, ja. English uses www.trustpilot.com; other choices use the country site that shows those reviews.

## `stars` (type: `array`):

Only these ratings, for example 1 and 2 for complaints. Empty = all.

## `publishedAfter` (type: `string`):

Only reviews published on or after this date (YYYY-MM-DD) or in the last N days (for example 30).

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

Only reviews Trustpilot marks as verified.

## `withRepliesOnly` (type: `boolean`):

Only reviews with a company reply.

## `includeCompanyProfile` (type: `boolean`):

Add one 'company' row per company: TrustScore, stars, total reviews, reviews in the last 12 months, categories and reviews per language.

## `trustpilotSite` (type: `string`):

Force a country site (www, uk, br, de, fr, es, it, nl, dk, se, no, pl, fi, jp). Empty picks it from the language.

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

Apify Proxy is recommended.

## Actor input object example

```json
{
  "companies": [
    "www.amazon.com"
  ],
  "maxReviewsPerCompany": 100,
  "language": "all",
  "verifiedOnly": false,
  "withRepliesOnly": false,
  "includeCompanyProfile": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `resultsCsv` (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 = {
    "companies": [
        "www.amazon.com"
    ],
    "maxReviewsPerCompany": 100,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapewise/trustpilot-reviews-scraper").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 = {
    "companies": ["www.amazon.com"],
    "maxReviewsPerCompany": 100,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapewise/trustpilot-reviews-scraper").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 '{
  "companies": [
    "www.amazon.com"
  ],
  "maxReviewsPerCompany": 100,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scrapewise/trustpilot-reviews-scraper --silent --output-dataset

```

## MCP server setup

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

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/Nuql4Mb9dwuwnctYl/builds/CwiGLyRmbwIKoghwL/openapi.json
