# Trustpilot Reviews Scraper (`labrat011/trustpilot-reviews-scraper`) Actor

Scrape Trustpilot reviews for any company: rating, full text, dates, author country, verification, and the company's reply, plus trust score and categories on every row. Filter by stars, language, verified, replied, or only reviews newer than a date.

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

## Pricing

from $0.25 / 1,000 review scrapeds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

<img src="https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/wCP1WauwRX2Gr3Gir-actor-rGcnev6aYiLqCWfKI-dNi6HerWTV-trustpilot-reviews-scraper.png" alt="Trustpilot Reviews Scraper logo" width="120">

## Trustpilot Reviews Scraper

Scrape Trustpilot reviews for any company. Every row has the star rating, full review text, publish and experience dates, author name and country, verification status, the company's reply, and the company's trust score and categories. No Trustpilot account, no API key.

Enter a domain like `pipedrive.com` or paste a Trustpilot URL. Scrape one company or a list of competitors in the same run.

| At a glance | |
|---|---|
| **You give it** | Company domains or Trustpilot URLs, plus optional star, language, date and verified filters |
| **You get** | One row per review: rating, full text, dates, author country, verification, company reply, trust score |
| **Price** | $0.005 per run at the default 1 GB memory + $0.00049 per review (Free plan, lower on paid plans) |
| **Speed** | 1,000 reviews in about 94 seconds |
| **Needs** | Nothing: no login, no API key, no proxy |

### What you get

- **Newest reviews first, for real.** Ask for 250 reviews and you get the 250 most recent, with the natural mix of ratings. Other scrapers switch to walking one star rating at a time after 200 and hand you a pile of old 1-star reviews.
- **Up to 1,000 reviews per company per language.** Trustpilot shows anonymous visitors 200 reviews per filtered view. This actor splits by star rating to reach 200 per rating, then merges them newest-first.
- **Incremental syncs.** Set **Published after** to the date of your last run. With newest-first sorting the actor stops paging the moment it reaches older reviews, so a daily sync costs cents.
- **Filters:** star ratings, languages, verified only, only reviews the company replied to.
- **Company columns on every row:** name, website, trust score, stars, total reviews, reviews in the last 12 months, categories, claimed status, country.
- **Fast and light.** A browser opens once to pass Trustpilot's bot check, then every page is a small JSON request. 1,000 reviews took 94 seconds in testing.

### Use cases

- **Reputation monitoring.** Get every new 1 and 2 star review for your brand each morning, with the text, so support can respond the same day.
- **Competitor research.** Pull the latest reviews for five competitors and see what their customers complain about.
- **Sales prospecting.** Unhappy customers of a competitor, by country, with the exact complaint. A strong opener for outreach.
- **Testimonials.** Pull verified 5-star reviews for landing pages and sales decks.
- **AI and sentiment analysis.** Clean review text with ratings and dates, ready for an LLM or a sentiment model.
- **Reply audits.** Only reviews the company replied to, with the reply text and how long it took.

### Example inputs

#### Every new negative review since yesterday

```json
{
  "companies": ["yourcompany.com"],
  "stars": ["1", "2"],
  "publishedAfter": "2026-09-25",
  "maxReviewsPerCompany": 0
}
```

#### Latest 100 English reviews for five competitors

```json
{
  "companies": ["pipedrive.com", "www.hubspot.com", "www.zoho.com", "monday.com", "salesforce.com"],
  "maxReviewsPerCompany": 100,
  "languages": ["en"]
}
```

#### Everything anonymous visitors can see, in English and German

```json
{
  "companies": ["https://www.trustpilot.com/review/www.booking.com"],
  "maxReviewsPerCompany": 0,
  "languages": ["en", "de"]
}
```

#### Verified 5-star testimonials

```json
{
  "companies": ["pipedrive.com"],
  "stars": ["5"],
  "verifiedOnly": true,
  "maxReviewsPerCompany": 50
}
```

### Input

| Field | What it does |
|---|---|
| `companies` | Domains, website URLs, or Trustpilot review URLs. Use the exact domain Trustpilot shows: some companies are listed with `www.` and some without. |
| `maxReviewsPerCompany` | Stop after this many per company. `0` means as many as Trustpilot shows anonymous visitors. Default 100. |
| `stars` | Only these ratings, for example `["1","2"]`. |
| `languages` | ISO codes like `en`, `de`, `fr`. Each language is scraped separately. `all` or empty means every language together. |
| `publishedAfter` | Only reviews published after this date or timestamp. |
| `verifiedOnly` | Only reviews Trustpilot marks as verified. |
| `withRepliesOnly` | Only reviews the company replied to. |
| `sort` | `recency` (newest first, default) or `relevance`. |
| `proxyConfiguration` | Off by default and not needed in testing. Turn on only if you get blocked. |

