# Trustpilot Reviews Scraper | Ratings & Company Replies (`genial_candlestand/trustpilot-reviews-scraper`) Actor

Get Trustpilot reviews with rating, title, text, date, reviewer country, the company's reply and TrustScore. Many companies per run, filters by stars, language, date and verified, keyword search inside reviews, no login.

- **URL**: https://apify.com/genial_candlestand/trustpilot-reviews-scraper.md
- **Developed by:** [Flowo](https://apify.com/genial_candlestand) (community)
- **Categories:** Lead generation, Social media, Automation
- **Features:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.35 / 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.
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 | Ratings & Company Replies

![Trustpilot Reviews Scraper | Ratings & Company Replies](https://api.apify.com/v2/key-value-stores/Ll7RrWtDkZYOrBvfE/records/trustpilot-com-reviews-and-ratings-banner-f6bea81c.png)

Get Trustpilot reviews as flat rows: star rating, review title and text, publish date, reviewer name and country, the company's reply and its reply date. Every row also carries the company's TrustScore, total review count and reply rate. Give it company domains or Trustpilot profile URLs and download the reviews as JSON, CSV or Excel. No Trustpilot account is needed.

### What does Trustpilot Reviews Scraper do?

The actor takes a list of companies (a domain such as `wise.com` or a URL such as `https://www.trustpilot.com/review/wise.com`) and returns one row per review. Each row repeats the company context: TrustScore, review count, category, country, claimed status, reply rate and average days to reply.

It is built for brand and customer-experience teams that track their own and competitors' reviews, for analysts who study complaints and sentiment, and for AI agents that need the latest reviews of a company in one call.

You can use Trustpilot's own filters: star rating, review language, date range, verified reviews, reviews with a company reply, and text search.

### How to scrape Trustpilot reviews

![How Trustpilot Reviews Scraper works: Solves Trustpilot bot check once per run in a browser; Reads review pages of each company over plain HTTP; Splits by star rating and language past 200 reviews; Re](https://api.apify.com/v2/key-value-stores/Ll7RrWtDkZYOrBvfE/records/trustpilot-com-reviews-and-ratings-how-ada98371.png)

1. Open the actor in Apify Console and enter one or more companies in **Companies**, one per line.
2. Set **Max reviews per company** (default 100) and, if needed, filters such as **Star ratings** or **Review language**.
3. Click **Start**. When the run finishes, open the **Output** tab and download the dataset as JSON, CSV or Excel.

For daily or weekly syncs, set **Published after** and run the actor on an Apify Schedule: it stops as soon as it reaches older reviews.

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

Price per event by Apify plan:

| Event | Free | Bronze | Silver | Gold and above |
|---|---|---|---|---|
| Review | $0.50 per 1,000 | $0.45 per 1,000 | $0.40 per 1,000 | $0.35 per 1,000 |
| Actor start | $0.005 | $0.005 | $0.005 | $0.005 |

A test run with the API example input below returned 200 rows in 68 s.

You pay per review row ($0.0005 each, $0.50 per 1,000 on the Free plan) plus a $0.005 start fee once per run. Paid plans have lower review prices, shown in the table above. Companies without a Trustpilot profile and filters with no matching reviews are not charged.

| Scenario | Reviews | Cost on Free plan |
|---|---|---|
| Latest 100 reviews of one company | 100 | $0.055 |
| 2 companies × 100 reviews | 200 | $0.105 |
| 1,000 negative reviews of one company | 1,000 | $0.505 |
| Monthly sync of 5 companies, 1,000 each | 5,000 | $2.505 |

### Input

![Trustpilot Reviews Scraper input example: Companies, Max reviews per company, Review language, Date range, Sort by, Verified reviews only, Reviews with company reply only](https://api.apify.com/v2/key-value-stores/Ll7RrWtDkZYOrBvfE/records/trustpilot-com-reviews-and-ratings-input-901f1f2f.png)

| Field | What it does |
|---|---|
| `companies` (required) | Domains or Trustpilot profile URLs, one per line |
| `maxReviewsPerCompany` | Reviews per company, 1–100000, default 100 |
| `maxItems` | Total limit across all companies |
| `stars` | Only these ratings, e.g. `["1","2"]` |
| `language` | ISO code (`en`, `de`, `fr` …) or `all` (default) |
| `dateRange` | `any`, `last30days`, `last3months`, `last6months`, `last12months` |
| `publishedAfter` | Only reviews from this date (YYYY-MM-DD); newest first |
| `sort` | `recency` (default) or `relevance` |
| `verifiedOnly` | Only verified reviews |
| `withRepliesOnly` | Only reviews the company replied to |
| `searchText` | Only reviews containing a word or phrase |
| `proxyConfiguration` | Apify Residential proxy is used by default |

Example input:

```json
{
  "companies": ["wise.com", "https://www.trustpilot.com/review/www.booking.com"],
  "maxReviewsPerCompany": 200,
  "stars": ["1", "2"],
  "language": "en",
  "dateRange": "last3months"
}
```

### What data can you extract from Trustpilot?

![Trustpilot Reviews Scraper output example: Rating, Title, Review, Author, Country](https://api.apify.com/v2/key-value-stores/Ll7RrWtDkZYOrBvfE/records/trustpilot-com-reviews-and-ratings-output-b44aa510.png)

Each review is one flat row. Main fields:

| Field | Meaning |
|---|---|
| `id`, `url` | Review ID and link |
| `rating`, `title`, `text`, `language` | The review itself (`text` can be empty for rating-only reviews) |
| `publishedAt`, `experiencedAt`, `updatedAt` | Dates |
| `isVerified`, `verificationLevel`, `reviewSource`, `likes` | Verification and source details |
| `author`, `authorId`, `authorUrl`, `authorCountry`, `authorReviewsCount` | Reviewer |
| `hasReply`, `replyText`, `replyPublishedAt`, `replyUpdatedAt` | Company reply |
| `companyName`, `companyDomain`, `companyTrustScore`, `companyStars`, `companyReviewsCount`, `companyCategory`, `companyCountry`, `companyIsClaimed`, `companyReplyRate`, `companyAvgDaysToReply` | Company context |
| `query` | The input entry that produced the row |
| `scrapedAt` | When the row was collected |

Example (shortened):

```json
{
  "id": "6ae93bf455cc9b68a5f9f8e4",
  "url": "https://www.trustpilot.com/reviews/6ae93bf455cc9b68a5f9f8e4",
  "rating": 5,
  "title": "Digital and physical card use Japan",
  "language": "en",
  "publishedAt": "2026-11-03T03:42:12.000Z",
  "verificationLevel": "invited",
  "likes": 2,
  "author": "Craig",
  "authorCountry": "AU",
  "hasReply": false,
  "replyText": null,
  "companyName": "Wise",
  "companyDomain": "wise.com",
  "companyTrustScore": 4.3,
  "companyReviewsCount": 304902,
  "companyCategory": "Financial Institution",
  "companyReplyRate": 78.66,
  "companyAvgDaysToReply": 0.98,
  "query": "wise.com"
}
```

### Use cases

- **Brand monitoring:** pull new reviews every day with `publishedAfter` and send them to Slack, a sheet or a database.
- **Competitor benchmarking:** compare TrustScore, reply rate and days to reply across several companies in one run.
- **Complaint analysis:** collect 1–2 star reviews, optionally with a `searchText` such as "refund", for sentiment or topic analysis.
- **Support quality checks:** use `withRepliesOnly` to study how a company answers critics.
- **AI and LLM pipelines:** feed flat review rows into summarisation or classification.

### Limitations

- Trustpilot shows at most 200 reviews per filter combination. Above that the actor splits the request by star rating, and by language when Language is `all`, to reach more. The log states how many matching reviews were reachable; very large histories may not be fully reachable.
- Only reviews Trustpilot shows publicly are returned. `text` can be empty, `updatedAt` is usually `null`, and reply fields are `null` when the company has not replied.
- An unknown domain gives a warning and zero rows. An unknown language code skips that company with a warning.
- Trustpilot blocks datacenter IPs, so the actor uses Apify Residential proxy (a datacenter or no-proxy setting is switched to Residential).
- The actor opens a browser once per run for Trustpilot's bot check; the data itself is then fetched over plain HTTP.

### Tips and troubleshooting

- **More than 200 reviews:** keep **Review language** at `all` and leave **Star ratings** empty, so the actor can split by language and rating to go past the 200 cap.
- **Only new reviews:** set `publishedAfter` to the date of your last sync; sorting is then newest first.
- **Zero rows for a company:** check the log for "no Trustpilot profile (404)" or an unsupported language code, and try the exact domain shown on its Trustpilot page.
- **Filters in a URL:** filters in the query part of a Trustpilot URL are ignored; use the input fields instead.
- **Proxy:** leave the default Apify Residential proxy; datacenter IPs are blocked by Trustpilot.

### API, MCP and integrations

Run the actor from your code with the same JSON input as in Console. Your API token is in [Console → Settings → API & Integrations](https://console.apify.com/settings/integrations).

**Python** (`pip install apify-client`):

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("genial_candlestand/trustpilot-reviews-scraper").call(run_input={
    "companies": ["wise.com", "https://www.trustpilot.com/review/www.booking.com"],
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

**Node.js** (`npm install apify-client`):

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('genial_candlestand/trustpilot-reviews-scraper').call({
    "companies": ["wise.com", "https://www.trustpilot.com/review/www.booking.com"],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

**HTTP** — one request runs the actor and returns the results (runs up to 5 minutes; longer ones: [run asynchronously](https://docs.apify.com/api/v2/act-runs-post)):

```bash
curl -X POST "https://api.apify.com/v2/acts/genial_candlestand~trustpilot-reviews-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"companies":["wise.com","https://www.trustpilot.com/review/www.booking.com"]}'
```

**AI agents (MCP).** Add the actor as a tool of the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp). Claude Code:

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=genial_candlestand/trustpilot-reviews-scraper"
```

Claude Desktop, Cursor or VS Code: `{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=genial_candlestand/trustpilot-reviews-scraper"}}}`. Then ask, for example:

- "Get the 100 newest 1-2 star Trustpilot reviews of wise.com"
- "Compare TrustScore and reply rate of wise.com and revolut.com"
- "Find Trustpilot reviews of airbnb.com mentioning refund"

**Integrations.** Run it on a schedule with [Apify Schedules](https://docs.apify.com/platform/schedules) and send the results to Google Sheets, Slack, Zapier, Make, n8n or your webhook — see [Apify integrations](https://docs.apify.com/platform/integrations).

### FAQ

**Is it legal to scrape Trustpilot?**<br>
The actor collects publicly visible reviews and does not log in. Reviews contain reviewer display names, so you are responsible for using the data in line with Trustpilot's terms and with privacy laws such as GDPR. Get legal advice for your case.

**How is it different from other Trustpilot actors?**<br>
It returns 38 fields per review, including company reply rate, average days to reply, likes, experience date and reviewer review count; the most-used alternative in our comparison returns 12. The review price is $0.50 per 1,000 against $0.575 for that alternative, plus a $0.005 start fee here.

**Can I get more than 200 reviews per company?**<br>
Yes, up to the number the filters make reachable; see Limitations.

**Can I get only new reviews?**<br>
Yes. Set `publishedAfter` to the date of your last sync.

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

### Also useful

- [Google Play Reviews Scraper](https://apify.com/genial_candlestand/google-play-reviews-scraper) — add app reviews with ratings, replies and versions from Google Play
- [Apple App Store Reviews API](https://apify.com/genial_candlestand/apple-app-store-reviews-api) — add iOS app reviews and ratings across apps and countries
- [Yelp Business Scraper](https://apify.com/genial_candlestand/yelp-business-scraper) — add Yelp ratings, contacts and reviews for local businesses
- [Firefox Add-ons Reviews Parser](https://apify.com/genial_candlestand/firefox-addons-reviews-parser) — add reviews of Firefox add-ons

# Actor input Schema

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

Companies to get reviews for, one per line: a website domain (wise.com) or a Trustpilot profile URL (https://www.trustpilot.com/review/wise.com). Filters inside a URL are ignored; use the fields below.

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

Stop after this many reviews for each company (default 100). Trustpilot shows 200 reviews per filter combination; above that the actor splits by star rating and language to reach more.

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

Only reviews with these ratings, e.g. 1 and 2 for negative reviews. Empty = all ratings.

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

ISO code of the review language (en, de, fr, es …) or 'all' for every language (default).

## `dateRange` (type: `string`):

Only reviews published in this period (Trustpilot's own presets). For an exact start date use 'Published after'.

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

Only reviews published on or after this date (YYYY-MM-DD). Good for daily or weekly syncs; sorting is set to Most recent.

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

Order in which Trustpilot returns reviews. 'recency' = newest first; 'relevance' = Trustpilot's relevance order. Ignored (set to recency) when 'Published after' is used.

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

Only reviews Trustpilot marks as verified.

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

Only reviews the company has replied to.

## `searchText` (type: `string`):

Only reviews containing this word or phrase (Trustpilot's own review search), e.g. refund.

## `maxItems` (type: `integer`):

Stop the whole run after this many reviews across all companies. Empty = no total limit (only the per-company limit applies).

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

Trustpilot blocks datacenter IPs, so Apify Residential proxy is used. A datacenter group or 'no proxy' is switched to Residential with a warning; your own proxy URLs are used as given.

## Actor input object example

```json
{
  "companies": [
    "wise.com",
    "https://www.trustpilot.com/review/www.booking.com"
  ],
  "maxReviewsPerCompany": 100,
  "language": "all",
  "dateRange": "any",
  "sort": "recency",
  "verifiedOnly": false,
  "withRepliesOnly": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

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

Dataset with all reviews

## `overview` (type: `string`):

Reviews in the overview table view

## `runSummary` (type: `string`):

RUN_SUMMARY record: items, charges, errors, fill rates

# 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",
        "https://www.trustpilot.com/review/www.booking.com"
    ]
};

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

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

```

## MCP server setup

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