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

Extracts Trustpilot reviews by company domain or URL in every language: rating, title, text, date, reviewer country, verification and company reply as JSON. Only-new mode for monitoring, star, language and keyword filters. No proxy setup needed.

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

## Pricing

from $0.25 / 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 extracts **Trustpilot reviews** for any company by its website domain or Trustpilot URL — in **every language**, not only the one Trustpilot's website shows you by default. One row = one review: star rating, title and text, posting and experience dates, reviewer name, country and review count, the "Verified" label, and the company's reply with its date. You pay **$0.48 per 1,000 reviews stored** (down to $0.25 on higher Apify plans) plus **$0.003 per run** — reviews skipped by your date, star, language or keyword filters are free.

**Why "every language" matters:** Trustpilot's website shows only reviews in the visitor's language unless you change the filter. For Amazon that is about 31,000 of 50,000 reviews — Italian, Dutch, German and Spanish reviews stay hidden. This scraper always asks for all languages.

Built for **review monitoring**: turn on *Only new since the last run*, schedule it daily, and each run returns only the reviews posted since the previous one. TrustScore, total reviews, the 1–5 star distribution and reviews per language are saved once per company in a separate summary, so your review table stays clean. No proxy setup, no login, no API key.

### What data does Trustpilot Reviews Scraper extract?

| Field | Example | Notes |
|---|---|---|
| `targetId` | `www.amazon.com` | Company's Trustpilot name (its domain) |
| `targetName` | `Amazon` | Company name |
| `reviewId` | `6aedc767b8b124e8adf6b2f2` | Unique review id — use it to deduplicate across runs |
| `rating` | `1` | Stars, 1–5 |
| `title` | `Parcel never arrived` | Review title |
| `text` | `Ordered two weeks ago and …` | Full review text |
| `language` | `en` | Language of the review |
| `country` | `US` | Reviewer's country |
| `publishedAt` | `2026-11-06T14:26:15Z` | Posted, ISO 8601 UTC |
| `experiencedAt` | `2026-11-06T00:00:00Z` | Date of the experience the reviewer gave |
| `updatedAt` | `null` | Last edit, if any |
| `isVerified` | `false` | Trustpilot's "Verified" label |
| `verificationSource` | `invitation` | Where the verification came from |
| `reviewSource` | `Organic` | How the review was collected |
| `replyText` | `Hi there, we're sorry to hear …` | The company's public reply |
| `replyAt` | `2026-11-05T14:23:09Z` | When the company replied |
| `helpfulCount` | `0` | "Useful" votes |
| `authorName` | `Tari` | Reviewer's display name |
| `authorId` | `69ba89df1a47faa9bdaab88d` | Reviewer's Trustpilot id |
| `authorReviewCount` | `2` | Reviews this person wrote on Trustpilot |
| `authorImageUrl` | `https://user-images.trustpilot.com/…` | Profile picture, if any |
| `companyTrustScore` | `1.5` | TrustScore at the time of the run |
| `url` | `https://www.trustpilot.com/reviews/6aedc767…` | Link to the review |
| `scrapedAt` | `2026-11-06T14:31:58Z` | When the row was collected |

`source` (always `trustpilot`), `targetUrl`, `appVersion` and `aspectRatings` complete the shared Apifry reviews format: the same columns are used by our Google Play and App Store review scrapers, so one parser handles all three. `appVersion` and `aspectRatings` are always `null` on Trustpilot.

#### Company summary (key-value store, record `SUMMARY`)

