# Trustpilot Reviews Scraper — Reviews & Company Data, No Login (`openclawai/trustpilot-reviews-scraper`) Actor

$5/1K reviews, no login, no token. Scrape Trustpilot reviews by company domain, name or review page URL: rating, title, text, dates, verified flag, reviewer country, company reply, plus the company profile with TrustScore and rating distribution. Star, date, language, verified and reply filters. Dee

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

## Pricing

$5.00 / 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?

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 — Reviews, Ratings & Company Profiles (No Login, No Token)

**$5 per 1,000 reviews. Nothing to log in to, no app token to paste, no key that expires mid-run.** Give this Trustpilot scraper a website domain, a company name or a Trustpilot review page URL and get every review as clean JSON: star rating, title, text, dates, verified flag, reviewer country, likes and the company's reply, plus one free profile row per company with TrustScore, rating distribution, categories, contact details and reply behaviour. Server-side filters for stars, date range, language, verified-only and replied-only, and a deep sweep that goes past Trustpilot's 200-review page limit.

### Why this Trustpilot scraper

- 🔓 **No token, no login, no rotation.** Other Trustpilot scrapers depend on a mobile-app bearer token that expires and kills every run until someone pastes a new one. This one reads Trustpilot's public pages through an anti-bot proxy that is included in the price.
- 💰 **One flat price.** $5 per 1,000 reviews. Company profile rows, hints and errors are free. No start fee, no "AI insights" upsell.
- 🔎 **Past the 200-review limit.** Trustpilot shows at most 200 reviews per filter. The deep sweep walks star × date × language streams and de-duplicates, so a company with thousands of reviews yields thousands, not 200.
- 🌍 **All languages by default.** Trustpilot's own pages default to English. This Actor requests every language unless you narrow it.
- 🏷️ **Company profile included.** TrustScore, star rating, total and last-12-months review counts, rating distribution, reviews per language, categories, claimed status, contact email and phone, reply rate and average days to reply.
- 🎯 **Filters applied at the source.** Stars, date range, language, verified-only and replied-only are sent to Trustpilot, so you only fetch, and only pay for, the reviews you want.

### Who uses this

- **E-commerce and DTC brands** tracking their own reviews and their competitors' daily.
- **Customer experience and support teams** mining 1-star reviews for recurring problems.
- **Market researchers and analysts** benchmarking TrustScore, reply rate and rating mix across a category.
- **Sales and partnership teams** qualifying prospects by review volume and sentiment.
- **AI and data teams** building review datasets for sentiment models, summarisation and RAG.
- **Agencies** reporting reputation KPIs for many clients from one scheduled run.

### What you can do with it

| Goal | Input | Rows |
|---|---|---|
| All recent reviews of a company | `companies: ["www.notion.so"]` | reviews + 1 company row |
| Find a company by name | `companies: ["Airbnb"]` | reviews + company row of the best match |
| Only negative reviews | `stars: ["1", "2"]` | reviews |
| Last 30 days only | `dateRange: "last30days"` | reviews |
| German-language reviews | `languages: ["de"]` | reviews |
| Verified reviews with a company reply | `verifiedOnly: true`, `withReplyOnly: true` | reviews |
| Thousands of reviews for a big brand | `maxReviews: 5000`, `deepSweep: true` | reviews |
| Company profile only | `maxReviews: 1`, `includeCompanyInfo: true` | 1 review + company row |

### Input

```json
{
    "companies": ["www.notion.so", "Airbnb", "https://www.trustpilot.com/review/www.amazon.com"],
    "maxReviews": 100,
    "stars": [],
    "dateRange": "all",
    "languages": [],
    "sort": "recency",
    "verifiedOnly": false,
    "withReplyOnly": false,
    "deepSweep": true,
    "includeCompanyInfo": true
}
```

