# Trustpilot Reviews Scraper - Reviews, Ratings & TrustScore (`cprussin/trustpilot-reviews`) Actor

Scrape Trustpilot reviews for any company: rating, title, text, author, country, date, verified label and company reply, plus TrustScore and company profile. Filter by stars and language; delta mode returns only new reviews.

- **URL**: https://apify.com/cprussin/trustpilot-reviews.md
- **Developed by:** [Connor Prussin](https://apify.com/cprussin) (community)
- **Categories:** E-commerce, Marketing
- **Stats:** 2 total users, 1 monthly users, 66.7% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.50 / 1,000 reviews

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?

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: reviews, ratings and TrustScore for any company

**Trustpilot Reviews Scraper** exports Trustpilot reviews for any company as clean JSON, CSV or Excel. Give it company domains (like `amazon.com`) or Trustpilot URLs, and each review comes back with its **star rating, title, full text, author, author country, publish date, date of experience, verification label and the company's reply**, plus the company's **TrustScore, total review count** and an optional company profile.

- ✅ **Reviews plus company data in one run.** No second actor needed for TrustScore or company details.
- ✅ **New-review alerts.** Turn on "Only new reviews" and schedule the actor daily: each run returns (and bills) only reviews it hasn't returned before. Or set "Only reviews since" for a fixed date cutoff.
- ✅ **Filter by stars and language**, sorted by most recent or most relevant.
- ✅ **More than Trustpilot's 200-review page limit.** Above 200 reviews the actor queries each star rating separately and merges them newest first, for up to 1,000 reviews per company and language.
- ✅ **Pay per review.** $0.50 per 1,000 reviews. No monthly rental.
- ✅ Fast: plain HTTP with retries and rate limiting. A headless browser opens only for a few seconds to pass Trustpilot's bot check. No proxy is needed for typical runs.

### What can you do with Trustpilot reviews?

- **Brand and reputation monitoring:** schedule a daily run with `onlyNew` and route new 1–2 star reviews to Slack, email or your helpdesk.
- **Competitor analysis:** compare TrustScores, rating distributions and common complaints across your competitors.
- **Customer experience and product teams:** feed review text into sentiment analysis, topic modelling or an LLM to find recurring issues.
- **Agencies and consultants:** produce reputation audits and before/after reports for clients.
- **Lead generation:** find companies with poor ratings or low reply rates that might need a CX, support or review-management tool.
- **Market research and investing:** track customer satisfaction over time for retailers, fintechs, airlines or SaaS companies.

### How does the Trustpilot reviews scraper work?

1. Enter one or more companies as domains or Trustpilot review URLs.
2. The actor reads Trustpilot's public review pages and extracts the structured data embedded in each page (Next.js `__NEXT_DATA__` JSON), not fragile CSS selectors.
3. It pages through the reviews, 20 per page, with your star, language and date filters applied by Trustpilot itself. Duplicates are removed.
4. Each review is saved to the dataset and billed as one `review` event.

### How do I choose which Trustpilot reviews to scrape?

| Field                  | Description                                                                                  | Example                                                                |
| ---------------------- | -------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------- |
| `companies`            | Company domains or Trustpilot review URLs                                                    | `["amazon.com", "https://www.trustpilot.com/review/www.gymshark.com"]` |
| `maxReviewsPerCompany` | Max reviews per company (1–1,000)                                                            | `100`                                                                  |
| `stars`                | Only these star ratings (empty = all)                                                        | `["1", "2"]`                                                           |
| `language`             | `all` or a 2-letter language code                                                            | `"en"`                                                                 |
| `sort`                 | `recency` (most recent) or `relevance`                                                       | `"recency"`                                                            |
| `sinceDate`            | Delta mode: only reviews published on or after this date (YYYY-MM-DD)                        | `"2026-09-01"`                                                         |
| `onlyNew`              | Monitoring: only reviews not returned by an earlier run with the same input (see FAQ)        | `true`                                                                 |
| `includeCompanyInfo`   | Add a `company` object (website, categories, contact details, reply rate, star distribution) | `true`                                                                 |
| `proxyConfiguration`   | Optional Apify Proxy settings                                                                | `{ "useApifyProxy": false }`                                           |

Example input: new negative reviews for two companies since September 1.

```json
{
  "companies": [
    "amazon.com",
    "https://www.trustpilot.com/review/www.gymshark.com"
  ],
  "maxReviewsPerCompany": 200,
  "stars": ["1", "2"],
  "language": "all",
  "sinceDate": "2026-09-01",
  "includeCompanyInfo": false
}
```

### What data do you get for each Trustpilot review?

One dataset item per review:

```json
{
  "companyDomain": "gymshark.com",
  "companyName": "Gymshark",
  "trustScore": 4.3,
  "totalReviews": 41930,
  "reviewId": "6abb2f0e8a1c4d5e6f708192",
  "rating": 5,
  "title": "Great fit and fast delivery",
  "text": "Ordered two pairs of leggings, arrived in two days and the fit is perfect.",
  "author": "Sam K",
  "authorCountry": "GB",
  "authorReviewCount": 3,
  "date": "2026-09-29T15:59:39.000Z",
  "experienceDate": "2026-09-27",
  "updatedDate": null,
  "verified": true,
  "verificationSource": "invitation",
  "companyReply": "Hey Sam! Thanks so much for the lovely review...",
  "companyReplyDate": "2026-09-29T16:30:11.000Z",
  "language": "en",
  "likes": 0,
  "url": "https://www.trustpilot.com/reviews/6abb2f0e8a1c4d5e6f708192",
  "company": {
    "trustpilotId": "4bdc3e4000006400050bd2c5",
    "websiteUrl": "https://www.gymshark.com",
    "stars": 4.5,
    "isClaimed": true,
    "isClosed": false,
    "country": "GB",
    "categories": ["Sportswear Store", "Clothing Store"],
    "email": null,
    "phone": null,
    "address": null,
    "city": null,
    "zipCode": null,
    "replyPercentage": 62.5,
    "averageDaysToReply": 1,
    "ratingDistribution": {
      "1": 7000,
      "2": 1382,
      "3": 1103,
      "4": 1730,
      "5": 30715
    },
    "profileUrl": "https://www.trustpilot.com/review/gymshark.com"
  }
}
```

(This is an illustrative record.)

**Field notes**

- `date` is when the review was published. `experienceDate` is the date of experience the reviewer entered.
- `verified` and `verificationSource` reflect Trustpilot's own labels (for example `invitation` for reviews collected through a company's invitation).
- `companyDomain` is Trustpilot's identifier for the company, which is usually its domain. `amazon.com` and `www.amazon.com` resolve to the same profile and are only scraped once.
- `company` appears only when `includeCompanyInfo` is on. Fields a company hasn't filled in are `null`.
- The dataset's **Overview** view shows the main columns. Export as JSON, CSV, Excel, XML or HTML, or pull it through the Apify API.

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