One entry per company: `trustScore`, `reviewsCount` (all reviews on Trustpilot), `starsDistribution` (`{"1": …, "5": …}`), `reviewsByLanguageOnTrustpilot`, `reviewsByLanguage` (this run), `website`, `country`, `categories`, `isClaimed`, `reviewsScrapedThisRun`, `error` (why a company failed, if it did) and `note` (why a company returned nothing, or where Trustpilot's per-filter limit stopped the run). It is free.

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

| Apify plan | Price per 1,000 reviews |
|---|---|
| Free | $0.48 |
| Starter | $0.42 |
| Scale | $0.32 |
| Business | $0.25 |

Each run also costs **$0.003** to start (it pays for the browser that opens Trustpilot once per run), so a daily monitoring run that finds 5 new reviews costs about $0.0054 — around $0.16 a month per company. Put several companies into one run to pay the start fee once. Reviews older than your cut-off, filtered out, duplicated across lists, or from companies that failed are not charged. Set *Max reviews per company* and Apify's *max charge* limit to cap any run.

### Review analytics add-ons (optional)

Off by default, rule-based (not AI), charged only when you turn them on:

- **Tag every review** — adds `topics` (delivery, returns & refunds, customer service, product quality, price & billing, scam & trust, website & ordering), `sentiment` (positive, neutral, negative, mixed) and `isFeatureRequest` to each row; charged as *Review with tags* instead of *Review*. Reviews in languages other than English, German, French, Spanish, Portuguese, Italian and Russian stay untagged at the plain price. `isBugReport` is always `null` on Trustpilot.
- **Insights per company** (record `INSIGHTS`) — complaint topics with shares and real quotes, frequent words and phrases in 1–2 star reviews, suggestions, company reply rate and reply time. One charge per company with at least 30 reviews in the run.
- **Trends per company** (record `TRENDS`) — average rating, review count and 1–2 star share per week or month, change to the previous period, a spike flag, and the same by reviewer country. One charge per company with at least 30 reviews in the run.

### How to scrape Trustpilot reviews

1. Add companies: a domain (`www.amazon.com`), a website URL, or a Trustpilot review page from any country site (`https://uk.trustpilot.com/review/www.amazon.co.uk`).
2. Set *Max reviews per company* (100 by default).
3. Optional: pick star ratings (1–2 for complaints), languages, reviewer countries (US, GB, CN …), keywords, or a date cut-off.
4. Run, then export the dataset as JSON, CSV, Excel or via API.

#### ⬇️ Input example

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

#### ⬆️ Output example

```json
{
  "source": "trustpilot",
  "targetId": "monzo.com",
  "targetName": "Monzo",
  "reviewId": "6aed…",
  "rating": 1,
  "title": "Account frozen",
  "text": "My account was frozen for two weeks …",
  "language": "en",
  "country": "GB",
  "publishedAt": "2026-11-04T09:12:44Z",
  "experiencedAt": "2026-11-01T00:00:00Z",
  "isVerified": false,
  "replyText": "Hi there 👋 We're sorry to hear this …",
  "replyAt": "2026-11-05T14:23:09Z",
  "helpfulCount": 0,
  "authorName": "Sam",
  "authorReviewCount": 3,
  "companyTrustScore": 4.3,
  "url": "https://www.trustpilot.com/reviews/6aed…"
}
```

### How many reviews can I get per company?

Trustpilot shows at most **200 reviews per filter** (10 pages) to anyone. When a company has more, the scraper splits the list — first by star rating, then by language — and removes duplicates, so you get many more than 200 without logging in. In our test on Apify, **Amazon (about 50,000 reviews) gave 5,465 unique reviews in one 11-minute run**, in 20+ languages. How many you get depends on how a company's reviews spread across stars and languages; the run's `SUMMARY` tells you when a part of the list could not be reached. For **new reviews** this limit does not matter: a daily run reads everything posted since the day before.

### Monitor new Trustpilot reviews every day

Turn on **Only new since the last run** and create an Apify schedule (daily is enough even for very busy companies). Each run remembers the newest review it saw per company in the key-value store `apifry-trustpilot-reviews-state` in your account and returns only newer ones. Connect the dataset to Slack, email, Google Sheets or a webhook to get alerts about new 1–2 star reviews.

### Use cases

- **Brand monitoring** — daily new reviews, with company replies, for your brand and competitors.
- **Customer support QA** — find unanswered negative reviews and measure reply time.
- **Competitor research** — compare complaint topics across companies in one table.
- **Market research and AI training data** — reviews in every language with country and dates.
- **Lead generation** — companies with many recent complaints about delivery or support.

### Integrations

Use the Apify API, schedules and webhooks, or connect the results to Make, Zapier, n8n, Google Sheets, Slack and cloud storage. The same output format as our Google Play and App Store review scrapers lets you build one dashboard for all review sources.

### 🤖 For AI Agents & LLM Apps

- **Purpose:** returns Trustpilot reviews of companies as JSON rows; one row per review.
- **Minimal input:** `{"companies": ["www.example.com"]}` — accepts domains, website URLs and Trustpilot review URLs from any country site. Default 100 reviews per company, all languages, newest first.
- **Useful fields:** `rating`, `title`, `text`, `language`, `country`, `publishedAt`, `replyText`, `replyAt`, `isVerified`, `url`; company totals are in the key-value record `SUMMARY`, not in the dataset.
- **Filters:** `stars` (strings "1"–"5"), `languages` (two-letter codes), `countries` (reviewer country, ISO codes such as US, GB, CN), `keywords`, `onlyNewerThan` (date or "7 days"), `onlyNewSinceLastRun` (monitoring).
- **Behaviour:** a company Trustpilot does not know is reported in `SUMMARY.error` and is free; the run stays green when at least one review was stored. The run fails (red) only when Trustpilot itself refused to answer.
- **Billing:** `apify-actor-start` $0.003 per run, plus one `review` event per stored review; nothing is charged for skipped or duplicate reviews.
- **Limit:** up to 200 reviews per filter on Trustpilot; the scraper splits by star and language to go further, and `SUMMARY.note` says when it could not reach everything.

### ❓ FAQ

#### Is it legal to scrape Trustpilot reviews?

The scraper collects only publicly visible reviews, the same as anyone sees in a browser, without logging in. Reviews contain personal data such as names, so use the output in line with GDPR and your local law, and check Trustpilot's terms for your use case. If in doubt, ask a lawyer.

#### Do I need a Trustpilot account, API key or proxy?

No. The scraper works without login, API key or proxy. If a run ever stops with "Trustpilot keeps refusing this IP", turn on *Use Apify Proxy* and run again.

#### Why does Trustpilot's website show fewer reviews than this scraper?

The website shows only your own language by default. This scraper reads all languages unless you pick some under *Languages*.

#### Can I get all 50,000 reviews of a huge company?

Not always. Trustpilot limits every filter to 200 reviews; splitting by star and language reaches far more, but for the biggest companies part of the older history stays out of reach. `SUMMARY.note` says when that happened. New reviews are always reachable — schedule daily runs to build a full history going forward.

#### Can I get only reviews from one country, for example the US or China?

Yes: add country codes under *Reviewer countries* (`US`, `CN`, `GB` …). Trustpilot has no country filter of its own, so the scraper reads the company's reviews and keeps those whose author is from the chosen countries — the others are free. For a country with few reviewers on Trustpilot the run stops after 30 pages without a match and says so in `SUMMARY`.

#### Can I get only negative reviews?

Yes: select stars 1 and 2. Other reviews are not read and not charged.

#### Can I get the company's replies?

Yes: `replyText` and `replyAt` are filled whenever the company replied publicly.

#### Can AI agents use it?

Yes. It runs through the Apify API and Apify's MCP server; see *For AI Agents & LLM Apps* above for the input and output contract.

### Trustpilot Reviews Scraper not working?

Start with the run's status line and the **Company summary** output (record `SUMMARY`): every company has an `error` and a `note` that say what happened. Typical cases:

- **Green run with 0 reviews.** Nothing matched, and nothing was charged. Monitoring mode found nothing new, or your star, language, reviewer-country or keyword filters matched nothing — the note says which.
- **Company not found.** Use the domain exactly as it appears in the company's Trustpilot address (`trustpilot.com/review/<domain>`), or paste that review page URL. A line that is not a domain or a Trustpilot URL is skipped for free.
- **Fewer reviews than the company has.** **Max reviews per company** stops the run first; the note says *stopped at Max reviews per company*. Raise it for a full export.
- **"Stopped early … Try again later".** Trustpilot refused requests during the run. The reviews collected so far are kept; start again later or turn on **Use Apify Proxy (datacenter)**.
- **A rare reviewer country returns little.** Trustpilot has no country filter, so the scraper reads pages and keeps matches; it stops after 30 pages without a match to save your money.
- **"Stopped at your max charge limit".** The run hit the *Maximum cost per run* in Run options; raise it and start again.

### Support

Found a problem or need a field we do not return? Open an issue on the Issues tab — we answer within a day.

### You might also like

- [Google Play Reviews Scraper](https://apify.com/apifry/google-play-reviews-scraper) — Android app reviews in the same format.
- [App Store Reviews Scraper](https://apify.com/apifry/app-store-reviews-scraper) — iPhone app reviews from one, many or all countries.
- [Website Email & Contact Scraper](https://apify.com/apifry/website-contact-extractor) — emails, phones and social profiles from company websites.

# Actor input Schema

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

Add companies as their website domain (www.amazon.com), website URL, or Trustpilot review page URL from any country site (https://uk.trustpilot.com/review/www.amazon.co.uk). One company per line.

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

Enter the most reviews to keep per company. Trustpilot shows 200 reviews per filter, so beyond 200 the run splits the list by star and language and removes duplicates; large companies typically give 1,000–3,000 reviews this way. You pay only for reviews stored in the dataset.

## `onlyNewerThan` (type: `string`):

Enter a date (2026-10-01) or a relative period (7 days, 12 hours, 2 weeks). Older reviews are skipped and not charged; each list stops once it reaches them.

## `onlyNewSinceLastRun` (type: `boolean`):

Turn on for scheduled monitoring: each run keeps only reviews newer than the newest one seen by your previous run (per company). The mark is kept in the key-value store 'apifry-trustpilot-reviews-state' in your account. Daily runs keep up even with very busy companies.

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

Select the star ratings to keep, e.g. 1 and 2 for complaints. Other reviews are not read and not charged. Leave empty for all ratings.

## `languages` (type: `array`):

Add two-letter language codes (en, de, fr, es …) to keep only reviews in those languages. Leave empty for every language — unlike Trustpilot's website, which by default shows only your own language.

## `countries` (type: `array`):

Add two-letter country codes (US, GB, DE, CN …) to keep only reviews written by people from those countries. Reviews from other countries are skipped and not charged. Trustpilot has no country filter of its own, so the run reads the company's reviews and keeps the matching ones; it stops a company after 30 pages in a row without a match. Leave empty for all countries.

## `keywords` (type: `array`):

Add words or phrases; only reviews whose title or text contains at least one of them are kept (case-insensitive). Reviews without a match are not charged. Leave empty to keep all.

## `includeTags` (type: `boolean`):

Adds topics (delivery, returns & refunds, customer service, product quality, price & billing, scam & trust, website & ordering), sentiment and isFeatureRequest (suggestions) to each review. Tagged reviews are charged the 'Review with tags' price instead of 'Review'. Reviews in languages other than EN, DE, FR, ES, PT, IT, RU stay untagged at the plain review price. Rule-based, not AI.

## `includeInsights` (type: `boolean`):

Writes record INSIGHTS: complaint topics with shares and quotes, frequent words and phrases in 1–2 star reviews, suggestions, company reply rate and time. Charged once per company with at least 30 reviews in this run; failed, incomplete or tiny samples are free. Based on the reviews this run collected — the TrustScore stays in SUMMARY.

## `includeTrends` (type: `boolean`):

Writes record TRENDS: average rating, review count and 1–2 star share per week or month with change to the previous period, a spike flag, and the same by reviewer country. Charged once per company with at least 30 reviews in this run. Use no star or keyword filter for a true picture.

## `useApifyProxy` (type: `boolean`):

Turn on only if runs stop with 'Trustpilot keeps refusing this IP'. Trustpilot is normally reachable without a proxy; with this on, the whole run uses one datacenter IP.

## Actor input object example

```json
{
  "companies": [
    "www.trustpilot.com"
  ],
  "maxReviewsPerCompany": 100,
  "onlyNewSinceLastRun": false,
  "includeTags": false,
  "includeInsights": false,
  "includeTrends": false,
  "useApifyProxy": false
}
```

# Actor output Schema

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

No description

## `summary` (type: `string`):

No description

## `insights` (type: `string`):

No description

## `trends` (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.trustpilot.com"
    ],
    "maxReviewsPerCompany": 100
};

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

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

```

## MCP server setup

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