### Output

One row per review. This is a real row from a test run on 2026-09-26:

```json
{
  "reviewId": "6ab39f79780950e2d7706185",
  "reviewUrl": "https://www.trustpilot.com/reviews/6ab39f79780950e2d7706185",
  "rating": 5,
  "title": "Useful and great session with PipeDrive",
  "text": "Rafael was very clear. Going through the session, he had some nice tips and insights. Was very helpful!",
  "language": "en",
  "publishedDate": "2026-09-23T11:44:25.000Z",
  "experienceDate": "2026-09-23T00:00:00.000Z",
  "updatedDate": null,
  "likes": 0,
  "source": "BasicLink",
  "isVerified": false,
  "verificationLevel": "invited",
  "authorName": "Lisa",
  "authorId": "6ab39f2de947d3a834748ef4",
  "authorCountry": "NL",
  "authorReviewCount": 1,
  "authorImage": null,
  "hasReply": true,
  "replyText": "Hi Lisa,\n\nThank you for sharing your feedback!\n\nWe’re delighted to hear that the team was clear and helpful throughout the session, and that his tips and insights were valuable to you.\n\nBest regards,\nPipedrive Team",
  "replyPublishedDate": "2026-09-23T11:55:49.000Z",
  "replyUpdatedDate": null,
  "companyName": "Pipedrive",
  "companyDomain": "pipedrive.com",
  "companyWebsite": "https://www.pipedrive.com/en/gettingstarted?utm_source=trustpilot&utm_medium=directories&utm_campaign=listing&utm_content=free_trial",
  "companyTrustScore": 4.4,
  "companyStars": 4.5,
  "companyTotalReviews": 3453,
  "companyReviewsLast12Months": 441,
  "companyCategories": [
    "Business to Business Service",
    "CRM Provider",
    "Software Company"
  ],
  "companyIsClaimed": true,
  "companyCountry": "US",
  "companyUrl": "https://www.trustpilot.com/review/pipedrive.com"
}
```

The **Reviews** and **Company replies** tabs in the Output view show the most useful columns. Export as JSON, CSV, Excel, or pull it from the API.

### Pricing

Pay per event:

- **$0.005** per run start, per GB of memory (the default 1 GB means one start event; 2 GB means two)
- **$0.00049** per review on the Free plan (lower on higher Apify plans)

Apify platform usage is billed separately to your account. It is small because the actor makes plain JSON requests after one short browser session. Measured: 230 reviews used $0.0013 of platform usage, 1,000 reviews used $0.0079.

| Reviews | Actor cost | Platform usage (measured) |
|---|---|---|
| 100 | about $0.054 | under $0.002 |
| 1,000 | about $0.495 | about $0.008 |
| 10,000 | about $4.90 | about $0.08 |

Set a **Maximum cost per run** in the run options and the actor stops cleanly when it reaches it.

### Automate it with n8n

Each workflow below uses n8n's official **Apify** node: operation **Run actor and get dataset**, Actor Source **Apify Store Actors**, actor `labrat011/trustpilot-reviews-scraper`, memory 1024 MB. Paste the input JSON into the node's **Input JSON** field.

#### 1. Negative review alert to Slack (daily)

```
Schedule Trigger (every day 08:00)
  > Apify: Run actor and get dataset
  > Slack: Send message to #customer-support (runs once per review)
```

Input JSON for the Apify node. Switch the field to **Expression** so n8n fills in the date. It sets the cursor to 24 hours ago, so each run only fetches, and only pays for, new reviews:

```json
{
  "companies": ["yourcompany.com"],
  "stars": ["1", "2"],
  "publishedAfter": "{{ $now.minus({ days: 1 }).toISO() }}",
  "maxReviewsPerCompany": 0
}
```

Slack message text: `{{ $json.rating }} stars from {{ $json.authorName }} ({{ $json.authorCountry }}): {{ $json.title }} {{ $json.reviewUrl }}`

#### 2. Weekly competitor review digest to Google Sheets

```
Schedule Trigger (Mondays 07:00)
  > Apify: Run actor and get dataset
  > Google Sheets: Append rows (one row per review)
```

Input: your competitors in `companies`, `publishedAfter` set to `{{ $now.minus({ days: 7 }).toISO() }}`. Map `companyName`, `rating`, `title`, `text`, `publishedDate`, `reviewUrl` to sheet columns. A pivot on `companyName` and `rating` gives you a weekly scorecard.

#### 3. AI complaint summary by email