Pay per event:

| Event    | Price                   | When                             |
| -------- | ----------------------- | -------------------------------- |
| `review` | $0.0005 ($0.50 / 1,000) | Each review saved to the dataset |

- 1,000 reviews cost $0.50; 10,000 reviews cost $5.
- Apify's standard small actor-start fee applies. The actor stops cleanly when it reaches your run's maximum charge, and you are never billed for more reviews than it returns.
- `onlyNew`, delta mode and filters are applied before billing: skipped reviews are free.

### Trustpilot scraper FAQ

**Is it legal to scrape Trustpilot?**
The actor only collects publicly visible review pages, the same data any visitor sees without logging in. Reviews contain personal data such as reviewer names. You are responsible for using the data lawfully (e.g. GDPR) and in line with Trustpilot's terms. If in doubt, ask a lawyer.

**Do I need a Trustpilot account or API key?**
No.

**Do I need a proxy?**
Usually not. The actor passes Trustpilot's automated browser check once per run with a headless browser, then fetches pages over plain HTTP. If you scrape many companies and see blocking, turn on Apify Proxy (residential works best).

**How many reviews can I get per company?**
Trustpilot shows logged-out visitors 10 pages (200 reviews) per filter combination. Above 200, the actor queries each star rating separately, which gives up to 1,000 reviews per company per language. With a single star rating selected, the limit is 200. To collect more, run the actor per language or use delta mode on a schedule to build up history.

