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

Paste companies and get their Trustpilot reviews in every language, past the 200-review limit, with star, language, date and country filters, a stats row per company and a report of exactly what was collected.

- **URL**: https://apify.com/alkausari\_mujahid/trustpilot-reviews-scraper.md
- **Developed by:** [Alkausari M](https://apify.com/alkausari_mujahid) (community)
- **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.

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?

**Paste a company and get its [Trustpilot](https://www.trustpilot.com) reviews in Excel in about two minutes — in every language, with the star rating, text, dates, reviewer country, verification badge and the company's reply.** Enter websites (`gymshark.com`), Trustpilot links or brand names (`Nike`), as many as you like; they are scraped in parallel.

Every run also gives you:

- a **Companies** table — TrustScore, star and language breakdown, categories, contact details, and how often the company answers negative reviews;
- a **Report** — per company, how many reviews Trustpilot shows, how many were collected, and **exactly why anything is missing**.

Switch to **Monitor new reviews**, schedule it, and each run returns only what changed since the last one: **new reviews, edited reviews, new company replies and deleted reviews.**

Because it runs on the Apify platform you also get an API, scheduling, webhooks, and integrations with Google Sheets, Slack, Zapier and Make.

### Who is it for?

- **Brand and customer-experience teams** — read every review in every language, and get the new 1★ and 2★ ones every morning.
- **Agencies** — monitor clients' and competitors' reviews on one schedule.
- **Competitor research** — compare TrustScores, star breakdowns and reply rates side by side with **Compare competitors**.
- **Analysts and AI builders** — clean, flat review text for sentiment analysis, topic modelling or LLM pipelines.

### How to scrape Trustpilot reviews

1. Click **Try for free** and open the **Input** tab.
2. Paste companies, one per line: a website (`amazon.com`), a Trustpilot page (`https://www.trustpilot.com/review/www.amazon.com`) or a brand name (`Nike`).
3. Pick what you need: **Full export**, **Monitor new reviews**, **Negative reviews only** (1★ and 2★) or **Compare competitors**.
4. Click **Start**. Reviews appear in the **Output** tab as each company finishes.
5. Download them as **Excel, CSV, JSON or HTML**, or send them to Google Sheets.

### Input

The first screen is all most people need:

| Field | What it does | Default |
|---|---|---|
| **Companies** | Websites, Trustpilot links or brand names. Brand names go through Trustpilot's search; the report shows which company was picked and the other matches. | — |
| **Maximum reviews per company** | Keeps the newest. 0 = every review Trustpilot shows. | 100 in the form |
| **What do you need?** | Full export, Monitor new reviews, Negative reviews only, or Compare competitors. | Full export |

**Filters** (all optional, combine freely): star ratings, review languages, reviewer countries, published within (last 30 days to 12 months), published after (a date or a period such as `14 days`), verified reviews only, and only reviews the company replied to. **By default nothing is filtered out** — all languages, all ratings, verified and unverified.

**Monitoring** (Monitor mode only): how many days back to re-check for changes, and a memory name. **Advanced**: parallel sessions and proxy.

```json
{
    "companies": ["gymshark.com", "Nike", "https://www.trustpilot.com/review/www.amazon.com"],
    "maxReviewsPerCompany": 500,
    "mode": "full",
    "languages": ["en", "de"]
}
```

### Output

One row per review. Example (shortened):

```json
{
    "reviewId": "6ab1f0c2e4b0a1d2c3f4e5a6",
    "reviewUrl": "https://www.trustpilot.com/reviews/6ab1f0c2e4b0a1d2c3f4e5a6",
    "title": "Quick delivery, easy returns",
    "text": "Ordered on Monday, arrived Wednesday. Sent one item back and had the refund three days later.",
    "rating": 5,
    "publishedDate": "2026-09-21T09:14:03.000Z",
    "experienceDate": "2026-09-19T00:00:00.000Z",
    "language": "en",
    "verificationLevel": "verified",
    "isVerified": true,
    "authorName": "Sam",
    "country": "GB",
    "replyMessage": "Thanks Sam, glad it all went smoothly!",
    "replyPublishedDate": "2026-09-22T08:01:44.000Z",
    "companyName": "Example Outdoor Co",
    "companyDomain": "example-outdoor.com",
    "companyTrustScore": 4.3,
    "companyTotalReviews": 2811,
    "changeType": null,
    "scrapedAt": "2026-09-24T17:03:24.848Z"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. The Output tab also links the **Companies** and **Report** tables, and a **Changes** view for monitor runs.

#### Data fields

| Field | Description |
|---|---|
| `reviewId`, `reviewUrl` | The review and its page on Trustpilot |
| `title`, `text`, `rating` | What the reviewer wrote, and the stars (1–5) |
| `publishedDate`, `experienceDate`, `updatedDate` | When it was posted, the date of the experience, and when the reviewer last edited it |
| `language`, `country` | The review's language and the reviewer's country |
| `likes` | "Useful" votes from other visitors |
| `verificationLevel`, `isVerified` | Trustpilot's badge: `verified`, `invited` (the company invited the reviewer) or `not-verified`. `isVerified` is true only for `verified` |
| `source` | How the review arrived (organic, invitation…) |
| `authorName`, `authorId`, `authorReviewCount` | The reviewer's public display name and profile |
| `replyMessage`, `replyPublishedDate`, `replyUpdatedDate` | The company's reply |
| `companyName`, `companyDomain`, `companyTrustScore`, `companyTotalReviews`, `companyUrl`, `companyId` | The company reviewed |
| `changeType` | Monitor mode only — see below |
| `scrapedAt` | When the run collected it |

**Companies table** — one row per company: TrustScore, total and publicly shown reviews, reviews in the last 12 months, the count for each star rating, languages with counts, categories, country, email, phone and address from the Trustpilot profile, whether the profile is claimed, and how often (and how fast) the company replies to negative reviews.

**Report table** — one row per company you entered: found / not found / no reviews match, which company a brand name matched, Trustpilot's total, reviews matching your filters, reviews collected, coverage %, and — when it's not complete — the date from which every review is included and the reason.

### How many reviews can I get? (Trustpilot's 200-review limit)

Trustpilot's website shows **at most 200 reviews for any one combination of filters** — 10 pages of 20, newest first. The public website offers no way past that. This Actor gets as far as the website allows: it reads all languages at once, splits a company with more reviews by language and then by star rating, and adds verified-only and replied-only passes that reach a little further back. The result:

- **Every review, whenever no language-and-rating combination holds more than 200.** That covers most small and mid-size companies.
- **For large companies, every review from recent weeks or months, plus a sample of older ones.** The report states the exact date from which the export is complete.

Measured on 24 September 2026:

| Company | Reviews shown on Trustpilot | Collected | Every review since | Time |
|---|---|---|---|---|
| Espacar Rent a Car | 875 | 369 | 8 April 2025 | 60 s |
| consortium.co.uk | 11,426 | 1,481 | 31 March 2026 | 88 s |
| Gymshark | 40,443 | 4,140 | 1 September 2026 | 146 s |

To build a large company's complete history from today on, schedule **Monitor new reviews**: a daily run only needs the last day, far below the limit.

### Monitor new reviews

The first run collects the last 30 days (adjustable) as a starting point. Every later run returns only what changed, marked in the `changeType` column:

| `changeType` | Meaning |
|---|---|
| `baseline` | First run: the reviews of the re-check period, saved as the starting point |
| `new` | Published since the last run |
| `edited` | The reviewer changed the title, text or rating |
| `newReply` | The company replied |
| `replyEdited` | The company changed its reply |
| `deleted` | Gone since the last run — removed, or it no longer matches your filters. Only the ID, publish date and rating are known |

**Days to re-check for changes** (default 30) sets how far back edits, replies and deletions are caught; `0` looks for new reviews only, which is the cheapest. The memory lives in a key-value store in your own Apify account: one per saved task, or a name you choose. Use a new memory name to start over.

**Alerts for new bad reviews:** choose Monitor mode with star ratings 1 and 2, save it as a task and schedule it daily or hourly. Then, in the task's **Integrations** tab, send each run's results to Slack or email, or to Google Sheets and other apps with Zapier, Make or a webhook.

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

You pay for what you get:

| | Price |
|---|---|
| **Per review** | $0.35 per 1,000 ($0.00035 each) |
| **Per company row** (Companies table) | $0.002 each — switch off **Add a row per company** to skip it |
| **Per company checked in Monitor mode** | $0.01 per company per run, company row included. Changes found are charged as reviews |
| **Per run** | $0.005 to start, which covers preparing the browser sessions ($0.0025 per GB of memory; the default is 2 GB) |
| Report and run summary | Free |

| Example run | Reviews | Cost |
|---|---|---|
| One company, every review (Espacar) | 369 | about $0.14 |
| Gymshark full export | 4,140 | about $1.46 |
| 10 competitors, newest 500 each | 5,000 | about $1.78 |
| Monitoring your own brand, each daily run | a few | about $0.02 (about $0.50 a month) |
| Monitoring 20 companies — first run, last 30 days | about 2,000 | about $0.91 |
| Monitoring 20 companies — each daily run after that, ~5 changes each | about 100 | about $0.24 (about $7 a month) |

Companies that aren't found or can't be read are never charged, and there's no subscription. Set a **maximum cost per run** in the run options and the Actor stops cleanly at the limit, keeping everything collected so far.

### Use it with AI agents (MCP)

Connect Claude, ChatGPT, Cursor or any MCP client to this Actor through the [Apify MCP server](https://mcp.apify.com):

```text
https://mcp.apify.com?tools=alkausari_mujahid/trustpilot-reviews-scraper
```

Then ask, for example: *"Get the 1- and 2-star Trustpilot reviews gymshark.com received in the last 30 days and summarise the top complaints."* Sign in with your Apify account when your client opens the browser, or send your Apify API token as a Bearer header.

### Tips

- **Faster runs:** raise **Parallel sessions** (Advanced). Each session reads just under one page of 20 reviews per second.
- **Lower cost:** filter by language, rating or date, or set a maximum per company. You only pay for rows delivered.
- **Brand names:** check the report's *Matched by* and *Search matches* columns. For an exact match, paste the company's Trustpilot link instead.
- **Large companies:** the report's *Every review since* date tells you how far back the export is complete. Schedule Monitor mode to keep it complete from now on.

### FAQ

**Why did I get fewer reviews than Trustpilot's total?**
Trustpilot's total also counts reviews it doesn't show publicly (removed or pending), and very large companies hit the 200-review limit described above. The report shows both numbers and the reason for each company.

**Does it collect personal data?**
Reviews include the reviewer's public display name, profile ID and country, exactly as Trustpilot shows them. It collects no reviewer email addresses or other contact details. If you store or process reviewer names, data-protection rules such as GDPR apply to you.

**Is it legal to scrape Trustpilot?**
The Actor only reads publicly available pages. Trustpilot's terms restrict automated access, and how you use the data is your responsibility. If in doubt, ask a lawyer.

**What happens if Trustpilot changes its website?**
Every run checks its first pages for signs that Trustpilot's data has changed shape. If nearly all of them look broken, the run stops with a clear error instead of finishing "successfully" with nothing. Please report it in the **Issues** tab so the Actor can be updated.

**Can I get reviews from Trustpilot's country sites (de.trustpilot.com, fr.trustpilot.com…)?**
Yes. A company's reviews are the same on every Trustpilot site, and all languages are included by default. Paste a link from any of them.

### Support

Found a bug or need a field added? Open an issue in the **Issues** tab — feedback is very welcome. Need something custom, such as other review sites, sentiment tagging, or delivery to your own database? Get in touch through the Issues tab.

# Actor input Schema

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

One per line: a website domain (amazon.com), a Trustpilot page (https://www.trustpilot.com/review/www.amazon.com) or a brand name (Nike). Brand names are looked up on Trustpilot's search; the report shows which company was picked and the other matches.

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

The newest reviews are kept first. 0 = every review Trustpilot shows publicly. In Monitor mode: how many of each company's most recent reviews are checked per run — keep it above the number of reviews a company gets between runs, or 0.

## `mode` (type: `string`):

A starting point — the filters below can refine any of them.

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

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

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

Only reviews written in these languages, as 2-letter codes (en, de, fr, es, it, nl, da…). Leave empty for all languages.

## `reviewerCountries` (type: `array`):

Only reviews by people from these countries, as 2-letter codes (US, GB, DE…). Leave empty for all countries.

## `datePreset` (type: `string`):

Only reviews published in this period. Leave empty for any time.

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

Only reviews published on or after this date — an exact date or a period back from today (e.g. 14 days).

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

Only reviews Trustpilot labels as Verified.

## `repliesOnly` (type: `boolean`):

Only reviews with a reply from the company.

## `includeCompanyDetails` (type: `boolean`):

A Companies table with one row per company: TrustScore, total reviews, star and language breakdown, categories, contact details and how often it replies to negative reviews.

## `changeWindowDays` (type: `integer`):

Reviews published in the last this-many days are compared with the previous run, to catch edited reviews, new company replies and deleted reviews. The first run returns these days as its starting point. 0 = only look for new reviews (cheapest).

## `memoryName` (type: `string`):

Monitor mode remembers each company's reviews in a key-value store of this name in your account (letters, digits and hyphens). Leave empty for one memory per saved task. Use a new name to start over.

## `maxConcurrency` (type: `integer`):

How many browser sessions read Trustpilot at the same time. Each uses its own proxy IP and reads about one page (20 reviews) per second.

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

Apify Proxy datacenter IPs work well. Each parallel session gets its own IP.

## Actor input object example

```json
{
  "companies": [
    "gymshark.com",
    "Nike"
  ],
  "maxReviewsPerCompany": 100,
  "mode": "full",
  "verifiedOnly": false,
  "repliesOnly": false,
  "includeCompanyDetails": true,
  "changeWindowDays": 30,
  "maxConcurrency": 5,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

No description

## `changes` (type: `string`):

No description

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

No description

## `report` (type: `string`):

No description

## `runSummary` (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": [
        "gymshark.com",
        "Nike"
    ],
    "maxReviewsPerCompany": 100,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("alkausari_mujahid/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": [
        "gymshark.com",
        "Nike",
    ],
    "maxReviewsPerCompany": 100,
    "proxyConfiguration": { "useApifyProxy": True },
}

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

```

## MCP server setup

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