# Trustpilot Reviews Scraper - Most Comprehensive (`kaix/trustpilot-reviews-scraper`) Actor

🔥 ~$0.05/1K reviews 🔥 Scrape all reviews for any Trustpilot business. Full review text, ratings, author profiles, company replies, and verification status. Accepts business URLs or domains.

- **URL**: https://apify.com/kaix/trustpilot-reviews-scraper.md
- **Developed by:** [Kai](https://apify.com/kaix) (community)
- **Categories:** Lead generation, SEO tools, Automation
- **Stats:** 11 total users, 8 monthly users, 94.6% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.04 / 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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Trustpilot Reviews Scraper

Collect Trustpilot reviews for one or more businesses. Use a Trustpilot review-page URL or a plain business domain, then choose how many reviews to return and which filters to apply.

Each review is saved as a separate record in the default dataset. You can also save one business profile per resolved business.

### Quick start

Collect the 20 newest reviews for a business:

```json
{
  "businesses": ["https://www.trustpilot.com/review/trustpilot.com"]
}
```

Collect up to 100 reviews for each of two businesses:

```json
{
  "businesses": ["trustpilot.com", "www.amazon.com"],
  "maxReviews": 100,
  "sort": "createdAt:desc"
}
```

Filter reviews by rating, language, date, and keyword:

```json
{
  "businesses": ["www.amazon.com"],
  "maxReviews": 50,
  "stars": ["1", "2"],
  "language": "en",
  "date": "last3months",
  "search": "delivery",
  "onlyVerified": true
}
```

Include a business profile:

```json
{
  "businesses": ["trustpilot.com"],
  "maxReviews": 20,
  "includeBusinessProfiles": true
}
```

### Input

| Parameter | Type | Default | Behavior |
|---|---|---:|---|
| `businesses` | string\[] | required | Trustpilot review-page URLs or plain business domains. Values are trimmed, normalized, and deduplicated in first-seen order. |
| `maxReviews` | integer | `20` | Maximum reviews per business. Use `0` for every available review with `createdAt:desc`. |
| `sort` | enum | `createdAt:desc` | `createdAt:desc` returns newest reviews first. `relevancy:desc` returns the most relevant reviews, up to 200 per business. |
| `stars` | string\[] | `[]` | Select any combination of `"1"` through `"5"`. An empty array includes every rating. |
| `language` | string | `all` | Review language code, such as `en`, `de`, or `fr`. Use `all` for every language. |
| `date` | enum | `all` | `all`, `last30days`, `last3months`, `last6months`, or `last12months`. |
| `search` | string | none | Only include reviews whose title or text matches this keyword. |
| `onlyVerified` | boolean | `false` | Only include reviews marked as verified. |
| `onlyWithReplies` | boolean | `false` | Only include reviews that have a business reply. |
| `includeBusinessProfiles` | boolean | `false` | Save one normalized profile per resolved business in the Business Profiles dataset. |
| `proxyConfiguration` | object | `{"useApifyProxy":true}` | Optional connection settings for the run. |

Review filters are combined. For example, selecting 1-star and 2-star reviews with `language: "en"` returns English reviews from either selected rating.

### What you get

Review records include:

- Business identity: `businessUnitId`, `businessDomain`, and `businessDisplayName`
- Review content: `id`, `title`, `text`, `stars`, `language`, `source`, and `status`
- Dates: `createdAt`, `updatedAt`, and `experiencedAt`, expressed as Unix seconds in UTC
- Verification and engagement: `isVerified`, `reviewVerificationLevel`, `verificationLabel`, and `numberOfLikes`
- Reviewer details in `consumer`
- Business response in `companyReply`, or `null` when no response is available

The following selected fields retain their values from a verified real record. Fields were omitted rather than rewritten:

```json
{
  "id": "69d23ace6e047ac9f9d7abb8",
  "businessUnitId": "46ad346800006400050092d0",
  "businessDomain": "www.amazon.com",
  "businessDisplayName": "Amazon",
  "stars": 1,
  "language": "en",
  "createdAt": 1775392494,
  "isVerified": false,
  "numberOfLikes": 0
}
```

When `includeBusinessProfiles` is enabled, profile records include identity and domain aliases, website and image URLs, TrustScore and star totals, review-count breakdowns, location, claim and closure status, verification fields, categories, and available contact details.

Selected fields from a verified real profile:

```json
{
  "id": "46d6a890000064000500e0c3",
  "displayName": "Trustpilot",
  "name": {
    "identifying": "trustpilot.com"
  },
  "websiteUrl": "https://www.trustpilot.com",
  "score": {
    "trustScore": 4.4,
    "stars": 4.5
  },
  "numberOfReviews": {
    "total": 476374,
    "oneStar": 63679,
    "twoStars": 11543,
    "threeStars": 16749,
    "fourStars": 37519,
    "fiveStars": 346884
  },
  "claimState": "claimed",
  "isActivelyInviting": true
}
```

Optional values are `null` when they are unavailable. Unknown source fields are not added automatically, so the published record shape remains stable.

### Limits, empty results, and failures

- `maxReviews` applies separately to each business.
- `relevancy:desc` returns at most 200 reviews per business.
- A valid filter combination with no matching reviews succeeds with an empty review dataset.
- Inputs that resolve to the same business are processed once.
- If one business fails and another completes, the completed records remain available and the run reports the failed count.
- If no requested business can be completed, the run fails instead of returning a successful empty result.

# Actor input Schema

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

Trustpilot review-page URLs or plain business domains.

## `maxReviews` (type: `integer`):

Maximum reviews per business. Use 0 for every available review with Newest First.

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

Newest First supports complete pagination. Most Relevant returns up to 200 reviews per business.

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

Only include reviews with these star ratings (1-5). Leave empty for all ratings.

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

Language filter. Use 'all' for all languages, or a language code (e.g. 'en', 'de', 'fr').

## `date` (type: `string`):

Only include reviews from this date range. 'all' disables the filter.

## `search` (type: `string`):

Only include reviews whose title or text matches this keyword.

## `onlyVerified` (type: `boolean`):

Only include reviews marked as verified.

## `onlyWithReplies` (type: `boolean`):

Only include reviews that have a business reply.

## `includeBusinessProfiles` (type: `boolean`):

Save one normalized profile per resolved business in the Business Profiles dataset.

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

Optional connection settings for the run.

## Actor input object example

```json
{
  "businesses": [
    "https://www.trustpilot.com/review/amazon.com"
  ],
  "maxReviews": 20,
  "sort": "createdAt:desc",
  "stars": [],
  "language": "all",
  "date": "all",
  "onlyVerified": false,
  "onlyWithReplies": false,
  "includeBusinessProfiles": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Normalized review records.

## `businessProfiles` (type: `string`):

Normalized business profiles when requested.

# 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": [
        "https://www.trustpilot.com/review/amazon.com"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("kaix/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": ["https://www.trustpilot.com/review/amazon.com"],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("kaix/trustpilot-reviews-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).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": [
    "https://www.trustpilot.com/review/amazon.com"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call kaix/trustpilot-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=kaix/trustpilot-reviews-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/xX9UFe0IgK2g9YZtI/builds/6zIB0iKRiIXO7ux4b/openapi.json
