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

Scrape Trustpilot reviews in bulk: rating, title, text, dates, verification, reviewer country and company replies, plus each business's TrustScore, rating breakdown and contact details.

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

## Pricing

from $6.00 / 1,000 results

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 **reviews from any company's [Trustpilot](https://www.trustpilot.com) page**: star rating, title, full text, publish and experience dates, verification status, reviewer country and the **company's reply**. It also returns the company profile: **TrustScore**, total reviews, **1–5 star breakdown**, categories, **contact details** and **reply-rate statistics**. Paste company websites, press Start, and get clean, export-ready data.

### What does Trustpilot Reviews Scraper do?

For each business you provide, the Actor collects its most recent reviews, newest first, and one business profile row. You can limit how many reviews to collect, filter to specific star ratings (e.g. only 1★ and 2★ complaints) and pick a review language. Businesses can be entered as a plain website (`wise.com`) or a Trustpilot link.

On the Apify platform you also get API access, scheduling, integrations (Google Sheets, Slack, Zapier, Make, webhooks) and run monitoring, so you can track new reviews every day automatically.

### Why scrape Trustpilot reviews?

- **Reputation monitoring**: get every new review for your brand into Slack or a spreadsheet, and never miss a 1★ complaint.
- **Competitor analysis**: compare TrustScores, rating distributions and common complaints across your market.
- **Customer insight & sentiment analysis**: feed review text into AI or BI tools to find what customers love and hate.
- **Lead generation**: find businesses with poor ratings or low reply rates. They need reputation, support or CX services, and profiles often include contact details.
- **Due diligence**: check a supplier's, partner's or acquisition target's real customer experience before you commit.

### How to scrape Trustpilot reviews

1. Open the Actor and go to the **Input** tab.
2. Add company websites or Trustpilot links to **Businesses**.
3. Set **Max reviews per business**, and optionally pick star ratings or a language.
4. Click **Start**.
5. Open the **Output** tab and switch between the **Reviews** and **Businesses** views, or download everything as JSON, CSV, Excel or HTML.

### Input

| Field | Type | Description |
|---|---|---|
| `businesses` | array | Company websites (`wise.com`) or Trustpilot review links. **Required.** |
| `maxReviewsPerBusiness` | integer | Most recent reviews to collect per business. `0` = as many as can be reached. Default `100`. |
| `stars` | array | Optional. Only these ratings, e.g. `["1", "2"]`. |
| `language` | string | Two-letter code (`en`, `de`, …) or `all`. Default `all`. |
| `includeBusinessInfo` | boolean | Add a business profile row. Default `true`. |
| `proxyConfiguration` | object | Optional. Not needed for normal use. |

```json
{
    "businesses": ["wise.com", "https://www.trustpilot.com/review/apify.com"],
    "maxReviewsPerBusiness": 500,
    "stars": ["1", "2"],
    "language": "en"
}
```

### Output

Two kinds of rows, marked by `entityType`. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

**Review**

```json
{
    "entityType": "review",
    "businessDomain": "wise.com",
    "reviewId": "6ab6939d8e016c995f74c086",
    "reviewUrl": "https://www.trustpilot.com/reviews/6ab6939d8e016c995f74c086",
    "rating": 5,
    "title": "24/7 convenience and intuitive payments",
    "text": "I can make payments 24/7 wherever I am in the most convenient and intuitive way.",
    "language": "en",
    "publishedAt": "2026-09-25T17:30:37.000Z",
    "experiencedAt": "2026-09-25T00:00:00.000Z",
    "updatedAt": null,
    "likes": 0,
    "isVerified": true,
    "verificationLevel": "invited",
    "reviewerName": "Herwig",
    "reviewerCountry": "NL",
    "reviewerReviewCount": 5,
    "replyText": "Hey there,\n\nTrue flexibility means having instant access to your account whenever necessity strikes! ...",
    "replyPublishedAt": "2026-09-25T17:39:54.000Z"
}
```

**Business**

