# Trustpilot Reviews Scraper (`schnellscrapers/trustpilot-review-monitor`) Actor

Scrape Trustpilot reviews for any business, including ratings, titles, full text, reviewer country, verification status, published dates, company replies, and TrustScore. Filter by rating, language, date, or known review IDs for scheduled reputation monitoring.

- **URL**: https://apify.com/schnellscrapers/trustpilot-review-monitor.md
- **Developed by:** [Nate Schnell](https://apify.com/schnellscrapers) (community)
- **Categories:** Marketing, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 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

### What does Trustpilot Reviews Scraper do?

Trustpilot Reviews Scraper collects recent customer reviews for one or more businesses and returns one clean dataset row per review. It is made for reputation monitoring, competitor research, customer-feedback analysis, and scheduled alerts where a fresh review feed is more useful than a large historical export.

The default run reads the newest Trustpilot review page for each business. Increase the page and review limits for a bounded backfill, or provide known review IDs to write only new reviews in a recurring workflow.

### What data can you extract from Trustpilot?

- Review content — review ID, direct review URL, star rating, title, full text, published date, and experience date.
- Reviewer signals — reviewer name, country code, review count, language, verification status, verification level, and helpful votes.
- Business context — business name, domain, business ID, TrustScore, total review count, and the review source label.
- Response monitoring — company reply text and reply date when a business has responded.
- Workflow fields — `scrapedAt` and `isNew` for scheduled review checks and deduplication.

### How to use Trustpilot Reviews Scraper

1. Open the actor and add Trustpilot business URLs or domains in the input box, such as `https://www.trustpilot.com/review/amazon.com` or `nike.com`.
2. Set the maximum reviews and pages per business. The default is 20 reviews from one page.
3. Optionally choose star ratings, language, reviewer countries, verified reviews, reviews with replies, or a publication date range.
4. For incremental monitoring, paste IDs from an earlier dataset into Known review IDs and enable New reviews only.
5. Click Run. Download the dataset as JSON, CSV, or Excel, or read it through the Apify dataset API.

### How much does it cost?

This actor uses pay-per-event pricing: `$0.0025` per written review (`$2.50` per 1,000) plus `$0.04` per actor-start event. The actor-start event covers fixed browser and proxy usage; Apify may charge one start event per GB of run memory, with a minimum of one event. Filtered, duplicate, and dry-run rows are not written or charged as review events. The free tier is limited to 100 written reviews per run. Keep the default one-page monitor or use date and rating filters to control the number of pages opened.

### Input

The required `businessUrls` list accepts Trustpilot review URLs or bare company domains. Use `maxReviewsPerBusiness`, `maxPagesPerBusiness`, and `maxTotalReviews` as hard cost guards. Filters are applied before dataset writes, and `dryRun` lets you check matches without creating review rows.

```json
{
  "businessUrls": [
    { "url": "https://www.trustpilot.com/review/apify.com" },
    { "url": "https://www.trustpilot.com/review/nike.com" }
  ],
  "maxReviewsPerBusiness": 20,
  "reviewRatings": [1, 2],
  "language": "en",
  "newReviewsOnly": false
}
```

### Output

Each output row is a Trustpilot review with business context and monitoring fields. Dates are ISO 8601 timestamps when Trustpilot supplies them; nullable fields remain `null` when the page does not publish a value.

```json
{
  "reviewId": "6a8ebe3a0e5c1e17e1f84ad4",
  "reviewUrl": "https://www.trustpilot.com/reviews/6a8ebe3a0e5c1e17e1f84ad4",
  "businessUrl": "https://www.trustpilot.com/review/apify.com",
  "businessDomain": "apify.com",
  "businessName": "Apify",
  "trustScore": 4.8,
  "totalReviewCount": 707,
  "reviewerName": "Kondas Viktor",
  "reviewerCountry": "HU",
  "rating": 5,
  "reviewTitle": "MCP in Cursor actually runs my Actors",
  "reviewText": "I use the Apify MCP server from Cursor to call my own Store Actors as tools.",
  "publishedDate": "2026-08-26T12:21:46.000Z",
  "language": "en",
  "isVerified": false,
  "companyReply": null,
  "scrapedAt": "2026-08-26T16:58:31.790Z",
  "isNew": true
}
```

### Integrations

Use the [Apify API](https://docs.apify.com/api/v2) to start runs and read datasets. The output also works with [Make](https://www.make.com/en/integrations/apify), [n8n](https://n8n.io/integrations/apify/), Zapier, webhooks, and scheduled Apify Tasks.

### Related actors

- [Booking.com Review Monitor](https://apify.com/schnellscrapers/booking-review-monitor) — monitor recent hotel guest reviews, scores, stay details, and management replies.
- [Tripadvisor Reviews Scraper](https://apify.com/schnellscrapers/tripadvisor-review-monitor) — collect recent Tripadvisor reviews and owner responses for hospitality monitoring.

### FAQ

#### How does Trustpilot Reviews Scraper work?

It opens each public Trustpilot business review page, reads the structured review data rendered for that page, and follows numbered review pages until the configured caps or filters stop the run. Review IDs are deduplicated before rows are written.

#### Can I use Trustpilot Reviews Scraper as an API?

Yes. Start a run with the Apify API, wait for it to finish, and fetch the default dataset through its API URL. The Output tab also provides ready-to-use API examples.

#### Can I use Trustpilot Reviews Scraper in Python or Node.js?

Yes. Use the official `apify-client` package to start the actor and iterate over its dataset.

```js
const run = await apifyClient.actor('YOUR_USERNAME/trustpilot-review-monitor').call(input);
for await (const review of apifyClient.dataset(run.defaultDatasetId).iterateItems()) console.log(review);
```

#### What does this actor access?

It accesses public Trustpilot business review pages and the review information displayed on those pages. No Trustpilot login or API key is requested. A Residential Apify Proxy is enabled by default because the public site can present a browser challenge.

#### Is it legal to scrape Trustpilot?

This actor only reads publicly displayed review data. Whether a particular collection and reuse is permitted depends on your jurisdiction, agreements, and intended use, so review the rules that apply to your project before running it.

#### How do I monitor only new or negative reviews?

Schedule the actor, pass the IDs already present in your destination into `knownReviewIds`, and enable `newReviewsOnly`. For negative-review triage, set `reviewRatings` to `[1, 2]`; combine it with `startDate` for a recent window.

#### Why did a business return no rows?

The business may have no public reviews, the selected filters may exclude the current page, or Trustpilot may have returned a browser challenge. The run log identifies invalid inputs and pages that could not expose review data; try the default Residential proxy setting and a lower page cap.

### Your feedback

If a Trustpilot page changes or you need another review field or filter, please open an issue from the actor page with an example URL and the run ID. Feature requests for new monitoring workflows are welcome too.

# Actor input Schema

## `businessUrls` (type: `array`):

Add Trustpilot review URLs or company domains, one per row. Examples: `https://www.trustpilot.com/review/amazon.com` or `nike.com`.

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

Maximum review rows to write for each business. The default 20 matches one Trustpilot review page and is suited to scheduled checks.

## `maxPagesPerBusiness` (type: `integer`):

Maximum Trustpilot review pages to open for each business. Each page normally contains up to 20 reviews; keep this low for recent monitoring.

## `maxTotalReviews` (type: `integer`):

Hard cap on review rows matched across all businesses. Use 100 or less to stay within the free-tier run allowance.

## `reviewRatings` (type: `array`):

Keep only these Trustpilot star ratings, for example `[1, 2]` for critical feedback. Leave empty for all ratings.

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

Keep one ISO language code such as `en`, `de`, or `fr`. Leave empty for all languages.

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

Keep reviewer profile country codes such as `US`, `GB`, or `DE`. Leave empty for every country.

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

Write only reviews marked verified by Trustpilot.

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

Write only reviews that include a public company reply.

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

Keep reviews published on or after this UTC date in `YYYY-MM-DD` format. Leave empty for the newest page.

## `endDate` (type: `string`):

Keep reviews published on or before this UTC date in `YYYY-MM-DD` format. Leave empty for no upper date bound.

## `knownReviewIds` (type: `array`):

Paste review IDs already stored by your monitoring workflow. Rows include `isNew`; enable New reviews only to exclude these IDs.

## `newReviewsOnly` (type: `boolean`):

Write only review IDs that are not present in Known review IDs.

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

Residential Apify Proxy is used by default because Trustpilot may show a browser challenge. Set `useApifyProxy` to false to try a direct session; proxy and platform usage are billed according to your Apify plan.

## `dryRun` (type: `boolean`):

Fetch and filter reviews without writing dataset rows. Logs report matched and would-write counts.

## Actor input object example

```json
{
  "businessUrls": [
    {
      "url": "https://www.trustpilot.com/review/apify.com"
    }
  ],
  "maxReviewsPerBusiness": 20,
  "maxPagesPerBusiness": 1,
  "maxTotalReviews": 100,
  "reviewRatings": [],
  "language": "en",
  "reviewerCountries": [],
  "verifiedOnly": false,
  "repliesOnly": false,
  "startDate": "2026-01-01",
  "endDate": "2026-12-31",
  "knownReviewIds": [],
  "newReviewsOnly": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  },
  "dryRun": false
}
```

# Actor output Schema

## `records` (type: `string`):

Review rows with rating, title, text, published date, reviewer country, verification, company reply, and TrustScore.

# 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 = {
    "businessUrls": [
        {
            "url": "https://www.trustpilot.com/review/apify.com"
        }
    ],
    "language": "en",
    "startDate": "2026-01-01",
    "endDate": "2026-12-31"
};

// Run the Actor and wait for it to finish
const run = await client.actor("schnellscrapers/trustpilot-review-monitor").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 = {
    "businessUrls": [{ "url": "https://www.trustpilot.com/review/apify.com" }],
    "language": "en",
    "startDate": "2026-01-01",
    "endDate": "2026-12-31",
}

# Run the Actor and wait for it to finish
run = client.actor("schnellscrapers/trustpilot-review-monitor").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 '{
  "businessUrls": [
    {
      "url": "https://www.trustpilot.com/review/apify.com"
    }
  ],
  "language": "en",
  "startDate": "2026-01-01",
  "endDate": "2026-12-31"
}' |
apify call schnellscrapers/trustpilot-review-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,schnellscrapers/trustpilot-review-monitor"
        }
    }
}

```

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/kDLjdOzFI1n2vzb31/builds/3h6Wf0LFKcgrqApa3/openapi.json