| Field | Type | Default | What it does |
|---|---|---|---|
| `companies` | array | — | Domains (`www.amazon.com`), company names (`Notion`) or Trustpilot review URLs, one per line. |
| `maxReviews` | integer | `100` | Cap per company, up to 20,000. |
| `stars` | array | `[]` | Keep only these ratings, e.g. `["1", "2"]`. |
| `dateRange` | string | `all` | `last30days`, `last3months`, `last6months`, `last12months` or `all`. |
| `languages` | array | `[]` | ISO codes such as `en`, `de`, `fr`. Empty means every language. |
| `sort` | string | `recency` | `recency` (newest first) or `relevance`. |
| `verifiedOnly` | boolean | `false` | Only reviews Trustpilot marks as verified. |
| `withReplyOnly` | boolean | `false` | Only reviews with a company reply. |
| `deepSweep` | boolean | `true` | Fetch extra star × date × language streams when a company has more than 200 matching reviews. |
| `includeCompanyInfo` | boolean | `true` | Add one free company profile row per company. |
| `threads` | integer | `16` | Pages fetched in parallel. |

### What you get

**Review** (`dataType: "review"`): `id`, `url`, `company`, `companyDomain`, `companyUrl`, `rating`, `title`, `text`, `language`, `publishedAt`, `experiencedAt`, `updatedAt`, `isVerified`, `verificationLevel`, `source` (organic or invited), `likes`, `reviewerName`, `reviewerId`, `reviewerCountry`, `reviewerReviewCount`, `reviewerReviewsOnThisCompany`, `hasReply`, `replyText`, `replyPublishedAt`, `isPending`, `location`, `sourceInput`, `scrapedAt`.

**Company** (`dataType: "company"`, free): `id`, `name`, `domain`, `url`, `website`, `trustScore`, `stars`, `numberOfReviews`, `numberOfReviewsLast12Months`, `ratingDistribution`, `reviewsByLanguage`, `categories`, `primaryCategory`, `isClaimed`, `isClosed`, `countryCode`, `email`, `phone`, `address`, `replyPercentage`, `averageDaysToReply`, `negativeReviews`, `verifiedByGoogle`, `logoUrl`.

#### Sample review

```json
{
    "dataType": "review",
    "id": "6a98f67348c60c8a6c111c1a",
    "url": "https://www.trustpilot.com/reviews/6a98f67348c60c8a6c111c1a",
    "company": "Notion",
    "companyDomain": "notion.so",
    "rating": 1,
    "title": "Terrible interface to manage plans and…",
    "text": "Terrible interface to manage plans and accounts. Hard to keep track of subscriptions…",
    "language": "en",
    "publishedAt": "2026-09-03T06:24:19.000Z",
    "experiencedAt": "2026-09-03T00:00:00.000Z",
    "isVerified": false,
    "source": "Organic",
    "likes": 0,
    "reviewerName": "Jon",
    "reviewerCountry": "AU",
    "reviewerReviewCount": 2,
    "hasReply": false,
    "sourceInput": "www.notion.so",
    "scrapedAt": "2026-09-06T21:10:00Z"
}
```

### Pricing: how much does it cost to scrape 1,000 Trustpilot reviews?

**$5.** One event, `review`, at $0.005 per review row. The company profile row, hint rows and error rows are free. There is no start fee and no minimum, and the anti-bot proxy the Actor needs is included.

A full 200-review pull for one company costs $1 and takes about a minute. A 5,000-review deep sweep of a large brand costs $25.

### Use cases

- **Reputation monitoring**: schedule daily with `dateRange: "last30days"` and diff `id`s to catch every new review the day it lands.
- **Complaint mining**: `stars: ["1"]` across your product category and cluster the `text` field.
- **Competitor benchmarking**: ten domains in `companies` with `maxReviews: 1` to compare TrustScore, reply rate and rating distribution from the free company rows.
- **Response audit**: `withReplyOnly: true` to see how competitors answer criticism, and `replyPercentage` to see how often.
- **Dataset building**: `deepSweep: true` with a high cap for training and evaluation corpora.

### Use with AI agents and MCP

Add this Actor as a tool in Claude, ChatGPT, Cursor or any MCP client through the Apify MCP server. Ask "what are people complaining about in Notion's 1-star reviews this month?" and the agent fills `companies`, `stars` and `dateRange` for you. Rows are flat JSON with a single `dataType` field.