**How do I get alerts for new reviews?**
Schedule this actor daily (Apify Console, Schedules; or save a task and schedule it) with `"onlyNew": true`:

1. The first run returns the latest reviews (up to `maxReviewsPerCompany`) as a baseline. Also set `sinceDate` for a smaller baseline.
2. Every later run returns only reviews not returned before, and stops paging a few days before the newest review it has seen, so a quiet day costs almost nothing.
3. Add a Slack, email or webhook integration to the task to get new reviews as alerts.

The "seen" state lives in your account, in the key-value store `trustpilot-reviews-state`, one record per combination of companies, star filter and language. Changing any of these starts a new baseline. Delete the record to reset.

For a one-off cutoff instead, set `sinceDate` to the date of your previous run.

**Which Trustpilot domains work?**
Any. URLs from country sites such as `uk.trustpilot.com` or `de.trustpilot.com` are accepted; all countries share one review database.

**What happens if a company isn't on Trustpilot?**
It's logged as "no Trustpilot profile found" and the run continues with the other companies.

**Can I use it through the API, Make, Zapier or an AI agent?**
Yes. Like any Apify actor, you can call it from the Apify API, the JavaScript and Python clients, integrations such as Make and Zapier, or the Apify MCP server.

### What are the limits of scraping Trustpilot?

- Only public reviews are available. Trustpilot hides some reviews (for example flagged or pending ones), and those are not returned.
- Trustpilot can change its site or bot protection at any time. The actor is tested daily; if something breaks, open an issue on the actor's Issues tab.
- It doesn't support Trustpilot product reviews, business search or category listings.

### Related actors

- [app-store-reviews](https://apify.com/cprussin/app-store-reviews): App Store and Google Play reviews for any app.
- [google-ads-transparency](https://apify.com/cprussin/google-ads-transparency): Ads from the Google Ads Transparency Center by advertiser or domain.
- [aliexpress-scraper](https://apify.com/cprussin/aliexpress-scraper): AliExpress product search results, prices and buyer reviews.

# Actor input Schema

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

Company domains (e.g. amazon.com) or Trustpilot review page URLs (e.g. https://www.trustpilot.com/review/www.amazon.com).

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

Maximum reviews to return for each company. Each review is billed as one event. Trustpilot shows logged-out visitors 200 reviews per filter; above 200 the actor splits the request by star rating, for up to 1,000 per company and language.

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

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

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

"all" or a 2-letter language code (en, de, fr, es, it, nl, da, sv, pt, pl, ...).

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

Most recent first, or Trustpilot's relevance order. Delta mode ("Only reviews since") always uses most recent.

## `sinceDate` (type: `string`):

Only reviews published on or after this date (YYYY-MM-DD). Paging stops once older reviews are reached, so scheduled runs only pay for new reviews.

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

Return only reviews not returned by an earlier run with the same companies, stars and language. Schedule the actor daily for new-review alerts: the first run is a baseline, later runs output (and bill) only new reviews. State is kept in the key-value store "trustpilot-reviews-state" in your account.

## `includeCompanyInfo` (type: `boolean`):

Add a "company" object to each review: website, categories, country, contact details, reply rate and star distribution. Company name, TrustScore and total reviews are always included.

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

Optional. The actor works without a proxy. Use Apify Proxy (e.g. residential) if you run many companies and see blocking.

## Actor input object example

```json
{
  "companies": [
    "apify.com"
  ],
  "maxReviewsPerCompany": 20,
  "language": "all",
  "sort": "recency",
  "onlyNew": false,
  "includeCompanyInfo": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# 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 = {
    "companies": [
        "apify.com"
    ],
    "maxReviewsPerCompany": 20,
    "language": "all",
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("cprussin/trustpilot-reviews").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": ["apify.com"],
    "maxReviewsPerCompany": 20,
    "language": "all",
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("cprussin/trustpilot-reviews").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": [
    "apify.com"
  ],
  "maxReviewsPerCompany": 20,
  "language": "all",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call cprussin/trustpilot-reviews --silent --output-dataset

```

## MCP server setup

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

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/WhYAJQobhDsddgXhY/builds/aoo8CFh6TM4bX2bc5/openapi.json
