# Trustpilot Reviews Scraper: Ratings, Replies & TrustScore (`apisamurai/trustpilot-scraper`) Actor

Trustpilot reviews scraper: get reviews with rating, text, dates, author country, verified flag and company replies, plus TrustScore and rating distribution. Filter by stars, language and date. Pay only for real, unique reviews.

- **URL**: https://apify.com/apisamurai/trustpilot-scraper.md
- **Developed by:** [API Samurai](https://apify.com/apisamurai) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.40 / 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 Scraper: Reviews, Ratings and Company Info

This Trustpilot scraper gets public reviews for any company on Trustpilot: star rating, title, full text, date of experience, published date, author name, country and review count, verified flag, the company's reply, and language. Add one company row with TrustScore, total reviews, rating distribution, categories and contact details. Filter by stars, language, start date and verified reviews. You pay only for unique reviews that match your filters.

### What you can use it for

- **Brand and reputation monitoring:** collect new reviews of your company every day and send them to Slack or a sheet.
- **Competitor research:** compare TrustScores, rating breakdowns and complaint themes across a market.
- **Customer feedback analysis:** feed review text into sentiment analysis, topic modelling or an LLM.
- **Lead generation:** company rows include website, email, phone and address when the company lists them.
- **Customer service audits:** see which reviews got a reply and how fast.
- **AI and NLP datasets:** clean review text with rating, language and dates.

### How to use

1. Open the Actor and click **Try for free**.
2. Add companies to **Companies**: a domain such as `wise.com`, or a Trustpilot link such as `https://www.trustpilot.com/review/wise.com`.
3. Set **Max reviews per company**, and optionally star ratings, language, sort, start date and verified only.
4. Turn on **Add a company info row** if you want TrustScore and contact details.
5. Click **Start**. Export the results as JSON, CSV or Excel, or read them through the API.

### Input

| Field | What it does |
|---|---|
| Companies | Domains or Trustpilot links, one per line. Country sites (uk., de., ...) work too. |
| Max reviews per company | Exact limit per company. Default 100. Set 0 to get only the company row. |
| Star ratings | Only these ratings (1 to 5). Empty means all. |
| Review language | `all` or a 2-letter code such as `en`, `de`, `fr`. |
| Sort | `recency` (newest first) or `relevance` (Trustpilot's ranking). |
| Published on or after | Only reviews published on or after this date. |
| Verified reviews only | Only reviews Trustpilot marks as verified. |
| Add a company info row | One extra row per company with TrustScore, rating distribution, categories and contact info. |

```json
{
  "companies": ["wise.com", "https://uk.trustpilot.com/review/www.booking.com"],
  "maxReviewsPerCompany": 300,
  "stars": ["1", "2"],
  "language": "en",
  "startDate": "2026-06-01",
  "includeCompanyInfo": true
}
```

### Output

One row per review. Real output from a test run (October 2026, reply shortened):

```json
{
  "type": "review",
  "reviewId": "6ae21ef27511241938c08ec8",
  "rating": 1,
  "title": "failed push deposit",
  "text": "push deposit initiated - money left my account (and still gone)- wise canceled the transaction ...",
  "experienceDate": "2026-10-27",
  "publishedDate": "2026-10-28T18:12:34.000Z",
  "updatedDate": null,
  "authorName": "MBee",
  "authorCountry": "US",
  "authorReviewCount": 1,
  "authorId": "6ae21ef2e0dd2cf5a2fb64a4",
  "authorImageUrl": null,
  "isVerified": true,
  "verificationLevel": "invited",
  "reviewSource": "BusinessGeneratedLink",
  "likes": 0,
  "replyText": "Hello, Please note, that the time it takes to get your money back depends on how you paid ...",
  "replyDate": "2026-10-28T18:40:47.000Z",
  "language": "en",
  "companyDomain": "wise.com",
  "companyName": "Wise",
  "reviewUrl": "https://www.trustpilot.com/reviews/6ae21ef27511241938c08ec8",
  "scrapedAt": "2026-10-29T18:04:46.451Z"
}
```

Company rows (when turned on) look like this, from the same tests:

```json
{
  "type": "company",
  "companyDomain": "www.booking.com",
  "companyName": "Booking.com",
  "trustScore": 1.4,
  "totalReviews": 129551,
  "reviewsLast12Months": 23260,
  "ratingDistribution": { "1": 95469, "2": 4307, "3": 2601, "4": 4884, "5": 22290 },
  "categories": [{ "id": "travel_aggregator", "name": "Travel Aggregator", "isPrimary": true }],
  "websiteUrl": "https://www.booking.com",
  "email": "customer.service@booking.com",
  "phone": "+31 20 712 5600",
  "address": "Herengracht 597",
  "city": "Amsterdam",
  "country": "Netherlands",
  "isClaimed": true,
  "trustpilotUrl": "https://www.trustpilot.com/review/www.booking.com"
}
```

Missing values are `null`, never invented. Each run also writes a `SUMMARY` record to the key-value store with, per company: reviews requested and delivered, how many Trustpilot shows for your filters, reviews skipped by filters, start date or as duplicates, and why it stopped (`limit reached`, `no more reviews`, `public page limit`, `company not found`, `filters not accepted by Trustpilot`, `spending limit` or `error`).

### Pricing

$0.40 per 1,000 reviews and $1 per 1,000 company info rows. No start fee.

### Fair billing

- No start fee, no per-run fee, no minimum charge.
- You pay only for unique reviews. A review is never charged twice in a run, even when it is found by two inputs or two filter views.
- Reviews skipped by your star, language, verified or date filters are not charged.
- `Max reviews per company` is exact: the last page is trimmed, so you never pay for more than you asked.
- Companies that are not on Trustpilot, invalid inputs and failed requests cost nothing for results.
- When you reach your spending limit, the run stops cleanly and keeps what it saved.

### Integrations

- **Apify API:** start runs and read results from any language, or use `run-sync-get-dataset-items` to get reviews in one call.
- **Zapier, Make and n8n:** send new reviews to Google Sheets, Slack, a CRM or a database.
- **MCP for AI agents:** connect the Apify MCP server to Claude, ChatGPT or another MCP client and let the agent run this Actor as a tool.
- **Schedules and webhooks** in Apify Console for daily review monitoring.

### FAQ

**Do I need a Trustpilot account or API key?**
No. The Actor reads public Trustpilot pages. You never enter a login.

**How many reviews can I get per company?**
Trustpilot shows logged-out visitors 10 pages (200 reviews) per filter view. To go further, the Actor reads the company through narrower views (each star rating, each language, other sort orders) and joins them without duplicates. For very large companies this reaches thousands of reviews, but not always every review; the `SUMMARY` record then says `public page limit`.

**Why did I get fewer reviews than I asked for?**
Open the `SUMMARY` record. It shows how many reviews Trustpilot lists for your filters and why the company stopped. Strict filters often match only a few reviews.

**How does the start date work?**
The Actor asks Trustpilot for the smallest date window that covers your date (30 days, 3, 6 or 12 months) and then drops older reviews itself, without charging for them.

**Can I scrape only negative reviews?**
Yes. Set **Star ratings** to 1 and 2.

**Can I monitor new reviews?**
Yes. Schedule a daily run with sort `recency` and **Published on or after** set to a recent date, and connect an integration.

**What does a company row cost and contain?**
$0.001 per company. It has TrustScore, total reviews, reviews in the last 12 months, rating distribution, categories, website, description, contact details, claimed status and reply rate.

**Is it legal to scrape Trustpilot?**
The Actor collects only public data. Follow Trustpilot's terms and the data protection laws that apply to you, such as GDPR, especially for author names. This is not legal advice.

# Actor input Schema

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

Company domains or Trustpilot links, one per line: wise.com, www.amazon.com or https://www.trustpilot.com/review/wise.com. Country sites such as uk.trustpilot.com work too.

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

Exact limit per company. You never get, or pay for, more. Set 0 to get only the company info row.

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

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

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

all, or a 2-letter language code such as en, de, fr, es, it, nl, da.

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

recency gives the newest reviews first. relevance uses Trustpilot's own ranking.

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

Only reviews published on or after this date (UTC). Older reviews are skipped and not charged.

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

Only reviews Trustpilot marks as verified.

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

One extra row per company with TrustScore, total reviews, rating distribution, categories, website and contact details.

## Actor input object example

```json
{
  "companies": [
    "wise.com"
  ],
  "maxReviewsPerCompany": 20,
  "language": "all",
  "sort": "recency",
  "verifiedOnly": false,
  "includeCompanyInfo": false
}
```

# Actor output Schema

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

No description

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

No description

## `summary` (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": [
        "wise.com"
    ],
    "maxReviewsPerCompany": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("apisamurai/trustpilot-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": ["wise.com"],
    "maxReviewsPerCompany": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("apisamurai/trustpilot-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": [
    "wise.com"
  ],
  "maxReviewsPerCompany": 20
}' |
apify call apisamurai/trustpilot-scraper --silent --output-dataset

```

## MCP server setup

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