# Trustpilot Reviews Scraper API | $0.50/1K Reviews (`thewolves/trustpilot-reviews-scraper`) Actor

The Wolves proudly introduces the Trustpilot Review Scraper, an ideal tool for extracting reviews. It can gather 100-200 reviews per second, offering an extremely affordable rate of just $0.50 per 1,000 reviews. The most cost-effective option!

- **URL**: https://apify.com/thewolves/trustpilot-reviews-scraper.md
- **Developed by:** [The Wolves](https://apify.com/thewolves) (community)
- **Categories:** Lead generation, Automation, SEO tools
- **Stats:** 375 total users, 27 monthly users, 99.5% runs succeeded, 17 bookmarks
- **User rating**: 2.43 out of 5 stars

## Pricing

$0.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?

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

![](https://www.dropbox.com/scl/fi/0xigwqs1h133dq543l0kw/trustpilot-reviews.jpeg?rlkey=j4sdm6oc8i42pe92tkj1a0u2q\&dl=1)

## Trustpilot Reviews Scraper API: Extract Verified Company Reviews, Ratings & Customer Feedback at Scale

The **Trustpilot Reviews Scraper** by [The Wolves](https://apify.com/thewolves?fpr=yhdrb) is an Apify Actor that extracts customer reviews, star ratings, verification status, experience dates, reviewer profiles, and engagement data from any Trustpilot company page. This **trustpilot review scraper api** delivers 11 structured fields per review at speeds of **100-200 reviews per second** — with no proxy configuration required on your end.

**$0.50 per 1,000 reviews.** Scrape Trustpilot reviews from any company listing at scale. Every review includes the **verified/unverified distinction**, **experience date** (when the customer actually used the product, not just when they wrote the review), and a **likes count** that signals review visibility and social proof.

Built by **The Wolves** — a pack of data scientists with over a decade of experience in web scraping and API development. We build scrapers the way data teams actually need them: rich output, precise filtering, and pricing that scales.

> **Limitation:** The scraper extracts the first **10 pages per URL** (200 reviews per company URL, at 20 reviews per page). To collect more reviews from a single company, use multiple URL variations or page offsets where available.

**Pricing:** $0.50 per 1,000 reviews | **100-200 reviews/second** | **No proxy setup required**

***

### Table of Contents

1. [What Does the Trustpilot Reviews Scraper Do?](#what-does-the-trustpilot-reviews-scraper-do)
2. [Features and Capabilities](#features-and-capabilities)
3. [Pricing](#pricing)
4. [Input Parameters](#input-parameters)
5. [Output Format and Data Fields](#output-format-and-data-fields)
6. [Custom Map Function](#custom-map-function)
7. [Send Results to Notion, Todoist and More (MCP Connectors)](#send-results-to-notion-todoist-and-more-mcp-connectors)
8. [AI Agent Integration via MCP](#ai-agent-integration-via-mcp)
9. [The Wolves Scraper Pack](#the-wolves-scraper-pack)
10. [Demo Mode and Free Testing](#demo-mode-and-free-testing)
11. [Automated Scheduling and Monitoring](#automated-scheduling-and-monitoring)
12. [Quick Start Guide](#quick-start-guide)
13. [Use Cases and Industries](#use-cases-and-industries)
14. [Troubleshooting](#troubleshooting)
15. [Frequently Asked Questions](#frequently-asked-questions)
16. [Contact](#contact)

***

### What Does the Trustpilot Reviews Scraper Do?

**Trustpilot review extraction** is the automated process of collecting customer reviews, ratings, verification status, and reviewer metadata from Trustpilot company pages. Trustpilot hosts over 300 million reviews across 1 million+ business profiles — making it the largest dedicated business review platform, particularly strong in e-commerce, SaaS, financial services, and B2B.

The **Wolves Trustpilot Reviews Scraper** extracts structured review data that includes fields most scrapers overlook. Each review comes with a **verified/unverified flag**, an **experience date** (distinct from the publish date), **likes count**, and **reviewer country code** — data points that are critical for credible sentiment analysis and review quality assessment.

The distinction between experience date and publish date matters. A customer might use a product in January but write the review in March. When you're tracking post-launch sentiment or measuring support response impact, the experience date gives you the accurate timeline — not the publish date.

#### What You Get From Every Review

**Review Content and Rating**

- Full review body text and title
- Star rating (1–5)
- Verified or unverified status
- Likes count (social proof indicator)

**Date Intelligence**

- Experience date (when the customer used the product/service)
- Published date (when the review was posted)
- Updated date (when the review was last modified)

**Reviewer Profile**

- Reviewer name
- Country code
- Unique reviewer ID

***

### Features and Capabilities

#### Input Flexibility

| Input Type                 | Example                                       | Best For                               |
| -------------------------- | --------------------------------------------- | -------------------------------------- |
| **Trustpilot Company URL** | `https://www.trustpilot.com/review/apify.com` | Targeting a specific company's reviews |

#### Core Capabilities

- **High-Speed Extraction** — 100-200 reviews per second
- **Verified Status** — Distinguish between verified and unverified reviews
- **Experience Date Tracking** — Know when the customer actually used the product, not just when they wrote the review
- **Likes Count** — Measure review visibility and social proof
- **Triple Date Fields** — Experience date, publish date, and update date per review
- **Reviewer Country** — Country code for geographic analysis
- **No Proxy Required** — The scraper handles proxy rotation internally
- **Custom Map Function** — Transform output with custom JavaScript before saving
- **Multiple Export Formats** — JSON, CSV, Excel direct download
- **API Integration** — RESTful API for Python, Node.js, or any HTTP client

#### Known Limitations

- **200 reviews per URL** — The scraper extracts the first 10 pages per URL (20 reviews per page = 200 reviews). This is a per-URL limit, not a total limit — you can provide multiple URLs to collect more data.

***

### Pricing

#### Pay-Per-Review Pricing

No subscriptions, no rentals, no minimum commitments. You pay only for the reviews you extract:

| Metric                  | Price   |
| ----------------------- | ------- |
| **Per 1,000 reviews**   | $0.50   |
| **Per review**          | $0.0005 |
| **Per 100,000 reviews** | $50.00  |

> **Example:** Extracting 200 reviews from 25 companies (5,000 reviews total) costs **$2.50**. Monitoring your top competitors monthly on Trustpilot keeps costs predictable and low.

**Free users:** Limited to **5 runs per month**, each capped at **10 items**.

***

### Input Parameters

| Field               | Type   | Description                                                                                   | Default    |
| ------------------- | ------ | --------------------------------------------------------------------------------------------- | ---------- |
| `startUrls`         | array  | Trustpilot company review URLs. The scraper extracts the first 10 pages (200 reviews) per URL | `[]`       |
| `maxItems`          | number | Maximum number of reviews to output                                                           | `Infinity` |
| `customMapFunction` | string | JavaScript function to transform each review object (transformation only, not filtering)      | `null`     |
| `outputConnector`   | string | MCP connector to deliver the results to — pick one (see [Send Results to Notion, Todoist and More (MCP Connectors)](#send-results-to-notion-todoist-and-more-mcp-connectors)). | `null`     |
| `deliverTarget`     | string | Where the connector writes — paste the URL or ID (Notion example: `https://www.notion.so/My-Posts-24f8a1b2c3d44e5f8a9b0c1d2e3f4a5b`); some services need none. | `null`     |
| `deliverMode`       | string | `perPost` (one record per item) or `summary` (one roll-up per run).                           | `perPost`  |
| `deliverMaxItems`   | number | Optional cap on how many records `perPost` delivers (ignored in `summary`).                   | `null`     |

#### Input Examples

**Single Company — All Available Reviews:**

```json
{
    "startUrls": [
        "https://www.trustpilot.com/review/apify.com"
    ],
    "maxItems": 200
}
```

**Multiple Companies — Competitive Analysis:**

```json
{
    "startUrls": [
        "https://www.trustpilot.com/review/apify.com",
        "https://www.trustpilot.com/review/octoparse.com",
        "https://www.trustpilot.com/review/parsehub.com"
    ],
    "maxItems": 600
}
```

**Limited Output — Quick Sample:**

```json
{
    "startUrls": [
        "https://www.trustpilot.com/review/apify.com"
    ],
    "maxItems": 50
}
```

### Output Format and Data Fields

Each extracted review is a structured JSON object containing 11 fields. Here is a sample:

```json
{
    "id": "663c7bd3350fc6a8eb8960b7",
    "user": {
        "name": "User Name",
        "countryCode": "FR",
        "id": "669c7bcbc225536a02f1f7e6"
    },
    "experiencedDate": "2024-05-07T00:00:00.000Z",
    "updatedDate": "2024-05-12T00:00:00.000Z",
    "publishedDate": "2024-05-09T09:31:32.000Z",
    "title": "Great customer care!",
    "body": "Awesome! Apify customer support is what set them apart from the competition. Love the tool and love the fact that they are customer-centric.",
    "rating": 5,
    "likes": 120,
    "isVerified": false
}
```

#### Complete Field Reference

| Field              | Type    | Description                                              |
| ------------------ | ------- | -------------------------------------------------------- |
| `id`               | string  | Unique Trustpilot review identifier                      |
| `user.name`        | string  | Reviewer's display name                                  |
| `user.countryCode` | string  | Reviewer's country code (e.g., FR, US, GB)               |
| `user.id`          | string  | Unique Trustpilot reviewer identifier                    |
| `experiencedDate`  | string  | ISO 8601 date when the customer used the product/service |
| `updatedDate`      | string  | ISO 8601 date when the review was last modified          |
| `publishedDate`    | string  | ISO 8601 date when the review was published              |
| `title`            | string  | Review title/headline                                    |
| `body`             | string  | Full review body text                                    |
| `rating`           | number  | Star rating (1-5)                                        |
| `likes`            | number  | Number of likes/upvotes from other users                 |
| `isVerified`       | boolean | Whether the review is verified by Trustpilot             |

#### Data Fields by Use Case

| Use Case                             | Key Fields                                                                      |
| ------------------------------------ | ------------------------------------------------------------------------------- |
| **B2B/SaaS Sentiment Analysis**      | `body`, `title`, `rating`, `experiencedDate`, `isVerified`                      |
| **Review Credibility Assessment**    | `isVerified`, `likes`, `user.countryCode`, `experiencedDate` vs `publishedDate` |
| **Competitive Benchmarking**         | `rating`, `body`, `title`, `publishedDate`, `isVerified`                        |
| **Geographic Market Analysis**       | `user.countryCode`, `rating`, `body`, `experiencedDate`                         |
| **Customer Support Impact Tracking** | `experiencedDate`, `publishedDate`, `rating`, `body`, `updatedDate`             |
| **NLP Training Data**                | `body`, `title`, `rating` (as label), `isVerified` (as quality filter)          |

#### Why Three Date Fields Matter

| Date Field        | What It Tells You                           | Best For                                         |
| ----------------- | ------------------------------------------- | ------------------------------------------------ |
| `experiencedDate` | When the customer actually used the product | Post-launch tracking, support impact measurement |
| `publishedDate`   | When the review was written                 | Monitoring review volume trends                  |
| `updatedDate`     | When the review was last edited             | Detecting sentiment changes over time            |

> **Example:** A customer experiences a product on January 15, writes a 2-star review on February 10, then updates it to 4 stars on March 5 after receiving great support. All three dates are captured — enabling you to measure the full customer journey and support impact.

***

### Custom Map Function

Transform each review before it's saved to the dataset. The `customMapFunction` parameter accepts a JavaScript function that reshapes every review object. Use this to flatten nested structures, rename properties, or compute derived values.

**Important:** The custom map function is for **transformation only**, not filtering. Do not use it for filtering purposes.

#### Example: Flatten for Spreadsheet Analysis

```javascript
(review) => ({
    id: review.id,
    reviewer: review.user?.name,
    country: review.user?.countryCode,
    rating: review.rating,
    title: review.title,
    body: review.body,
    experienceDate: review.experiencedDate,
    publishDate: review.publishedDate,
    updatedDate: review.updatedDate,
    likes: review.likes,
    verified: review.isVerified
})
```

#### Example: Extract for Cross-Platform Comparison

```javascript
(review) => ({
    platform: "Trustpilot",
    rating: review.rating,
    text: review.body,
    title: review.title,
    date: review.publishedDate,
    reviewer: review.user?.name,
    country: review.user?.countryCode,
    verified: review.isVerified
})
```

***

### Send Results to Notion, Todoist and More (MCP Connectors)

Skip the manual exports — the Trustpilot Reviews Scraper can deliver its results directly into the tools you already work in, through [Apify MCP Connectors](https://apify.com/store/collections/mcp-connectors). This is the reverse of [AI Agent Integration via MCP](#ai-agent-integration-via-mcp) below: there an AI agent runs this Actor; here the Actor writes its results into your own tools.

1. Authorize a connector (Notion, Todoist, or any service whose MCP server offers non-destructive write tools) once in [Console → Settings → API & Integrations → MCP connectors](https://console.apify.com/settings/integrations).
2. Pick it from the **Send results to Notion, Todoist, …** dropdown.
3. Fill in where and how to write:
   - **Destination target** — paste the URL or ID (Notion example: `https://www.notion.so/My-Posts-24f8a1b2c3d44e5f8a9b0c1d2e3f4a5b`); share it with your connector first via Notion's **•••  → Connections** menu. For structured columns use a **page** URL (the Actor builds the database for you) or a database that **already has columns** — an empty database only receives titles. (Some services need no target.)
   - **Write mode** — `perPost` writes one record per review; `summary` writes a single roll-up for the run.
   - **Max records to deliver** *(optional)* — cap on how many records `perPost` delivers.

**Notion, structured like a spreadsheet:** for a table of typed columns, point the target at a Notion **page** — the Actor auto-creates a database from the data, one matching, correctly-typed column per field (URL, number, date, text). Pointing at an **existing database** fills the columns it already has (matched by name); an **empty database** receives only the title, and the rest of each record goes to the row body — the connector can't add columns to an existing database without destructive access it never requests. Nested fields are flattened into columns too — a `user` object becomes `user.name`, `user.countryCode` and `user.id` — so everything is sortable and filterable in the grid. Fields that don't fit a column go to the row's page body, so nothing is lost.

Your credentials stay yours: the Actor talks to your services exclusively through your own authorized connector and only ever uses non-destructive write tools — it cannot delete or overwrite anything you already have. Delivery is best-effort and runs after the scrape: if a connector is misconfigured or a delivery fails, your run still finishes normally with all results intact — the failure is reported in the run log, never by failing the run. If the run is about to hit its timeout, delivery stops early so the run still succeeds, and the log tells you how many records were delivered.

***

### AI Agent Integration via MCP

Apify provides a hosted **Model Context Protocol (MCP) server** at `mcp.apify.com` that allows AI agents and LLM-based applications to discover and run Apify Actors as tools — including this Trustpilot Reviews Scraper.

#### What This Means

If you're building AI agents using Claude Desktop, VS Code with MCP support, or any framework that implements the MCP specification, you can give your agent the ability to extract Trustpilot reviews autonomously. The agent can call this scraper as a tool, receive structured JSON results with verification status and experience dates, and use them in downstream analysis.

#### How to Connect

Add this scraper to your MCP client configuration:

```
https://mcp.apify.com?tools=thewolves/trustpilot-reviews-scraper
```

Or use the CLI for local development:

```bash
npx @apify/actors-mcp-server --tools thewolves/trustpilot-reviews-scraper
```

#### Use Cases for AI Agent Integration

- **Automated reputation monitoring** — An AI agent extracts Trustpilot reviews weekly, summarizes sentiment trends, and flags companies where ratings are dropping or where negative verified reviews are spiking.
- **Competitive intelligence pipelines** — Extract reviews from competitor Trustpilot pages, compare verified vs unverified review ratios, and generate strategic reports automatically.
- **Multi-platform analysis** — Combine Trustpilot reviews with TripAdvisor or Google Play reviews in a single agent workflow for unified cross-platform reputation reporting.

For full setup instructions, see the [Apify MCP documentation](https://docs.apify.com/platform/integrations/mcp).

***

### The Wolves Scraper Pack

All tools below are built and maintained by [The Wolves](https://apify.com/thewolves?fpr=yhdrb) — a pack of data scientists with over a decade of experience building high-performance scrapers and APIs. Powerful, easy to use, and priced for scale.

| Tool                                                                                                 | Platform        | Price            | Best For                                        |
| ---------------------------------------------------------------------------------------------------- | --------------- | ---------------- | ----------------------------------------------- |
| **Trustpilot Reviews Scraper**                                                                       | Trustpilot      | $0.50/1K reviews | B2B/SaaS reputation analysis **(You are here)** |
| **[TripAdvisor Reviews Scraper](https://apify.com/thewolves/tripadvisor-reviews-scraper?fpr=yhdrb)** | TripAdvisor     | $0.50/1K reviews | Hospitality intelligence                        |
| **[Google Play Reviews Scraper](https://apify.com/thewolves/google-play-reviews-scraper?fpr=yhdrb)** | Google Play     | $0.10/1K reviews | Android app intelligence                        |
| **[App Store Reviews Scraper](https://apify.com/thewolves/appstore-reviews-scraper?fpr=yhdrb)**      | Apple App Store | $0.10/1K reviews | iOS app intelligence                            |

#### What Makes The Wolves Trustpilot Scraper Different

| Capability                     | This Tool                  | Basic Alternatives  |
| ------------------------------ | -------------------------- | ------------------- |
| **Verified/unverified status** | Per-review flag            | Not available       |
| **Experience date**            | Separate from publish date | Publish date only   |
| **Updated date**               | Tracks review edits        | Not available       |
| **Likes count**                | Social proof metric        | Not available       |
| **Reviewer country**           | Country code per reviewer  | Not available       |
| **Proxy management**           | Handled internally         | User must configure |
| **Speed**                      | 100-200 reviews/second     | Varies              |

***

### Demo Mode and Free Testing

Free plan users can test this **Trustpilot reviews scraper** in Demo Mode. **Free users can run the actor up to 5 times per month**, with each run capped at a maximum of **10 items** — just enough to test it out. Demo Mode is designed to validate the output format, data quality, and field coverage before committing to larger runs.

**Demo Mode Limitations:**

- Maximum 5 runs per month
- Maximum 10 reviews per run
- API access not available on Free plan
- Full functionality requires a [paid Apify plan](https://apify.com/pricing?fpr=yhdrb)

**How to Test:**

- Run the scraper with `maxItems: 10` to preview the output structure
- Verify that `isVerified`, `experiencedDate`, and `likes` fields are present
- Test the `customMapFunction` with a sample transformation
- Confirm the output matches your pipeline requirements

***

### Automated Scheduling and Monitoring

Trustpilot reviews appear continuously. For **e-commerce brands**, **SaaS companies**, and **reputation management agencies**, automated recurring runs ensure you capture new customer feedback as it's posted.

#### Why Schedule Review Extraction?

- **Brand monitoring** — Detect negative reviews early and respond before they accumulate
- **Competitive tracking** — Monitor competitor Trustpilot pages weekly for rating shifts
- **Product launch tracking** — Use `experiencedDate` to measure customer sentiment after releases
- **Support impact analysis** — Track whether support improvements correlate with better reviews over time
- **Agency reporting** — Automated data collection for client reputation dashboards

#### How to Set Up Scheduled Runs

1. Open the Actor in Apify Console
2. Configure your input parameters (startUrls, maxItems)
3. Click **Schedule** and set frequency (daily, weekly, monthly)
4. Optionally add a **webhook** to push new data to your pipeline

#### Webhook Integration

Combine scheduled runs with webhooks to build fully automated review monitoring:

```
Scheduled Run -> New Reviews Extracted -> Webhook fires -> Your system receives data
```

Use webhooks to trigger:

- Slack alerts for 1-star verified reviews requiring immediate response
- Database updates with new review data
- Dashboard refreshes for reputation analytics platforms
- Email digests summarizing weekly customer sentiment trends

***

### Quick Start Guide

#### For Non-Technical Users (Apify Console)

1. Go to **[Trustpilot Reviews Scraper](https://apify.com/thewolves/trustpilot-reviews-scraper?fpr=yhdrb)** on Apify
2. Click **Try for free**
3. Paste a Trustpilot company URL (e.g., `https://www.trustpilot.com/review/apify.com`) into the `startUrls` field
4. Set `maxItems` (up to 200 per URL)
5. Click **Start** and wait for results
6. **Export Trustpilot reviews to CSV** from the Storage tab

#### For Developers (Python API)

```python
from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("thewolves/trustpilot-reviews-scraper").call(run_input={
    "startUrls": [
        "https://www.trustpilot.com/review/apify.com"
    ],
    "maxItems": 200
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
```

#### For Competitive Analysis (Multi-Company)

```json
{
    "startUrls": [
        "https://www.trustpilot.com/review/COMPANY_A.com",
        "https://www.trustpilot.com/review/COMPANY_B.com",
        "https://www.trustpilot.com/review/COMPANY_C.com"
    ],
    "maxItems": 600
}
```

> Extract 200 reviews from each competitor in a single run. Use the `customMapFunction` to add a `company` field derived from the URL for easy segmentation in analysis.

#### For Data Scientists (Verified Review Analysis)

Use the `customMapFunction` to separate verified from unverified reviews and compute review age:

```javascript
(review) => ({
    rating: review.rating,
    text: review.body,
    verified: review.isVerified,
    country: review.user?.countryCode,
    experienceDate: review.experiencedDate,
    publishDate: review.publishedDate,
    daysBetweenExperienceAndReview: Math.round(
        (new Date(review.publishedDate) - new Date(review.experiencedDate)) / (1000 * 60 * 60 * 24)
    ),
    likes: review.likes
})
```

> This produces a flat dataset with a computed `daysBetweenExperienceAndReview` field — useful for analyzing whether delayed reviews tend to be more positive or negative.

***

### Use Cases and Industries

#### E-Commerce Reputation Monitoring

Extract Trustpilot reviews from your own company page and competitor pages to track customer satisfaction over time. The **verified/unverified distinction** is critical for e-commerce — verified reviews carry more weight with potential customers and are more reliable for internal analytics. Track the `likes` count to identify which negative reviews are most visible to potential buyers.

**Key fields:** `rating`, `body`, `isVerified`, `likes`, `publishedDate`, `user.countryCode`

#### SaaS and B2B Customer Feedback

Trustpilot is increasingly used by SaaS companies and B2B service providers. Extract reviews to understand customer pain points, measure satisfaction after product updates, and identify feature requests. The `experiencedDate` field lets you correlate reviews with specific product releases or service changes.

**Key fields:** `body`, `title`, `rating`, `experiencedDate`, `isVerified`

#### Competitive Benchmarking

Extract reviews from multiple companies in the same industry to compare customer sentiment, identify competitive advantages, and discover common pain points. Run multi-company extractions in a single scraper run. The `isVerified` flag helps ensure you're comparing apples to apples — verified reviews only.

**Key fields:** `rating`, `body`, `title`, `isVerified`, `publishedDate`

#### Geographic Market Analysis

Use the `user.countryCode` field to segment reviews by geography. Understand how customer satisfaction varies across markets. A SaaS product might have excellent reviews from US customers but complaints about localization from European markets — data that drives targeted product improvements.

**Key fields:** `user.countryCode`, `rating`, `body`, `experiencedDate`

#### Customer Support Impact Measurement

The triple date fields (`experiencedDate`, `publishedDate`, `updatedDate`) enable sophisticated support impact analysis. Track whether customers who received support update their reviews to higher ratings. Measure the time gap between experience and review publication — shorter gaps often correlate with stronger emotional responses (both positive and negative).

**Key fields:** `experiencedDate`, `publishedDate`, `updatedDate`, `rating`, `body`

#### NLP and Sentiment Analysis Training

Extract Trustpilot reviews with ratings as sentiment labels for training classifiers. The `isVerified` field serves as a quality filter — verified reviews tend to be more substantive and representative. The `likes` count indicates which reviews resonate with the community, useful for weighting training examples.

**Key fields:** `body`, `title`, `rating`, `isVerified`, `likes`, `user.countryCode`

***

### Troubleshooting

#### Common Issues and Solutions

| Issue                                     | Cause                                      | Solution                                                                                                   |
| ----------------------------------------- | ------------------------------------------ | ---------------------------------------------------------------------------------------------------------- |
| **Only 200 reviews returned**             | 10-page per-URL limit                      | This is a per-URL limit. Provide additional URLs to collect more reviews                                   |
| **Getting more results than requested**   | High-speed extraction overshoots slightly  | You are billed only for the number you requested, not the extra results delivered                          |
| **Missing data in output**                | Results stored in Apify dataset            | Navigate to the "Storage" tab and select "Download the results" or "Open in a New Tab"                     |
| **Empty results**                         | Invalid URL format                         | Ensure you're using a valid Trustpilot company URL (e.g., `https://www.trustpilot.com/review/company.com`) |
| **Some reviews show isVerified as false** | Not all reviews are verified by Trustpilot | This is accurate data — not all reviewers complete the verification process                                |

#### Performance Tips

- **Start small:** Test with `maxItems: 10` (Demo Mode) to validate your setup before scaling
- **Multiple companies in one run:** Provide multiple URLs in the `startUrls` array for competitive analysis
- **Flatten nested data:** Use the `customMapFunction` to produce flat, analysis-ready output
- **Monitor billing:** You are billed per review extracted, not per `maxItems` setting — if fewer reviews exist, you pay only for what's delivered
- **Schedule strategically:** Run weekly extractions with the same URLs to build a time-series dataset of review trends

***

### Frequently Asked Questions

#### What Trustpilot review data can I extract?

Extract **review text**, **titles**, **star ratings (1-5)**, **verified/unverified status**, **experience dates**, **publish dates**, **update dates**, **reviewer names**, **reviewer country codes**, **reviewer IDs**, and **likes count** — all in structured JSON or CSV format.

#### Can I export Trustpilot reviews to CSV?

Yes. **Download Trustpilot reviews** directly from Apify Console in JSON, CSV, or Excel format. Use the `customMapFunction` to flatten nested objects (like the user profile) into a single-row-per-review format ideal for spreadsheets.

#### Why is there a 200-review limit per URL?

The scraper extracts the first **10 pages per URL** (20 reviews per page = 200 reviews). This is a per-URL limit, not a total limit. You can provide multiple company URLs in the `startUrls` array to collect reviews from many companies in a single run.

#### What does the isVerified field mean?

The `isVerified` field indicates whether Trustpilot has verified that the reviewer actually had an experience with the company. Verified reviews are generally more credible and are given higher visibility on Trustpilot. This field is valuable for filtering training data or weighting sentiment analysis results.

#### What is the difference between experiencedDate and publishedDate?

The `experiencedDate` is when the customer actually used the product or service. The `publishedDate` is when they wrote and posted the review. These can differ by days, weeks, or even months. For post-launch sentiment tracking or support impact analysis, the `experiencedDate` provides the accurate timeline.

#### Can I scrape reviews from multiple companies at once?

Yes. Provide multiple Trustpilot company URLs in the `startUrls` array (e.g., `["https://www.trustpilot.com/review/company-a.com", "https://www.trustpilot.com/review/company-b.com"]`). Each company's reviews are extracted within a single Actor run.

#### Can I use Python to scrape Trustpilot reviews?

Yes. Full Python support via the Apify Client library. See the [Quick Start Guide](#quick-start-guide) for Python integration with `client.actor("thewolves/trustpilot-reviews-scraper")`.

#### Can AI agents use this scraper?

Yes. Through Apify's **Model Context Protocol (MCP) server**, AI agents built with Claude Desktop, VS Code, or any MCP-compatible framework can call this scraper as a tool. This enables automated reputation monitoring, competitive analysis, and multi-platform review pipelines. See [AI Agent Integration via MCP](#ai-agent-integration-via-mcp) for setup details.

#### How fast is the extraction?

**100-200 reviews per second**, depending on the company listing and Trustpilot's response times. This scraper is optimized for maximum throughput with internal proxy management.

#### Do I need to set up proxies?

No. This scraper handles all proxy rotation internally. You don't need to configure, purchase, or manage any proxy infrastructure.

#### Does this extract company TrustScores?

This scraper focuses on **individual reviews**, not company-level aggregate data. Each review includes the reviewer's star rating (1-5), but the overall company TrustScore is not extracted per review.

***

### Contact

**Built by [The Wolves](https://apify.com/thewolves?fpr=yhdrb)** — a pack of data scientists with over a decade of experience building scrapers and APIs. We build them powerful, we build them fast, and we price them fair.

For questions, feature requests, or support:

- **Discord:** Reach out to [Tommy the Wolf](https://discordapp.com/users/tommy_the_wolf) — always available

***

**Ready to extract Trustpilot review data at scale?** At $0.50 per 1,000 reviews with 100-200 reviews/second, verified/unverified review tracking, triple date fields, and reviewer country data, this **Trustpilot Reviews Scraper API** by [The Wolves](https://apify.com/thewolves?fpr=yhdrb) delivers the data B2B and e-commerce teams need for credible reputation intelligence. Start scraping today.

# Actor input Schema

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

URLs to start with. It should be a detail URL

## `maxItems` (type: `integer`):

Maximum number of items that you want as output.

## `customMapFunction` (type: `string`):

Function that takes each of the objects as argument and returns data that will be mapped by the function itself.

## `outputConnector` (type: `string`):

Pick an MCP connector you authorized in Console → Settings → API & Integrations → MCP connectors (e.g. Notion, Todoist — any service whose MCP server offers non-destructive write tools works best-effort). The scraped results are written through your own connector — the Actor never sees your third-party credentials. Only non-destructive write tools are used; it can never delete or overwrite your existing data.

## `deliverTarget` (type: `string`):

Where to write into the connector — paste the URL or ID. Notion example: https://www.notion.so/My-Posts-24f8a1b2c3d44e5f8a9b0c1d2e3f4a5b. Leave empty for services that need no target (e.g. Todoist Inbox, Slack). For Notion, share the page or database with your connector first (Notion's ••• → Connections menu), and point at a PAGE for structured columns (the Actor builds the database for you) — an empty database receives only the title (the rest of each record goes to the row's body).

## `deliverMode` (type: `string`):

perPost writes one record per scraped item; summary writes a single roll-up for the run.

## `deliverMaxItems` (type: `integer`):

Cap on how many records perPost mode writes to the connector; ignored in summary mode. Leave empty to deliver everything scraped.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.trustpilot.com/review/kindlewritinghub.com",
    "https://www.trustpilot.com/review/www.vans.com",
    "https://www.trustpilot.com/review/shop.missha-deutschland.de",
    "https://www.trustpilot.com/review/dior.co.uk",
    "https://www.trustpilot.com/review/www.barxparx.com",
    "https://www.trustpilot.com/review/oshalafarm.com",
    "https://www.trustpilot.com/review/www.nomador.com?sort=recency",
    "https://www.trustpilot.com/review/apify.com",
    "https://www.trustpilot.com/review/swiftpromining.org",
    "https://www.trustpilot.com/review/couplehoodies.com",
    "https://www.trustpilot.com/review/rosecjewels.com",
    "https://www.trustpilot.com/review/jerseywatch.com"
  ],
  "maxItems": 1000,
  "customMapFunction": "(object) => { return {...object} }",
  "deliverMode": "perPost"
}
```

# Actor output Schema

## `overview` (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 = {
    "startUrls": [
        "https://www.trustpilot.com/review/kindlewritinghub.com",
        "https://www.trustpilot.com/review/www.vans.com",
        "https://www.trustpilot.com/review/shop.missha-deutschland.de",
        "https://www.trustpilot.com/review/dior.co.uk",
        "https://www.trustpilot.com/review/www.barxparx.com",
        "https://www.trustpilot.com/review/oshalafarm.com",
        "https://www.trustpilot.com/review/www.nomador.com?sort=recency",
        "https://www.trustpilot.com/review/apify.com",
        "https://www.trustpilot.com/review/swiftpromining.org",
        "https://www.trustpilot.com/review/couplehoodies.com",
        "https://www.trustpilot.com/review/rosecjewels.com",
        "https://www.trustpilot.com/review/jerseywatch.com"
    ],
    "maxItems": 1000,
    "customMapFunction": (object) => { return {...object} }
};

// Run the Actor and wait for it to finish
const run = await client.actor("thewolves/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 = {
    "startUrls": [
        "https://www.trustpilot.com/review/kindlewritinghub.com",
        "https://www.trustpilot.com/review/www.vans.com",
        "https://www.trustpilot.com/review/shop.missha-deutschland.de",
        "https://www.trustpilot.com/review/dior.co.uk",
        "https://www.trustpilot.com/review/www.barxparx.com",
        "https://www.trustpilot.com/review/oshalafarm.com",
        "https://www.trustpilot.com/review/www.nomador.com?sort=recency",
        "https://www.trustpilot.com/review/apify.com",
        "https://www.trustpilot.com/review/swiftpromining.org",
        "https://www.trustpilot.com/review/couplehoodies.com",
        "https://www.trustpilot.com/review/rosecjewels.com",
        "https://www.trustpilot.com/review/jerseywatch.com",
    ],
    "maxItems": 1000,
    "customMapFunction": "(object) => { return {...object} }",
}

# Run the Actor and wait for it to finish
run = client.actor("thewolves/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 '{
  "startUrls": [
    "https://www.trustpilot.com/review/kindlewritinghub.com",
    "https://www.trustpilot.com/review/www.vans.com",
    "https://www.trustpilot.com/review/shop.missha-deutschland.de",
    "https://www.trustpilot.com/review/dior.co.uk",
    "https://www.trustpilot.com/review/www.barxparx.com",
    "https://www.trustpilot.com/review/oshalafarm.com",
    "https://www.trustpilot.com/review/www.nomador.com?sort=recency",
    "https://www.trustpilot.com/review/apify.com",
    "https://www.trustpilot.com/review/swiftpromining.org",
    "https://www.trustpilot.com/review/couplehoodies.com",
    "https://www.trustpilot.com/review/rosecjewels.com",
    "https://www.trustpilot.com/review/jerseywatch.com"
  ],
  "maxItems": 1000,
  "customMapFunction": "(object) => { return {...object} }"
}' |
apify call thewolves/trustpilot-reviews-scraper --silent --output-dataset

```

## MCP server setup

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