### Integrations

Runs on a schedule, exports to CSV, Excel, JSON or XML, and connects to Google Sheets, Airtable, Slack, Zapier, Make, n8n and webhooks through the Apify platform. Call it from Python, JavaScript or plain HTTP with the Apify API.

### FAQ

#### Do I need a Trustpilot account, API key or app token?

No. The Actor reads Trustpilot's public review pages. Nothing to paste, nothing that expires.

#### Why does Trustpilot stop at 200 reviews, and how does the deep sweep get more?

Trustpilot serves at most 10 pages of 20 reviews for any one filter combination. The deep sweep requests many combinations (each star rating × each date bucket × each language the company has reviews in), then removes duplicates. For most companies that recovers the large majority of their history; for the very largest brands with tens of thousands of reviews, expect several thousand rather than all of them.

#### Why are there fewer reviews than the company's total?

Either your cap or filters limited the pull, or Trustpilot hides some reviews (pending, flagged, or in languages with very few reviews). The company row's `numberOfReviews` is Trustpilot's own total for reference.

#### How do I find the right company?

A domain is the most precise input, exactly as Trustpilot writes it (`www.amazon.com`, `notion.so`). A company name is matched against Trustpilot search and the best match is used, preferring an exact name match, then the most-reviewed profile. When unsure, paste the review page URL.

#### Which reviewer details are included?

The public ones Trustpilot shows: display name, country, number of reviews written, and whether the review is verified. No emails or private data.

#### How fast is it?

About a minute per 200 reviews per company; the deep sweep runs several streams in parallel. Ten companies at 100 reviews each finishes in a few minutes.

#### Can I export to CSV or Excel?

Yes. Every dataset can be downloaded as CSV, Excel, JSON or XML from the run page or the API.

### Is it legal to scrape Trustpilot?

Reviews on Trustpilot are public and intended to be read by anyone. This Actor collects only what is visible without logging in, keeps reviewer data to the public display fields, and paces requests. You are responsible for using the output in line with applicable law and platform terms, especially when processing personal data.

# Actor input Schema

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

One per line. A website domain ('www.amazon.com'), a company name ('Notion') or a Trustpilot review page URL ('https://www.trustpilot.com/review/notion.so'). Names are matched against Trustpilot search.

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

Cap per company (1–20,000). Trustpilot shows at most 200 reviews per filter stream; above that the Actor sweeps star × date × language streams and de-duplicates (see Deep sweep).

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

Keep only these ratings. Leave empty for all.

## `dateRange` (type: `string`):

Only reviews from this period.

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

ISO codes such as 'en', 'de', 'fr'. Leave empty for every language (Trustpilot's own pages default to English only).

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

Order of the primary stream.

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

Keep only reviews Trustpilot marks as verified.

## `withReplyOnly` (type: `boolean`):

Keep only reviews the company replied to.

## `deepSweep` (type: `boolean`):

On (default): when a company has more than 200 matching reviews and your cap is higher, fetch extra star × date × language streams and de-duplicate to reach the cap. Off: primary stream only (max 200).

## `includeCompanyInfo` (type: `boolean`):

Adds one free row per company with TrustScore, rating distribution, categories, contact and reply behaviour.

## `threads` (type: `integer`):

Pages fetched in parallel.

## Actor input object example

```json
{
  "companies": [
    "www.notion.so",
    "Airbnb"
  ],
  "maxReviews": 100,
  "stars": [],
  "dateRange": "all",
  "languages": [],
  "sort": "recency",
  "verifiedOnly": false,
  "withReplyOnly": false,
  "deepSweep": true,
  "includeCompanyInfo": true,
  "threads": 16
}
```

# Actor output Schema

## `results` (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": [
        "www.notion.so",
        "Airbnb"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("openclawai/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.notion.so",
        "Airbnb",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("openclawai/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.notion.so",
    "Airbnb"
  ]
}' |
apify call openclawai/trustpilot-reviews-scraper --silent --output-dataset

```

## MCP server setup

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