```
Schedule Trigger (weekly)
  > Apify: Run actor and get dataset   (stars ["1","2"], last 7 days)
  > Aggregate: all items into one list
  > OpenAI / Anthropic: "Group these reviews into the top 5 complaint themes with one quote each"
  > Gmail: Send the summary to the product team
```

#### 4. Unhappy-competitor-customer leads to your CRM

```
Schedule Trigger (daily)
  > Apify: Run actor and get dataset   (competitor domains, stars ["1","2"], last 24 hours)
  > Filter: authorCountry is in your sales regions
  > HubSpot / Pipedrive: Create a note or task with the review text and link
```

#### 5. Testimonial wall refresh

```
Schedule Trigger (monthly)
  > Apify: Run actor and get dataset   (your domain, stars ["5"], verifiedOnly true, 50 reviews)
  > Code: keep reviews over 120 characters
  > Webflow / Airtable: Upsert by reviewId
```

### For AI agents

- **Actor:** `labrat011/trustpilot-reviews-scraper`
- **Smallest input:** `{ "companies": ["pipedrive.com"] }`
- **One row = one review, with the company's trust score and categories on every row.** Key fields: `rating`, `title`, `text`, `publishedDate`, `authorCountry`, `isVerified`, `replyText`.
- **Billing:** `apify-actor-start` once per run per GB of memory (1 GB default), `review` per row. Cap spend with `maxReviewsPerCompany` or a maximum cost per run.
- **Run it:** `POST https://api.apify.com/v2/acts/labrat011~trustpilot-reviews-scraper/run-sync-get-dataset-items` with the input as the JSON body, or call it from the Apify MCP server.
- **Done signal:** the run's status message reads `Saved N reviews from C companies in R requests.`

### FAQ

**Why not every review a company has?** Trustpilot only shows logged-out visitors 10 pages (200 reviews) per filtered view. This actor gets 200 per star rating per language, up to 1,000 per language. Use `publishedAfter` on a schedule to build a complete history going forward.

**The company was not found.** Search the company on trustpilot.com and copy the address from the browser. Some companies are listed as `www.example.com`, others as `example.com`.

**Do I need a proxy?** No. Every test run succeeded without one. The option exists in case Trustpilot changes its bot check.

**Can I scrape many companies at once?** Yes. Put them all in `companies`; reviews come out company by company, each company newest-first.

### Support

Open an issue on the actor's Issues tab with the run ID and the company, and it will be looked at.

# Changelog

This Actor's version history is a separate document: https://apify.com/labrat011/trustpilot-reviews-scraper/changelog.md

# Actor input Schema

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

One per line. A domain (pipedrive.com), a website URL, or a Trustpilot URL (https://www.trustpilot.com/review/www.amazon.com). Use the exact domain Trustpilot shows: some companies are listed with www., some without.

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

Stop after this many reviews per company. 0 means as many as Trustpilot shows anonymous visitors: 200 per star rating per language. Above 200, the actor walks each star rating separately to go deeper.

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

Only these ratings. Pick 1 and 2 for complaints, 5 for testimonials.

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

ISO codes such as en, de, fr, es. Each language is scraped separately. Use all for every language in one list. Empty means all.

## `publishedAfter` (type: `string`):

Only reviews published strictly after this date, for daily or weekly syncs. 2026-09-01 (midnight UTC) or 2026-09-01T12:00:00Z. With newest-first sorting the actor stops paging as soon as it reaches older reviews, so you only pay for new ones.

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

Only reviews Trustpilot marks as verified.

## `withRepliesOnly` (type: `boolean`):

Useful for studying how a company handles complaints.

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

Newest first, or Trustpilot's relevance order.

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

Not needed for normal runs. Turn on only if Trustpilot starts blocking; proxy traffic is billed to your account by Apify.

## Actor input object example

```json
{
  "companies": [
    "pipedrive.com"
  ],
  "maxReviewsPerCompany": 20,
  "languages": [
    "en"
  ],
  "verifiedOnly": false,
  "withRepliesOnly": false,
  "sort": "recency",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `reviews` (type: `string`):

No description

## `allFields` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "companies": [
        "pipedrive.com"
    ],
    "maxReviewsPerCompany": 20,
    "languages": [
        "en"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("labrat011/trustpilot-reviews-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "companies": ["pipedrive.com"],
    "maxReviewsPerCompany": 20,
    "languages": ["en"],
}

# Run the Actor and wait for it to finish
run = client.actor("labrat011/trustpilot-reviews-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "companies": [
    "pipedrive.com"
  ],
  "maxReviewsPerCompany": 20,
  "languages": [
    "en"
  ]
}' |
apify call labrat011/trustpilot-reviews-scraper --silent --output-dataset

```

## MCP server setup

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