# Trustpilot Reviews Scraper: Stars, Text, Company Replies (`quarra/trustpilot-reviews-scraper`) Actor

Trustpilot reviews of any company from its domain: stars, title, text, date, language, country, Verified badge, company reply, plus the company's score and review count. Filter by stars, language, date, keyword. No reviewer names or profiles. Pay per review.

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

## Pricing

from $0.44 / 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: Reviews, Ratings, Company Replies & Filters

Get the Trustpilot reviews of any company from its domain: stars, title, text, date, language, the reviewer's country,
the Verified badge, the company's reply, and the company's overall score and review count. Filter by stars, language,
date, keyword, verified reviews and reviews with a company reply. No reviewer names, profiles or photos, and company
replies are cleaned of people's names (greeting, signature, names inside a sentence).
Built for reputation monitoring, customer feedback analysis, competitor benchmarks and market research.

**From $0.44 per 1,000 reviews**, plus $0.002 per company and a $0.005 start fee per run. A review that cannot be delivered is never charged. A 100-review run on one company costs $0.055 on the Free plan price and $0.051 at Gold.

### Quick start

1. Add one or more **companies**: a domain (`zalando.fr`), a website address, or a Trustpilot page address.
2. Choose how many **reviews per company** and, if you want, filters.
3. Click **Start** and read the reviews in the **Output** tab.

It also runs from the Apify API, on a schedule, and connects to webhooks, Make, Zapier, n8n or Apify's MCP server.
Run it every week on the same companies to follow the score and the complaints over time.

### What it is used for

- **Reputation monitoring**: new low-star reviews of your brand, and whether the company replied.
- **Competitor benchmark**: score, volume and recurring complaints of rivals.
- **Customer feedback analysis**: feed reviews to a sentiment or topic model, by language and period.
- **Market research**: what customers of a whole sector praise or complain about.

### What you get

| | |
|---|---|
| Stars, title, review text | yes |
| Publication time, language | yes |
| Verified badge | yes |
| Country shown for the reviewer | when given |
| The company's reply and its time (people's names removed) | when there is one |
| Company name, overall score, total review count | on every review |
| Link to the review | yes |
| Reviewer name, profile, photo, staff names | never delivered |

### Inputs

- **Companies**: domains, website addresses or Trustpilot company page addresses. Up to 2,000 per run.
- **Reviews per company**: 1 to 1,000 (default 100).
- **Order**: newest first (default) or Trustpilot's relevance order.
- **Stars**: a minimum and a maximum (for example 1 to 2 for complaints).
- **Languages**: review language codes (`en`, `fr`, `de`...).
- **Published after / before**: dates like `2026-01-31`.
- **Verified only**, **only reviews the company replied to**, **keyword**.
- **Maximum reviews** and Apify's **Maximum cost per run**: the run stops before going over either.

### Output

One record per review. Main fields: `companyDomain`, `companyName`, `companyRating`, `companyReviewCount`, `rating`,
`title`, `text`, `language`, `publishedAt`, `verified`, `reviewerCountry`, `companyReply`, `companyReplyAt`,
`hasCompanyReply`, `reviewId`, `reviewUrl`, `scrapedAt`. A company that cannot be found, or that has no review matching
your filters, comes as a free `error` or `missing` record with the reason. The run summary (OUTPUT) gives the count per
company and why the run stopped.

### Pricing

Pay per event:

| Event | Price |
|---|---|
| Review delivered | $0.48 per 1,000 (Free, Bronze), $0.46 (Silver), $0.44 (Gold and above) |
| Company looked up | $0.002 per company (found or not found), charged once the lookup answers |
| Run start | $0.005 per run |

The company fee pays for the lookup even when the company has no page or no review matching your filters, so a typo in a list never stops the others. Never charged: reviews that fail, error and missing records (only the company fee applies), repeats, notices. Example at Gold: 10 companies with 100 reviews each = 1,000 x $0.00044 + 10 x $0.002 + $0.005 = $0.465.

### Limits

