# Trustpilot Reviews Scraper (`bozomalabs/trustpilot-reviews-scraper`) Actor

Scrape Trustpilot reviews for any company: rating, text, author, country, dates, verification, company replies and TrustScore. Filter by stars, language and date. Deep mode goes past the 200-review limit. Export CSV, Excel or JSON.

- **URL**: https://apify.com/bozomalabs/trustpilot-reviews-scraper.md
- **Developed by:** [Bozoma Labs](https://apify.com/bozomalabs) (community)
- **Categories:** E-commerce, Lead generation, Developer tools
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

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

Scrape Trustpilot reviews for any company and download them as CSV, Excel, JSON or HTML. Get the star rating, title, full review text, reviewer name and country, published and experience dates, verification status, useful votes and the company's reply, plus the company's TrustScore and total review count on every row.

Paste a Trustpilot URL or just a domain like `monzo.com`, pick your filters, and run. No Trustpilot account or API key needed.

### What this Trustpilot scraper does

- Scrapes reviews from any `trustpilot.com/review/<domain>` page, on any country site (www, uk, de and others)
- Filters by star rating, language, verified reviews, reviews with replies, and date
- **Deep mode** goes past Trustpilot's 200-review limit for signed-out visitors by reading each star rating as its own list, then removes duplicates
- Adds **company replies** with reply dates
- Adds **company data** to each row: name, domain, TrustScore and total reviews
- Exports in a format the free [Bozoma Labs Review Analyzer](https://www.bozomalabs.com/tools/review-analyzer/trustpilot-reviews) reads directly, so you get trends, themes and rating charts in seconds
- Works with Apify Proxy, scheduling, webhooks, the API and integrations (Google Sheets, Zapier, Make, Slack)

### Use cases

- **Competitor research:** read what customers love and hate about competitors
- **Brand and reputation monitoring:** schedule a daily run with "Reviews from" set and get only new reviews
- **Customer support QA:** export every review with a company reply and check response quality
- **Product and market research:** find recurring complaints in 1 and 2 star reviews
- **Sentiment analysis and AI:** feed clean review text into your own models or an LLM
- **Agency reporting:** pull reviews for many clients in one run

### How to scrape Trustpilot reviews

1. Add one or more Trustpilot company URLs or domains.
2. Set **Max reviews per company** (0 for no limit).
3. Optional: choose star ratings, a language, a start date, and switch on **Deep mode** for more than 200 reviews.
4. Click **Start**, then export the dataset as CSV, Excel or JSON.

### Input example

```json
{
  "companyDomains": ["monzo.com"],
  "startUrls": [{ "url": "https://www.trustpilot.com/review/www.hellofresh.com" }],
  "maxReviewsPerCompany": 1000,
  "stars": ["1", "2"],
  "language": "en",
  "sort": "recency",
  "dateFrom": "2026-01-01",
  "includeCompanyReplies": true,
  "deepMode": true,
  "proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}
```

| Field | What it does |
| --- | --- |
| `startUrls` | Trustpilot review page URLs. Filters already in the URL are kept. |
| `companyDomains` | Company domains as Trustpilot lists them, such as `monzo.com` |
| `maxReviewsPerCompany` | Review cap per company (default 200, 0 = no limit) |
| `stars` | Only these ratings, from 1 to 5 |
| `language` | `all` (default) or a language code such as `en`, `de`, `fr` |
| `sort` | `recency` (default) or `relevance` |
| `dateFrom` | Only reviews published on or after this date |
| `verifiedOnly`, `withRepliesOnly` | Extra Trustpilot filters |
| `includeCompanyReplies` | Include reply text and date (default on) |
| `deepMode` | Read each star rating as its own list to get past the 200-review limit |
| `proxyConfiguration` | Apify Proxy settings (residential by default; Trustpilot blocks datacenter IPs) |

### Output example

One dataset item per review:

```json
{
  "company": "Monzo",
  "domain": "www.monzo.com",
  "reviewId": "6a1f0c3e9b2d4a0012345678",
  "reviewUrl": "https://www.trustpilot.com/reviews/6a1f0c3e9b2d4a0012345678",
  "title": "Quick and helpful support",
  "rating": 5,
  "author": "Sam K.",
  "country": "GB",
  "authorReviews": 3,
  "date": "2026-11-03",
  "experienceDate": "2026-11-01",
  "updatedDate": "",
  "verified": true,
  "verificationLevel": "verified",
  "source": "Organic",
  "body": "Card was blocked abroad and the chat team fixed it in minutes.",
  "reply": "Thanks Sam, glad we could help!",
  "replyDate": "2026-11-04",
  "language": "en",
  "likes": 0,
  "companyName": "Monzo",
  "companyDomain": "www.monzo.com",
  "trustScore": 4.6,
  "totalReviews": 74081
}
```

The dataset has four views: **Reviews**, **All fields (Review Analyzer CSV)**, **Company replies** and **Company TrustScore**. CSV column names (Rating, Review text, Title, Published date, Reviewer name, Verified) are detected automatically by the Bozoma Labs Review Analyzer.

### How much does it cost to scrape Trustpilot?

This Actor uses pay per result: **$0.60 per 1,000 reviews**, plus a $0.005 charge per run. Higher Apify plans pay less (down to $0.40 per 1,000). Platform compute is included, so you only pay for the reviews you get. 1,000 reviews costs about $0.61. Set a maximum cost per run in the Apify Console and the Actor stops cleanly when it reaches it.

### Speed

In our tests, 1,000 reviews for one company took about 2 minutes in deep mode, and 400 reviews took 40 to 60 seconds.

### FAQ

**Is there a limit on how many reviews I can get?**
Trustpilot shows signed-out visitors 10 pages (200 reviews) per list. With deep mode on, the Actor reads each star rating as its own list, so you can get up to about 1,000 reviews per company and language. Choosing one language at a time (for example `en`, then `de`) can get more. We say "more reviews", not "every review", because Trustpilot sets these limits.

**Do I need a Trustpilot account or API key?**
No. The Actor reads public review pages only.

**Can I get only new reviews?**
Yes. Set "Reviews from" and keep the sort on Most recent. The Actor stops as soon as it reaches older reviews, so scheduled runs are cheap.

**Which Trustpilot country sites work?**
All of them, for example `uk.trustpilot.com` and `de.trustpilot.com`. Use the language filter to choose review languages.

**What happens if Trustpilot blocks a request?**
The Actor waits and retries, and Apify Proxy rotates the IP address. Keep residential proxies on, since Trustpilot blocks datacenter IPs. If you still see blocks, raise the delay between pages.

**Can I analyze the reviews?**
Yes. Download the CSV and drop it into the free [Review Analyzer](https://www.bozomalabs.com/tools/review-analyzer/trustpilot-reviews). It runs in your browser and shows rating trends and common themes.

**Is scraping Trustpilot legal?**
The Actor only reads publicly visible review pages. Reviews can contain personal data such as reviewer names, so you are responsible for how you store and use it under GDPR and other laws, and under Trustpilot's terms. If unsure, ask a lawyer.

**Something is broken or missing.**
Open an issue on the Actor's Issues tab and we will look at it quickly.

### Not affiliated with Trustpilot

This Actor is made by Bozoma Labs and is not affiliated with, endorsed by or sponsored by Trustpilot A/S. Trustpilot is a trademark of its owner.

# Actor input Schema

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

Trustpilot company pages, for example https://www.trustpilot.com/review/www.etsy.com. Filters already in the URL (stars, languages, verified, replies) are kept.

## `companyDomains` (type: `array`):

Or just type company domains as Trustpilot lists them, for example monzo.com or www.hellofresh.com.

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

Stop after this many reviews for each company. 0 means no limit.

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

Only keep reviews with these ratings. Leave empty for all ratings.

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

Trustpilot language code such as en, de, fr or da, or 'all' for every language.

## `sort` (type: `string`):

Most recent lets the Actor stop early when you set 'Reviews from'.

## `dateFrom` (type: `string`):

Only keep reviews published on or after this date (YYYY-MM-DD).

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

Only reviews Trustpilot marks as verified.

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

Only reviews the company has answered.

## `includeCompanyReplies` (type: `boolean`):

Add the company's reply text and reply date to each review.

## `deepMode` (type: `boolean`):

Trustpilot shows signed-out visitors 10 pages (200 reviews) per list. Deep mode reads each star rating as its own list and removes duplicates, so you can get up to about 1,000 reviews per language list.

## `paceMs` (type: `integer`):

Pause between review pages. Raise it if you see blocks.

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

How many companies to scrape at the same time.

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

Residential Apify Proxy is required: Trustpilot blocks datacenter IPs.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.trustpilot.com/review/www.etsy.com"
    }
  ],
  "maxReviewsPerCompany": 100,
  "language": "all",
  "sort": "recency",
  "verifiedOnly": false,
  "withRepliesOnly": false,
  "includeCompanyReplies": true,
  "deepMode": false,
  "paceMs": 800,
  "maxConcurrency": 2,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

One dataset item per review, including rating, text, author, dates, verification and company replies.

# 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": [
        {
            "url": "https://www.trustpilot.com/review/www.etsy.com"
        }
    ],
    "maxReviewsPerCompany": 100,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("bozomalabs/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 = {
    "startUrls": [{ "url": "https://www.trustpilot.com/review/www.etsy.com" }],
    "maxReviewsPerCompany": 100,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

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

```

## MCP server setup

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