# Trustpilot Reviews Scraper - Filters & Monitoring (`thirdwatch/trustpilot-reviews-scraper`) Actor

Scrape Trustpilot reviews, ratings, replies, verification, reviewer metadata, and company TrustScores with star, date, language, country, and monitoring filters.

- **URL**: https://apify.com/thirdwatch/trustpilot-reviews-scraper.md
- **Developed by:** [Thirdwatch](https://apify.com/thirdwatch) (community)
- **Categories:** Business, Lead generation, Marketing
- **Stats:** 9 total users, 3 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.10 / 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/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 — Filters, Replies & Monitoring

> **Thirdwatch portfolio:** 5K users across 97 public Actors, 2M+ records delivered, and >99% run success. [Explore all Thirdwatch Actors](https://apify.com/thirdwatch).

Extract public Trustpilot reviews for any company as clean, one-review-per-row data. Filter by star rating, language, reviewer country, publication date, verification, or company reply; schedule the same input to receive only newly published reviews.

Use it for reputation monitoring, voice-of-customer research, competitor benchmarking, complaint detection, customer-support audits, and review datasets for analytics or AI workflows.

### Why this Actor

- **Rich review records:** text, title, rating, dates, likes, language, verification metadata, reviewer profile data, and public company replies.
- **Company context on every row:** TrustScore, star rating, total review count, category, claim status, and rating distribution.
- **Useful filters:** ratings, languages, reviewer countries, date window, exact start date, verified-only, replies-only, and recency/relevance sorting.
- **Incremental monitoring:** the first run establishes a baseline; later scheduled runs return only unseen review IDs.
- **Flexible inputs:** bare domains, company website URLs, Trustpilot `/review/` URLs, and Apify Request List sources.
- **Cost-aware pagination:** one browser session clears Trustpilot's public AWS WAF challenge, then later pages use fast HTTP fetches inside the cleared session.
- **Honest failure behavior:** persistent WAF blocks and invalid companies fail explicitly instead of returning a misleading successful zero-result run.

### Quick start

```json
{
  "companyUrls": ["trustpilot.com", "canva.com"],
  "maxReviewsPerCompany": 100,
  "ratings": [1, 2],
  "sortBy": "recency",
  "dateRange": "last3months"
}
```

The dataset contains up to 100 recent 1–2 star reviews for each company.

### Monitor new negative reviews

```json
{
  "companyUrls": ["yourcompany.com"],
  "maxReviewsPerCompany": 500,
  "ratings": [1, 2],
  "monitoringMode": true,
  "monitoringKey": "yourcompany-negative-reviews"
}
```

Run this input once to create the baseline, then save it as a Task and schedule it. Review IDs are stored in a named key-value store only after their rows are published successfully. An unchanged rerun returns zero rows and incurs no per-review event charges.

### Input

| Field | Required | Description |
|---|---:|---|
| `companyUrls` | No\* | Up to 20 domains, website URLs, or Trustpilot company-review URLs. |
| `startUrls` | No\* | Request List entries; composable with `companyUrls`. |
| `maxReviewsPerCompany` | No | Matching rows per company, 1–1,000. Default: 50. Broad requests above 200 are split by star-rating stream. |
| `ratings` | No | Any combination of 1, 2, 3, 4, and 5. |
| `languages` | No | ISO 639-1 codes such as `en`, `de`, or `fr`. |
| `reviewerCountries` | No | ISO country codes such as `US`, `GB`, or `DE`. |
| `sortBy` | No | `recency` or `relevance`. Monitoring always uses recency. |
| `dateRange` | No | All time, 30 days, 3 months, 6 months, or 12 months. |
| `startDate` | No | Exact inclusive publication cutoff in `YYYY-MM-DD` form. |
| `verifiedOnly` | No | Keep only Trustpilot-verified reviews. |
| `repliesOnly` | No | Keep only reviews with a public company reply. |
| `monitoringMode` | No | Persist state and emit only unseen review IDs. |
| `monitoringKey` | No | Stable state name shared by saved Tasks or schedules. |
| `proxyConfiguration` | No | Residential Apify Proxy configuration; a US residential proxy is the default. |

\* Provide at least one `companyUrls` or `startUrls` entry.

### Output

Every dataset item represents one review. Core fields include:

| Field | Description |
|---|---|
| `review_id`, `review_url` | Stable Trustpilot review identity and public URL. |
| `review_title`, `review_text`, `review_rating` | Review content and 1–5 rating. |
| `review_date`, `experience_date`, `updated_date` | Public Trustpilot timestamps when available. |
| `review_language`, `review_likes`, `review_source` | Language, helpful votes, and collection source. |
| `verified`, `verification_level`, `verification_source` | Trustpilot verification status and metadata. |
| `reviewer_name`, `reviewer_country` | Public reviewer identity and country. |
| `reviewer_reviews_count`, `reviewer_is_verified`, `reviewer_profile_url` | Public reviewer-account metadata. |
| `reply_text`, `reply_date`, `reply_author`, `reply_verified` | Public business response fields when present. |
| `company_name`, `company_url`, `company_website` | Company identity and links. |
| `trust_score`, `star_rating`, `total_reviews` | Company-level rating snapshot. |
| `star_rating_distribution`, `company_category`, `is_claimed` | Rating mix and profile context. |

Example:

```json
{
  "review_id": "6a5cbaa751748e7335938e91",
  "review_url": "https://www.trustpilot.com/reviews/6a5cbaa751748e7335938e91",
  "review_title": "Its a good way to collect feedback",
  "review_text": "Its a good way to collect feedback",
  "review_rating": 4,
  "review_language": "en",
  "review_date": "2026-07-19T13:53:11.000Z",
  "experience_date": "2026-07-19T00:00:00.000Z",
  "reviewer_name": "Raj Gopal Muralidhar",
  "reviewer_country": "IN",
  "reviewer_reviews_count": 2,
  "verified": true,
  "verification_level": "invited",
  "company_name": "Trustpilot",
  "trust_score": 4.4,
  "total_reviews": 519010
}
```

### Pricing

The Actor charges per published review plus one browser-session event per run. Empty and failed requests do not produce per-review charges.

| Tier | Per review | Per 1,000 reviews |
|---|---:|---:|
| FREE | $0.0020 | $2.00 |
| BRONZE | $0.0017 | $1.70 |
| SILVER | $0.0014 | $1.40 |
| GOLD | $0.0011 | $1.10 |

Browser session: $0.05 per run. Group companies and request more rows per run to spread that fixed WAF-clearance cost across the dataset.

### Reliability and limitations

- Only reviews publicly visible on Trustpilot are returned. Removed, private, or moderated-away content is not recoverable.
- Trustpilot controls the upstream website and its AWS WAF. The Actor retries with fresh sessions, but a persistent upstream block fails the run explicitly.
- Trustpilot's public web surface exposes ten pages per filter stream. Broad requests are split across all five star-rating streams for up to roughly 1,000 unique reviews per company; a single-star request can expose at most roughly 200.
- Filter combinations with no matching public reviews legitimately produce an empty dataset after the company is resolved.
- Monitoring state is keyed by companies and filters. Changing the monitored scope creates a different derived state unless you set `monitoringKey` explicitly.
- Reviewer country and verification fields reflect Trustpilot's public metadata and can be absent on older reviews.
- This Actor does not require a Trustpilot login or a short-lived mobile-app JWT.

### Integrations

Run from the Apify Console, REST API, Python or JavaScript client, schedules, webhooks, Make, Zapier, Google Sheets, or the Apify MCP server. Export datasets as JSON, CSV, Excel, XML, or RSS.

Pair it with [G2 Software Reviews Scraper](https://apify.com/thirdwatch/g2-software-reviews-scraper?fpr=9m2cd6) and [Capterra Software Reviews Scraper](https://apify.com/thirdwatch/capterra-software-reviews-scraper?fpr=9m2cd6) for broader software-reputation coverage.

More scrapers at [thirdwatch.dev](https://thirdwatch.dev).

# Actor input Schema

## `companyUrls` (type: `array`):

Up to 20 bare domains, company website URLs, or Trustpilot /review/ URLs. This field remains compatible with existing integrations.

## `startUrls` (type: `array`):

Optional Request List of company website or Trustpilot review URLs. You can combine this with companyUrls.

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

Maximum matching reviews returned for each company. The Actor keeps paginating when filters exclude rows.

## `ratings` (type: `array`):

Return only reviews with these ratings. Leave empty for all ratings.

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

Optional ISO 639-1 language codes such as en, de, fr, or es.

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

Optional ISO 3166-1 alpha-2 country codes such as US, GB, or DE.

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

Most recent is best for monitoring. Relevance prioritizes detailed reviews.

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

Limit reviews to a rolling publication window. Leave All time for no rolling cutoff.

## `startDate` (type: `string`):

Optional exact ISO date such as 2026-07-01. This overrides the rolling date range for client-side validation.

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

Return only reviews Trustpilot marks as verified.

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

Return only reviews that contain a public company response.

## `monitoringMode` (type: `boolean`):

Persist review IDs in a named key-value store. The first run creates the baseline; later identical runs return only unseen reviews.

## `monitoringKey` (type: `string`):

Optional stable name for a monitor shared across saved tasks or schedules. Otherwise the Actor derives one from companies and filters.

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

A residential proxy is required to establish the public Trustpilot browser session. Pagination then reuses that session through fast HTTP fetches.

## Actor input object example

```json
{
  "companyUrls": [
    "trustpilot.com"
  ],
  "startUrls": [],
  "maxReviewsPerCompany": 50,
  "ratings": [],
  "languages": [],
  "reviewerCountries": [],
  "sortBy": "recency",
  "dateRange": "all",
  "verifiedOnly": false,
  "repliesOnly": false,
  "monitoringMode": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# 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 = {
    "companyUrls": [
        "trustpilot.com"
    ],
    "maxReviewsPerCompany": 50,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "US"
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("thirdwatch/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 = {
    "companyUrls": ["trustpilot.com"],
    "maxReviewsPerCompany": 50,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "US",
    },
}

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

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/OurKuLlZ23z8eygBe/builds/agh4gM43OifGcwRAv/openapi.json
