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

Scrapes Trustpilot reviews of any company with rating, title, text, dates, language, verification, reviewer country and the company's reply, plus its TrustScore and star distribution, from a Trustpilot link or a bare domain, past the 200-review limit.

- **URL**: https://apify.com/mina_safwat/trustpilot-reviews-scraper.md
- **Developed by:** [Mina](https://apify.com/mina_safwat) (community)
- **Categories:** Marketing, Business, Lead generation
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$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

### What does Trustpilot Reviews Scraper do?

**Trustpilot Reviews Scraper** collects **reviews of any company on [Trustpilot](https://www.trustpilot.com)**: the **star rating, title, full text, language, posting date and date of experience, edits, verified and invited labels, likes, the reviewer's name, country and review count, and the company's reply**. Every row also carries the company's **TrustScore, total review count and star distribution**. Paste a company's Trustpilot link from any country site, or just its website domain such as `amazon.com`.

Trustpilot shows visitors who are not logged in only the **newest 200 reviews of any listing**. When you ask for more, the Actor **reads each language and star rating separately** and merges them newest first, so you get **every review back to the date where Trustpilot's limit cuts in**, without an account. That date is reported for each company.

Try it with the prefilled company: open the Actor, click **Start**, and 40 Amazon reviews arrive in a few seconds. Because it runs on the Apify platform, you also get API access, scheduled runs, integrations (Google Sheets, Make, Zapier, Slack, webhooks) and run monitoring.

### Why scrape Trustpilot reviews?

- **Reputation monitoring**: follow what customers say about your company, every day, with replies and ratings in one table.
- **Competitor research**: compare TrustScores, star distributions and recurring complaints across a whole market.
- **Customer support triage**: pull the newest 1- and 2-star reviews, see which ones have no reply yet, and route them to your team.
- **Sentiment analysis and AI datasets**: reviews in every language, each with its star rating as a ready-made label.
- **Market and due diligence research**: check how a supplier, shop or partner is rated before you sign.

### How to scrape Trustpilot reviews

1. Find the company on Trustpilot and copy the address of its review page, such as `https://www.trustpilot.com/review/www.amazon.com`. Any country site works (`uk.trustpilot.com`, `de.trustpilot.com` and so on). You can also type just the company's website, such as `amazon.com` (the domain only, not a link to a page on that site).
2. Paste it into **Companies**, one company per line.
3. Set **Max reviews per company**.
4. Optionally narrow the reviews with **Star ratings**, **Review languages**, **Posted within** or **Verified reviews only**, and choose **Sort by**.
5. Click **Start**, then download the reviews when the run finishes.

**Filters in a link are kept.** If you filter reviews on Trustpilot (for example 1-star reviews in English) and copy the address bar, that link brings its own filters for that company. Its stars, language, date, verified and sort settings win over the fields below; the fields apply to every other company.

### Input

Everything is set on the Input tab. In JSON, the input looks like this:

```json
{
    "company_urls": [
        "amazon.com",
        "https://uk.trustpilot.com/review/www.amazon.co.uk",
        "https://www.trustpilot.com/review/wise.com?stars=1&languages=en"
    ],
    "max_reviews_per_company": 500,
    "stars": ["1", "2"],
    "languages": ["en"],
    "date_range": "last_3_months",
    "verified_only": false,
    "sort": "most_recent"
}
```

| Field | What it does |
|---|---|
| `company_urls` | Companies, one per entry: a Trustpilot review page link from any country site, or the company's website domain. Links without `https://` and API objects such as `{"url": "..."}` work too. |
| `max_reviews_per_company` | Stops after this many reviews for each company. Default: 100. |
| `stars` | Only reviews with these star ratings, from `"1"` to `"5"`. Empty keeps every rating. |
| `languages` | Only reviews in these languages, as two-letter codes such as `en`, `de` or `fr`. Empty keeps every language. |
| `date_range` | Only reviews posted within `last_30_days`, `last_3_months`, `last_6_months` or `last_12_months`. Default: `all`. |
| `verified_only` | Only reviews Trustpilot labels as verified. Default: off. |
| `sort` | `most_recent` (default) or `most_relevant`, Trustpilot's own pick of detailed, recent reviews. It decides which reviews you get when a company has more than the maximum. |

### Output

Each review becomes one row. Here is a real example:

```json
{
    "review_id": "6ac966f9d35b1ba5bde85f59",
    "review_url": "https://www.trustpilot.com/reviews/6ac966f9d35b1ba5bde85f59",
    "rating": 5,
    "title": "Quick and easy transaction",
    "text": "Quick and easy transaction; very satisfactory experience.",
    "language": "en",
    "published_at": "2026-10-10T00:13:13.000Z",
    "experienced_at": "2026-10-08T00:00:00.000Z",
    "is_edited": false,
    "edited_at": null,
    "is_verified": true,
    "is_invited": true,
    "likes": 0,
    "reviewer_name": "Philippe B.",
    "reviewer_country": "FR",
    "reviewer_review_count": 2,
    "reply_text": "Hey there,\n\nWe're glad to hear that your payment went smoothly. Delivering a fast and effortless experience every time you move money is always our goal!\n\nWise",
    "reply_published_at": "2026-10-10T01:12:14.000Z",
    "company_name": "Wise",
    "company_domain": "wise.com",
    "company_website": "https://wise.com",
    "company_trust_score": 4.3,
    "company_total_reviews": 302614,
    "company_star_distribution": {"1": 26826, "2": 4935, "3": 6856, "4": 21099, "5": 242898},
    "company_url": "https://www.trustpilot.com/review/wise.com",
    "scraped_at": "2026-10-10T07:35:18+00:00"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. The Output tab has two views: **Reviews** (the review itself) and **Company details** (the company fields on each row).

### Data fields

| Field | Description |
|---|---|
| `review_id` | Trustpilot's ID for the review. A review is saved once per run, however many of your entries lead to it. |
| `review_url` | Link to the review, on the country site you used. |
| `rating` | Stars given, from 1 to 5. |
| `title` | The review's title. |
| `text` | The full review text. |
| `language` | The review's language, as a code such as `en`. |
| `published_at` | When the review was posted, in UTC (ISO 8601). |
| `experienced_at` | The date of the experience, as the reviewer gave it (midnight UTC). |
| `is_edited` | `true` when the reviewer edited the review after posting it. |
| `edited_at` | When the review was edited, in UTC; `null` if it never was. |
| `is_verified` | `true` when Trustpilot labels the review as verified, for example because the company invited the reviewer after a real purchase, or the reviewer sent proof of the experience. |
| `is_invited` | `true` when Trustpilot shows the review as invited, because the company asked the reviewer through its review invitations; `false` for reviews Trustpilot labels unprompted, including ones written through a review link the company shared. |
| `likes` | How many people marked the review as useful. |
| `reviewer_name` | The name the reviewer shows publicly. |
| `reviewer_country` | The reviewer's country, as a two-letter code. |
| `reviewer_review_count` | How many reviews the reviewer has written on Trustpilot. |
| `reply_text` | The company's reply; `null` when it has not replied. |
| `reply_published_at` | When the company replied, in UTC. |
| `company_name` | The company's name on Trustpilot. |
| `company_domain` | The company's name in Trustpilot links, usually its website domain (`amazon.com` becomes `www.amazon.com`). |
| `company_website` | The company's website. |
| `company_trust_score` | The company's TrustScore, from 1 to 5. |
| `company_total_reviews` | How many reviews the company has on Trustpilot in total. |
| `company_star_distribution` | How many of those reviews give 1, 2, 3, 4 and 5 stars. |
| `company_url` | The company's Trustpilot page. |
| `scraped_at` | When the review was collected, in UTC. |

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

The Actor uses **pay-per-event** pricing: you pay a small fixed amount for each review saved. See the **Pricing** tab for the exact price. Companies that return no reviews are never charged, and if you set a maximum cost for a run, the Actor stops as soon as it is reached.

Apify's free plan includes monthly credit, enough to try the Actor on thousands of reviews.

### Tips for scraping Trustpilot

- **Filter before you scrape.** Stars, language, date and verified filters are applied by Trustpilot itself, so you only read, and pay for, the reviews you want.
- **Monitor new reviews** by scheduling a daily run with **Posted within** set to the last 30 days and a modest maximum; use `review_id` to skip reviews you already have.
- **The country site does not change the reviews.** Every Trustpilot site shows the same reviews of a company; use **Review languages** to pick a language.
- **Older reviews of one kind**: each language and star rating has its own 200-review window, and the busiest one sets the date. If you need older reviews of one kind, such as 4- and 5-star reviews of a company whose newest reviews are mostly 1-star, ask for that kind only.
- **A domain that is not found** may be listed on Trustpilot under another address (with or without `www.`, or a country domain). Search for the company on Trustpilot and paste its link instead.
- **Most relevant** order covers the first 200 reviews (of each language, when you pick several), the most Trustpilot shows in that order; any reviews beyond them come most recent first.

### FAQ, disclaimers and support

**How many reviews can I get for one company?** Trustpilot shows visitors who are not logged in only the newest 200 reviews (10 pages) of any listing; page 11 asks them to log in. Up to 200, you get exactly the reviews Trustpilot lists, in the order you chose. Above 200, the Actor splits the company's reviews by language and, for languages with more than 200 reviews, by star rating, reads the newest 200 of each part, and merges them newest first. It stops at the point where the first part runs out, because older reviews of that part are hidden: what you get is **every review back to that date**, with none missing. For a company with a few hundred reviews, that is often all of them; for big ones it is a recent window. On 10 October 2026 it reached back 4 months for Apify (246 of 783 reviews), 2 weeks for Amazon (362 of 46,709) and 18 hours for Octopus Energy (239 of 816,623). The run's status message and the **FAILED_INPUTS** record give the date for each company with older reviews.

**What happens to companies that return nothing?** Entries that are not Trustpilot links or domains, companies Trustpilot has no page for, companies without reviews matching your filters, and a second entry for a company already read with the same filters are not saved as rows, so you are not charged for them. Each one is listed with its reason in the **FAILED_INPUTS** record of the run's key-value store, and the status message gives the counts. A run is marked failed only when nothing was saved because Trustpilot refused or could not be reached for every company.

**Do I need a Trustpilot account or a proxy?** No. The Actor reads only public pages, without logging in, and chooses its own connection: it retries through Apify Proxy on its own if Trustpilot refuses.

**Is it legal to scrape Trustpilot?** The Actor reads only reviews that anyone can see on Trustpilot without an account. Reviews include **reviewers' public names and countries, which are personal data** under rules such as the GDPR and CCPA: only collect what you need, store it securely, have a lawful reason to process it, and don't use it to contact or profile reviewers. Trustpilot's terms of use and robots.txt restrict automated access, so you are responsible for how you use the data. If you are unsure, ask a lawyer.

**Found a problem or need a custom solution?** Open an issue on the **Issues** tab and we will look into it. Custom scrapers and review data feeds are available on request.

# Actor input Schema

## `company_urls` (type: `array`):

Companies, one per line: a company's Trustpilot link from any country site (https://www.trustpilot.com/review/www.amazon.com, uk.trustpilot.com/review/www.amazon.co.uk) or simply its website domain (amazon.com), not a link to a page on that site. Filters set in a pasted link (stars, language, date, verified, sort) are kept for that company. Entries that cannot be read are listed in the FAILED_INPUTS record.

## `max_reviews_per_company` (type: `integer`):

Stops after this many reviews for each company. Trustpilot shows visitors who are not logged in only the newest 200 reviews of any listing; above 200, the Actor reads each language and star rating separately and gives every review back to the date where the first of them runs out, which the status message reports.

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

Only reviews with these star ratings. Leave empty for every rating.

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

Only reviews written in these languages, as two-letter codes such as en, de, fr, es, it, nl, da, sv, pl or pt. Leave empty for every language (whatever the country site in the link).

## `date_range` (type: `string`):

Only reviews posted within this period.

## `verified_only` (type: `boolean`):

Only reviews Trustpilot marks as verified (backed by proof of a real experience).

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

Which reviews come first, and so which ones you get when a company has more than the maximum. Most relevant is Trustpilot's own pick of detailed, recent reviews; it applies to the first 200 reviews, and any beyond them come most recent first.

## Actor input object example

```json
{
  "company_urls": [
    "amazon.com"
  ],
  "max_reviews_per_company": 40,
  "stars": [],
  "languages": [],
  "date_range": "all",
  "verified_only": false,
  "sort": "most_recent"
}
```

# Actor output Schema

## `dataset` (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 = {
    "company_urls": [
        "amazon.com"
    ],
    "max_reviews_per_company": 40
};

// Run the Actor and wait for it to finish
const run = await client.actor("mina_safwat/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 = {
    "company_urls": ["amazon.com"],
    "max_reviews_per_company": 40,
}

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

```

## MCP server setup

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