# Trustpilot Review Scraper - Ratings, Replies & Filters (`scrapers-hub/trustpilot-review-scraper-ratings-replies-filters`) Actor

Trustpilot Review Scraper extracts business reviews with star rating, replies, verified-only and language filters, date ranges and sorting. ⭐ For reputation monitoring, competitor benchmarking and customer sentiment analysis.

- **URL**: https://apify.com/scrapers-hub/trustpilot-review-scraper-ratings-replies-filters.md
- **Developed by:** [Scrapers Hub](https://apify.com/scrapers-hub) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 80.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.99 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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 Review Scraper – Export Reviews, Ratings, Replies & Verified Filters

The **Trustpilot Review Scraper** extracts customer reviews from any Trustpilot business page — review text, star rating, reviewer name and country, experienced and published dates, verification status, likes, and the company's reply. Use it to **scrape Trustpilot reviews** for reputation management, sentiment analysis, and competitor research, then export straight to CSV, Excel, or JSON. 📊

No login, no API key, no browser extension. Point it at a Trustpilot business URL, apply the filters you need, and get up to 31 structured fields per review.

***

### 📊 What Data Can You Extract with This Trustpilot Scraper?

This Trustpilot review scraper returns **31 fields per review**, organised into five useful groups:

| Data Category | Fields You Get |
|---|---|
| 💬 **Review Content** | `title`, `text`, `rating`, `language`, `likes`, `source` |
| 👤 **Reviewer Profile** | `reviewerName`, `reviewerCountry`, `reviewerNumberOfReviews`, `consumer`, `location` |
| ✅ **Verification Status** | `isVerified`, `verificationLevel`, `labels`, `filtered`, `isPending` |
| 🗓️ **Dates & Timeline** | `publishedDate`, `experiencedDate`, `updatedDate`, `dates`, `scrapedAt` |
| 🏢 **Business & Reply** | `reply`, `businessName`, `businessUrl`, `url`, `productReviews` |

The distinction between `publishedDate` and `experiencedDate` matters more than most people expect — the gap between when something happened and when someone wrote about it is a strong signal of how strongly they felt.

***

### 🌟 Key Features of the Trustpilot Review Scraper

| Feature | Description |
|---|---|
| ⭐ **Star Rating Filter** | Pull only 1-star complaints or only 5-star praise — or any combination. |
| 💬 **Company Replies Included** | Capture the business response alongside each review to measure reply rate and tone. |
| ✅ **Verified Reviews Only** | Filter to verified buyers to strip unverified noise out of your analysis. |
| 📅 **Date Range Filtering** | Scope reviews to the last month, 3 months, 6 months, year, or all time. |
| 🌐 **Language Filtering** | Isolate reviews in a single language for cleaner sentiment scoring. |
| 🔀 **Sort Control** | Sort by recency or relevance to match how visitors actually read the page. |
| ♾️ **Unlimited Review Scraping** | Set `maxResults` to `0` to export a company's entire review history. |
| 👤 **Reviewer Metadata** | Reviewer name, country, and total review count for credibility weighting. |
| 📤 **Export Anywhere** | JSON, CSV, Excel, XML, or straight through the Apify API. |

***

### 🚀 Why Choose This Trustpilot Scraper?

**Filters run server-side, not after the fact.** Most Trustpilot scrapers dump everything and leave you to filter in a spreadsheet. This one applies star rating, date range, language, verification, and reply filters during the scrape — so you pay for the reviews you actually want.

**Replies are first-class data.** The `reply` field captures the business response, which is what lets you measure response rate and time-to-reply. For reputation work, that's often more actionable than the reviews themselves.

**Reviewer credibility signals included.** `reviewerNumberOfReviews` and `verificationLevel` let you weight a one-review account differently from a prolific verified reviewer — essential when you're trying to spot review manipulation.

**No browser extension, no manual clicking.** Chrome extensions require you to sit on the page and scroll. This Actor runs headlessly on a schedule and paginates automatically.

***

### 📥 Input

```json
{
  "businessUrl": "https://www.trustpilot.com/review/www.nordvpn.com",
  "maxResults": 1000,
  "sort": "recency",
  "starRating": [1, 2],
  "dateRange": "all",
  "language": "all",
  "verifiedOnly": false,
  "repliesOnly": false
}
```

#### 🔧 Trustpilot Scraper Input Fields

| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| `businessUrl` | `string` | ✅ Yes | – | Trustpilot business page URL to scrape. |
| `maxResults` | `integer` | ❌ No | `1000` | Max reviews to collect. Use `0` for all reviews. |
| `sort` | `string` | ❌ No | `recency` | Sort order for the review feed. |
| `starRating` | `array` | ❌ No | `[]` | Only keep reviews with these star ratings. |
| `dateRange` | `string` | ❌ No | `all` | Restrict reviews to a time window. |
| `language` | `string` | ❌ No | `all` | Only keep reviews in this language. |
| `verifiedOnly` | `boolean` | ❌ No | `false` | Return only verified reviews. |
| `repliesOnly` | `boolean` | ❌ No | `false` | Return only reviews the company replied to. |

#### 💡 Input Examples

**Export every negative review for complaint analysis:**

```json
{ "businessUrl": "https://www.trustpilot.com/review/yourcompany.com",
  "starRating": [1, 2], "maxResults": 0 }
```

**Collect verified 5-star reviews for marketing:**

```json
{ "businessUrl": "https://www.trustpilot.com/review/yourcompany.com",
  "starRating": [5], "verifiedOnly": true, "language": "en", "maxResults": 200 }
```

**Audit your customer-service response rate:**

```json
{ "businessUrl": "https://www.trustpilot.com/review/yourcompany.com",
  "repliesOnly": true, "dateRange": "last6months", "maxResults": 0 }
```

***

### 📤 Output

Each dataset item is one Trustpilot review. Real sample from an actual run:

```json
{
  "id": "6a7a51a5094e6794e33d862e",
  "title": "always easy to connect",
  "text": "always easy to connect",
  "rating": 5,
  "isVerified": true,
  "reviewerName": "NordVPN Customer",
  "reviewerCountry": "US",
  "reviewerNumberOfReviews": 1,
  "publishedDate": "2026-08-11T09:12:44.000Z",
  "experiencedDate": "2026-08-10T00:00:00.000Z",
  "likes": 0,
  "reply": null,
  "businessName": "NordVPN",
  "language": "en"
}
```

#### 🧾 Trustpilot Review Output Fields

| Field | Description |
|---|---|
| `id` | Unique Trustpilot review ID. |
| `title` / `text` | Review headline and full review body. |
| `rating` | Star rating from 1 to 5. |
| `isVerified` / `verificationLevel` | Whether the reviewer was verified, and how. |
| `reviewerName` / `reviewerCountry` | Reviewer display name and country code. |
| `reviewerNumberOfReviews` | How many reviews this person has written overall. |
| `publishedDate` / `experiencedDate` / `updatedDate` | When posted, when the experience happened, when edited. |
| `reply` | The company's response object, if they replied. |
| `likes` | How many people found the review useful. |
| `language` | Detected review language. |
| `url` / `businessUrl` / `businessName` | Review permalink and the business it belongs to. |
| `source` | How Trustpilot collected the review (e.g. invitation link). |
| `consumer` | Full reviewer object including profile image and ID. |
| `location` | Reviewer or business location where available. |
| `consumersReviewCountOnSameDomain` | How many reviews this person left for this business. |
| `scrapedAt` | UTC timestamp of extraction. |

*Plus `labels`, `filtered`, `isPending`, `report`, `hasUnhandledReports`, and `productReviews`.*

***

### 💻 How to Use the Trustpilot Review Scraper (Step by Step)

#### Step 1: Find the Trustpilot Business URL

Search the company on Trustpilot and copy the URL from the address bar. It follows the pattern `trustpilot.com/review/yourcompany.com` — the domain at the end is the business identifier.

#### Step 2: Choose Your Star Rating Filter

Set `starRating` to `[1, 2]` for complaint analysis, `[5]` for testimonials, or leave it empty to capture the full distribution. This is the single most effective way to cut run size while keeping the data you need.

#### Step 3: Set a Date Range

Reputation work usually only needs recent reviews. `dateRange` scopes the scrape to the last month, 3 months, 6 months, or year — far cheaper than pulling years of history you'll discard.

#### Step 4: Decide on Verification and Replies

Turn on `verifiedOnly` when you need trustworthy data for analysis. Turn on `repliesOnly` when you're auditing how well a company responds to feedback.

#### Step 5: Set Your Review Limit

`maxResults` caps the run. Use `0` deliberately — for a business with tens of thousands of reviews, that's a long run. Start with `500` to validate your filters first.

#### Step 6: Run and Export Your Trustpilot Reviews

Click **Start**, then export as CSV, Excel, JSON, or XML from the **Storage** tab. Every field becomes a spreadsheet column.

#### Step 7: Schedule for Continuous Review Monitoring

Use Apify **Schedules** to re-run daily with `dateRange` set to the last month. Pair it with a webhook to get alerted the moment a new 1-star review appears.

***

### 🔌 API Access & Integrations

**Scrape reviews and get results in one call:**

```bash
curl -X POST "https://api.apify.com/v2/acts/scrapers-hub~trustpilot-review-scraper-ratings-replies-filters/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"businessUrl":"https://www.trustpilot.com/review/www.nordvpn.com","starRating":[1,2],"maxResults":100}'
```

**Python:**

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_TOKEN")
run = client.actor("scrapers-hub/trustpilot-review-scraper-ratings-replies-filters").call(run_input={
    "businessUrl": "https://www.trustpilot.com/review/www.nordvpn.com",
    "starRating": [1, 2],
    "maxResults": 100,
})

for review in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(review["rating"], review["title"], review["text"][:80])
```

Push Trustpilot review data into **Google Sheets, Slack, Zapier, Make, Airbyte, or your own webhook** using the built-in Apify integrations — ideal for routing new negative reviews to a support channel automatically.

***

### 💡 Best Use Cases for Trustpilot Review Data

#### 🛡️ Online Reputation Management

Schedule a daily run filtered to 1- and 2-star reviews from the last month, and route results to Slack. Responding to a negative Trustpilot review within hours instead of weeks measurably changes how it reads to future customers.

#### 📉 Complaint & Churn Analysis

Export every negative review and cluster the text. Recurring phrases surface the product failures, billing surprises, and support gaps that are actually driving cancellations — grounded in customer language, not internal assumptions.

#### 🥊 Competitor Benchmarking

Scrape your competitors' Trustpilot pages alongside your own. Compare average rating, review velocity, verification rate, and reply rate. A rival with a high rating but near-zero reply rate is showing you an opening.

#### 🧠 Sentiment Analysis & NLP

Review text plus a numeric `rating` is effectively a pre-labelled training set. Feed it into a sentiment model, topic classifier, or LLM summarisation pipeline for automated theme extraction.

#### 📣 Social Proof & Marketing Assets

Filter to verified 5-star reviews in your target language and pull the strongest quotes for landing pages, ads, and sales decks — with permalinks so every quote is attributable.

#### 🔍 Due Diligence & Vendor Assessment

Before signing with a supplier or SaaS vendor, export their full Trustpilot history. Rating trend over time tells you far more than the headline TrustScore.

#### 🕵️ Review Authenticity Auditing

Combine `reviewerNumberOfReviews`, `isVerified`, and `publishedDate` to spot suspicious clusters — a burst of 5-star reviews from single-review accounts posted on the same day is a recognisable pattern.

***

### ⚙️ Tips for Better Trustpilot Scraping Results

- **Filter before you scrape.** Star and date filters cut run cost dramatically compared to exporting everything and filtering later.
- **Use `language` for sentiment work.** Mixed-language datasets degrade most sentiment models; scrape one language at a time.
- **Test with a small `maxResults` first.** Confirm your filter combination returns what you expect before committing to a full history pull.
- **Track review velocity, not just average rating.** A stable 4.2 with rising volume is very different from a stable 4.2 with collapsing volume.
- **Keep `experiencedDate` for analysis.** It's closer to when the problem actually occurred than `publishedDate`.

***

### 🛠️ Troubleshooting

**I get fewer reviews than `maxResults`.**
Your filters may be narrower than you think. A business with 800 reviews filtered to 1-star, verified, English, last month may legitimately have only a handful.

**`reply` is `null` on every review.**
That business doesn't respond to reviews. Set `repliesOnly` to `true` to confirm — an empty result set is the answer.

**The run takes a long time.**
`maxResults: 0` on a business with tens of thousands of reviews means full pagination. Narrow with `dateRange` or set an explicit cap.

**Reviewer names look generic.**
Some businesses collect reviews through invitation links, and Trustpilot displays those reviewers as "\[Business] Customer". That's how the source page renders it.

***

### ❓ Frequently Asked Questions About Trustpilot Scraping

**How do I export Trustpilot reviews to Excel or CSV?**
Run the Actor, open the dataset, and use the Export button to pick CSV or Excel. Every field above becomes a column.

**Can I scrape all reviews for a company?**
Yes. Set `maxResults` to `0` and the scraper paginates through the business's complete review history.

**Can I get only negative Trustpilot reviews?**
Set `starRating` to `[1, 2]` to return only 1- and 2-star reviews. Use `[4, 5]` for positive ones.

**Does the Trustpilot scraper include company replies?**
Yes — the `reply` field carries the business response. Set `repliesOnly` to `true` to keep only reviews that were answered.

**Do I need a Trustpilot account or API key?**
No. The scraper reads only public review pages, with no login or API credentials required.

**Can I scrape reviews in a specific language?**
Yes. Set `language` to the code you want, and only reviews Trustpilot detected in that language are returned.

**How do I monitor new Trustpilot reviews automatically?**
Create an Apify Schedule with `dateRange` set to a recent window, then attach a webhook or Slack integration to be notified on each run.

**Can I scrape multiple businesses at once?**
Each run targets one `businessUrl`. To cover several companies, run the Actor once per business — easily automated through the API or scheduled tasks.

**What is the difference between `publishedDate` and `experiencedDate`?**
`experiencedDate` is when the customer says the experience happened; `publishedDate` is when they posted about it. The gap is a useful signal of intensity.

**Can I tell whether a review is verified?**
Yes — `isVerified` is a boolean and `verificationLevel` describes how Trustpilot verified it.

**Does it scrape product reviews as well as company reviews?**
The `productReviews` field carries product-level review data where Trustpilot exposes it on the business page.

**Is scraping Trustpilot reviews legal?**
The scraper reads only publicly accessible pages. Reviews contain personal names and opinions, so GDPR and similar regulations apply to how you store and process them. See the disclaimer.

**Can I use scraped reviews on my website?**
Reviews are the intellectual property of their authors and Trustpilot. Displaying them may require permission or Trustpilot's official widgets — check their terms before republishing.

**How much does a Trustpilot scraping run cost?**
Cost scales with the number of reviews collected. Filters and `maxResults` give you direct control.

***

### 🆘 Support & Feedback

💬 Need an extra filter or field? Open a ticket in the **Issues** tab of this Actor.

📩 For custom review-monitoring pipelines, multi-business dashboards, or enterprise volume, email **<scraperhubapi@gmail.com>**.

⭐ If this Trustpilot review scraper helps your team, a review helps others find it too.

***

### ⚖️ Disclaimer

This Trustpilot review scraper collects data solely from **publicly accessible** Trustpilot business pages. It does not access private accounts or content behind a login. Reviews contain personal opinions and reviewer names — you are responsible for handling that data in line with GDPR, CCPA, and other privacy and data protection laws, as well as Trustpilot's terms of service. Review content remains the intellectual property of its authors; check Trustpilot's terms before republishing.

For data removal requests, contact **<scraperhubapi@gmail.com>**. Use this scraper responsibly, ethically, and only for legitimate research or business purposes.

# Actor input Schema

## `businessUrl` (type: `string`):

Trustpilot business URL or just the domain. Country domains supported, e.g. fr.trustpilot.com or de.trustpilot.com.

## `maxResults` (type: `integer`):

Maximum number of reviews to scrape. Set to 0 to scrape every available review.

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

Review sort order

## `starRating` (type: `array`):

Filter by one or more star ratings. Leave empty to get all ratings.

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

Only include reviews from this period

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

ISO language code (en, de, fr, es) or all for every language

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

Only include verified reviews

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

Only include reviews that have a company reply

## Actor input object example

```json
{
  "businessUrl": "https://www.trustpilot.com/review/nordvpn.com",
  "maxResults": 1000,
  "sort": "recency",
  "starRating": [],
  "dateRange": "all",
  "language": "all",
  "verifiedOnly": false,
  "repliesOnly": false
}
```

# Actor output Schema

## `results` (type: `string`):

Records scraped by Trustpilot Review Scraper - Ratings, Replies & Filters, stored in the run's default dataset.

# 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 = {
    "businessUrl": "https://www.trustpilot.com/review/nordvpn.com"
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers-hub/trustpilot-review-scraper-ratings-replies-filters").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 = { "businessUrl": "https://www.trustpilot.com/review/nordvpn.com" }

# Run the Actor and wait for it to finish
run = client.actor("scrapers-hub/trustpilot-review-scraper-ratings-replies-filters").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 '{
  "businessUrl": "https://www.trustpilot.com/review/nordvpn.com"
}' |
apify call scrapers-hub/trustpilot-review-scraper-ratings-replies-filters --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapers-hub/trustpilot-review-scraper-ratings-replies-filters"
        }
    }
}

```

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/bkE5ar0kgZLhxy6Pe/builds/dFiaxIG4ibOI1yM87/openapi.json