- **Only the 200 newest reviews of a company can be read in one pass** (or the 200 most relevant). For more than 200,
  the Actor takes the 200 newest, then reads each star rating further to complete them (up to 200 per star rating), so
  a company with a very long history is covered by "the 200 newest per star rating", not by every review ever written.
- **Dates** work within that reach. If the dates you ask are older than the newest reviews that can be read, the
  company comes as a free `missing` record that says so, or with a note when only part of your dates could be checked.
- **Filters** by stars, language, date, keyword, verified and company reply are applied by Trustpilot's own search where
  possible, and always checked on every review before it is delivered.
- **Companies are found by domain.** A name without a domain is not looked up.
- Trustpilot shows what it shows at that moment: reviews it removes or reorders are not recoverable.

### FAQ

**Why no names?** They are personal data. Reviewer names are never delivered. Company replies are cleaned by a name
recognition model (the main European languages): the name in a greeting and in a signature is removed ("Hi Daniel," becomes
"Hi,"), and a name inside a sentence becomes `[name]`; the reviewer's own name is removed wherever it is left. Company names and
teams ("N26 support") are kept; an email address in a reply can be replaced by `[email]`. The model is good, not perfect: a rare
or oddly written name (for example a first name alone at the end of a line) can slip through, and an unusual word can be taken
for a name. The review text itself is delivered as its author wrote it.

**Is anything different on Apify's free plan?** Live collection needs a paid Apify plan. On the free plan, the prefilled
example (`www.zalando.fr`, 20 reviews, newest first, no filter) returns a stored sample, marked `sample: true` with its
date. Any other input asks nothing and says so in the run. Only the run start is charged.

**What if a run is restarted?** It resumes where it was: reviews already delivered are not collected or charged again. A run you reboot or resurrect more than 3 times stops there.

**What if the run's timeout comes first?** The reviews already read are delivered and charged, the rest is not. Resurrect the run to finish it, or give the next run a longer timeout.

**Does the Actor send anything to Quarra?** Only when a run fails, runs out of time, or stops early because our review service is down: the Actor, its build, the error type, the line of our code where it happened, and the memory and time the run was given, so we can fix it fast. Never your companies, your results, your account or the run ID.

# Actor input Schema

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

Company domains such as zalando.fr, website addresses, or Trustpilot company page addresses (trustpilot.com/review/zalando.fr). Available on paid Apify plans only. The prefilled example also runs on the free plan, from stored results.

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

How many reviews to collect for each company, up to 1,000. Up to 200 are the newest (or most relevant) overall; above 200, up to 200 per star rating are collected and merged.

## `sortBy` (type: `string`):

Newest first, or Trustpilot's relevance order.

## `minRating` (type: `integer`):

Only reviews with at least this many stars (1 to 5).

## `maxRating` (type: `integer`):

Only reviews with at most this many stars (1 to 5). Example: 2 for complaints.

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

Only reviews written in these languages, as codes (en, fr, de, es, pt...). Empty: all languages.

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

Only reviews published on or after this date, like 2026-01-31. Within the 200 newest reviews of a company (200 per star rating above 200 reviews).

## `publishedBefore` (type: `string`):

Only reviews published before the end of this date, like 2026-06-30. Within the 200 newest reviews of a company: older dates are out of reach, and the run says so.

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

Only reviews carrying the Verified badge.

## `withCompanyReply` (type: `boolean`):

Only reviews that have a reply from the company.

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

Only reviews that mention this word or phrase (Trustpilot's own review search).

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

Stop after this many delivered reviews in total. Leave empty for no limit.

## Actor input object example

```json
{
  "companies": [
    "www.zalando.fr"
  ],
  "maxReviewsPerCompany": 20,
  "sortBy": "recency",
  "verifiedOnly": false,
  "withCompanyReply": false
}
```

# Actor output Schema

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

Every review with its company data, and free rows with the reason when a company could not be read.

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

One line per review.

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

Counts per company and why the run stopped.

# 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.zalando.fr"
    ],
    "maxReviewsPerCompany": 20
};

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

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

```

## MCP server setup

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