```json
{
    "entityType": "business",
    "businessName": "Wise",
    "businessDomain": "wise.com",
    "trustpilotUrl": "https://www.trustpilot.com/review/wise.com",
    "websiteUrl": "https://wise.com",
    "trustScore": 4.3,
    "stars": 4.5,
    "numberOfReviews": 301424,
    "numberOfReviewsLast12Months": 32485,
    "ratingDistribution": { "1": 26612, "2": 4917, "3": 6831, "4": 21039, "5": 242025 },
    "categories": ["Financial Institution", "Money Transfer Service"],
    "isClaimed": true,
    "claimedDate": "2021-03-01T12:00:19.000Z",
    "countryCode": "GB",
    "contactEmail": null,
    "contactPhone": null,
    "contactAddress": "1st Floor Worship Square 65 Clifton Street London , London, EC2A 4JE, GB",
    "replyPercentage": 78.7,
    "averageDaysToReply": 1.18,
    "negativeReviewsCount": 5077
}
```

#### Dataset views

- **Reviews**: rating, title, text, date, reviewer, verification and company reply.
- **Businesses**: TrustScore, rating breakdown, categories, contact details and reply rate.

### Output data fields

| Field | Description |
|---|---|
| `rating` / `title` / `text` | The review itself. |
| `publishedAt` / `experiencedAt` / `updatedAt` | When it was posted, when the experience happened, and when it was edited. |
| `isVerified` / `verificationLevel` | Whether Trustpilot verified the review, and how (e.g. invited by the company). |
| `reviewerName` / `reviewerCountry` / `reviewerReviewCount` | Public reviewer profile details. |
| `replyText` / `replyPublishedAt` | The company's public reply, if any. |
| `trustScore` / `stars` / `ratingDistribution` | Overall score and number of reviews per star rating. |
| `contactEmail` / `contactPhone` / `contactAddress` | Contact details the business published on Trustpilot. |
| `replyPercentage` / `averageDaysToReply` / `negativeReviewsCount` | How actively the business answers negative reviews. |
| `aiSummary` | Trustpilot's review summary for the business, when available. |
| `error` | Why a business couldn't be loaded, otherwise `null`. |

### How many results will I get?

One row per review, plus one profile row per business. 5 businesses × 200 reviews gives up to 1,005 rows. Use **Max reviews per business**, **star filters** and **language** to collect only what you need.

### Tips

- **Monitor complaints**: set **Only these star ratings** to 1 and 2, schedule a daily run, and send new rows to Slack.
- **Recent-first**: reviews come newest first, so a small limit gives you the latest feedback.
- **Big brands**: very large businesses have hundreds of thousands of reviews. The Actor collects up to about 200 of the newest reviews for every star rating in every review language, which means thousands for international brands. Filter by star rating to focus on a segment.

### FAQ

**How many reviews can I get for one business?** Up to about 200 of the newest reviews per star rating per review language. In our tests that was over **8,000** reviews for a large international brand, and several hundred for a smaller single-language business. Businesses with fewer reviews are usually collected completely. The oldest reviews of very large brands are out of reach.

**Why are contact details empty for some businesses?** Businesses choose what to publish on their profile. Many large brands leave these fields empty.

**Is scraping Trustpilot legal?** The Actor only collects publicly visible reviews. Reviews include reviewer names, which are personal data, so you're responsible for using the data lawfully (e.g. under GDPR). When in doubt, consult a lawyer.

**Found a bug or need a custom feature?** Open an issue in the **Issues** tab. Custom solutions are available on request.

# Actor input Schema

## `businesses` (type: `array`):

Company websites (wise.com) or Trustpilot review page links (https://www.trustpilot.com/review/wise.com), one per line.

## `maxReviewsPerBusiness` (type: `integer`):

How many of the most recent reviews to collect per business. 0 = as many as can be reached.

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

Optional. Only collect reviews with these ratings, e.g. 1 and 2 for complaints. Leave empty for all ratings.

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

Two-letter language code (e.g. en, de, fr) to only collect reviews in that language, or 'all'.

## `includeBusinessInfo` (type: `boolean`):

Add one row per business with TrustScore, rating breakdown, categories, contact details and reply statistics.

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

Optional. Not needed for normal use.

## Actor input object example

```json
{
  "businesses": [
    "wise.com",
    "https://www.trustpilot.com/review/apify.com"
  ],
  "maxReviewsPerBusiness": 100,
  "language": "all",
  "includeBusinessInfo": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# 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 = {
    "businesses": [
        "wise.com",
        "https://www.trustpilot.com/review/apify.com"
    ],
    "maxReviewsPerBusiness": 100
};

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

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

```

## MCP server setup

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