# Trustpilot Review Scraper - Themes, Ratings & Replies (`webdata_labs/trustpilot-review-scraper`) Actor

\[💵 $4.00 / 1K] Scrape Trustpilot reviews, ratings, replies, reviewer metadata, AI summary text, and theme flags for reputation monitoring.

- **URL**: https://apify.com/webdata\_labs/trustpilot-review-scraper.md
- **Developed by:** [Open Web Team](https://apify.com/webdata_labs) (community)
- **Categories:** Automation, Lead generation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 review or summary rows

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

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 - Themes, Ratings & Replies

**Scrape Trustpilot reviews into clean reputation-monitoring data - ratings, review text, replies, reviewer metadata, topic summaries, and simple theme flags.**

Trustpilot Review Scraper collects public Trustpilot business review pages and returns structured JSON/CSV rows for agencies, brand teams, ecommerce operators, and market researchers. It is built for people who need a usable review dataset, not screenshots or manual copy-paste.

### ✅ What you get / ❌ what this isn't

| This Actor gives you | This Actor is not |
|---|---|
| Company summary rows with TrustScore, stars, total reviews, and sampled rating mix | Not an official Trustpilot API |
| Review rows with title, text, rating, dates, language, and verification status | Not a private-data scraper |
| Public reviewer metadata when available | Not a sentiment-analysis platform by itself |
| Reply detection and reply text when present | Not a full historical archive in the first version |
| Theme flags for support, billing/refunds, delivery/orders, scam/fraud, quality, ease of use, and speed | Not a legal/compliance opinion about reviews |

### 🔎 Why use this Actor

- Monitor owned or competitor Trustpilot reputation.
- Export recent 1-star and 5-star reviews for manual analysis.
- Build weekly reputation snapshots for clients.
- Compare recurring complaints across multiple companies.
- Feed review rows into spreadsheets, BI tools, LLM workflows, or your own classifier.

### 🗂️ What data you get

| Field | Type | Description |
|---|---|---|
| `businessDomain` | string | Domain from the Trustpilot review URL |
| `businessName` | string | Business display name |
| `trustScore` | number | Trustpilot score shown in embedded page data |
| `reviewCount` | number | Total review count when available |
| `rating` | number | Review star rating |
| `title`, `text` | string | Public review title and body |
| `publishedDate`, `experiencedDate` | string | Review dates from Trustpilot |
| `isVerified` | boolean | Public verification flag |
| `hasReply`, `replyText` | boolean/string | Whether the business replied and the reply text |
| `themes` | array | Deterministic keyword theme flags |
| `topicSummaries` | array/object | Trustpilot topic summaries when exposed |

### 👥 Who it's for

- Reputation agencies monitoring several client brands.
- Ecommerce teams tracking negative reviews and reply gaps.
- Competitive intelligence teams comparing complaint themes.
- Data teams building review datasets for dashboards or LLM analysis.
- B2B sellers researching pain points before outreach.

### Example tasks

- [Scrape Trustpilot reviews for a company](https://apify.com/webdata_labs/trustpilot-review-scraper/examples/scrape-trustpilot-reviews-for-a-company)
- [Monitor competitor Trustpilot ratings](https://apify.com/webdata_labs/trustpilot-review-scraper/examples/monitor-competitor-trustpilot-ratings)
- [Analyze Trustpilot review themes and complaints](https://apify.com/webdata_labs/trustpilot-review-scraper/examples/analyze-trustpilot-review-themes-and-complaints)

### ⚙️ How to scrape Trustpilot reviews

1. Open the Actor on Apify.
2. Enter one or more Trustpilot review URLs or domains.
3. Choose how many recent reviews to collect per business.
4. Run the Actor.
5. Open the dataset view for `Company summaries` or `Review rows`.
6. Export JSON, CSV, Excel, HTML, RSS, or XML, or call the Actor through the Apify API.

### 📥 Input

```json
{
  "businesses": ["apify.com", "shopify.com"],
  "maxReviewsPerBusiness": 20,
  "includeReviewerDetails": true,
  "includeAiSummary": true,
  "delayMs": 1500
}
````

### 📤 Output

```json
{
  "recordType": "company_summary",
  "businessDomain": "shopify.com",
  "businessName": "Shopify",
  "trustScore": 1.3,
  "reviewCount": 4788,
  "reviewsScraped": 20,
  "negativeReviewCount": 17,
  "topThemes": ["customer_service", "billing_or_refund", "scam_or_fraud"]
}
```

```json
{
  "recordType": "review",
  "businessDomain": "apify.com",
  "rating": 5,
  "title": "Robust way to get webinfo",
  "publishedDate": "2026-06-26T09:41:06.000Z",
  "themes": ["quality_or_reliability"]
}
```

### 💵 How much does it cost?

The recommended launch price is about `$4.00 / 1,000 review rows`, tier-discounted for higher Apify plans. The default run collects up to 20 reviews per business so first runs stay predictable.

### 🔁 Run it on the Apify platform

Schedule recurring review monitoring, call it from the Apify API, export to CSV/JSON/Excel, or connect the dataset to Make, Zapier, webhooks, a warehouse, or an LLM pipeline.

### ⚠️ Limits and caveats

- This Actor reads public Trustpilot review pages. It is not affiliated with Trustpilot.
- The first version collects the recent reviews exposed on the rendered business page, capped at 20 per business for reliability.
- Reviews can contain personal data. Use the output lawfully and avoid storing or processing personal data without a legitimate reason.
- Theme flags are deterministic keyword labels. They are useful for triage, not a substitute for full NLP review analysis.
- If Trustpilot changes page structure, extraction may need maintenance.

### 🧩 Related Actors

- Website Contact Extractor - turn company domains into outreach-ready emails and social links.
- Lead List Deduplicator - clean and merge lead rows before CRM import.
- LinkedIn Ads Library Scraper - compare competitor B2B ad messaging.
- Bulk URL Status Checker - audit URLs before monitoring domains or campaigns.

### ❓ FAQ

#### Is this a Trustpilot API?

No. It is an Apify Actor that turns public Trustpilot review pages into structured datasets and API-accessible output.

#### Can it scrape multiple companies?

Yes. Add multiple domains or Trustpilot review URLs to `businesses`.

#### Does it scrape private reviewer data?

No. It only extracts data exposed publicly on Trustpilot review pages.

#### Why only 20 reviews per business?

The first version favors stable, cheap, recent-review snapshots over deep historical scraping. If usage proves demand, deeper pagination can be added as a separate reliability upgrade.

### 🛠️ Support

For bugs or missing fields, open an Actor issue with the run URL, input, and the field or behavior you expected.

# Actor input Schema

## `businesses` (type: `array`):

Trustpilot review URLs or domains, for example https://www.trustpilot.com/review/apify.com or apify.com.

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

Maximum reviews to collect for each business (paginates 20 per page). Default keeps first runs fast and cheap; raise it to pull deeper review history.

## `includeReviewerDetails` (type: `boolean`):

Include public reviewer display name, country, and review count.

## `includeAiSummary` (type: `boolean`):

Include Trustpilot summary/topic text when it is present in the page data.

## `delayMs` (type: `integer`):

Small wait after navigation before reading page data.

## Actor input object example

```json
{
  "businesses": [
    "apify.com"
  ],
  "maxReviewsPerBusiness": 20,
  "includeReviewerDetails": true,
  "includeAiSummary": true,
  "delayMs": 1500
}
```

# Actor output Schema

## `OUTPUT` (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 = {
    "businesses": [
        "apify.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("webdata_labs/trustpilot-review-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 = { "businesses": ["apify.com"] }

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

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

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

```

## CLI example

```bash
echo '{
  "businesses": [
    "apify.com"
  ]
}' |
apify call webdata_labs/trustpilot-review-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Trustpilot Review Scraper - Themes, Ratings & Replies",
        "description": "[💵 $4.00 / 1K] Scrape Trustpilot reviews, ratings, replies, reviewer metadata, AI summary text, and theme flags for reputation monitoring.",
        "version": "0.1",
        "x-build-id": "4w0eyYFlLmKKRpuga"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/webdata_labs~trustpilot-review-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-webdata_labs-trustpilot-review-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/webdata_labs~trustpilot-review-scraper/runs": {
            "post": {
                "operationId": "runs-sync-webdata_labs-trustpilot-review-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/webdata_labs~trustpilot-review-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-webdata_labs-trustpilot-review-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "businesses"
                ],
                "properties": {
                    "businesses": {
                        "title": "Businesses",
                        "type": "array",
                        "description": "Trustpilot review URLs or domains, for example https://www.trustpilot.com/review/apify.com or apify.com.",
                        "default": [
                            "apify.com",
                            "shopify.com"
                        ],
                        "items": {
                            "type": "string"
                        }
                    },
                    "maxReviewsPerBusiness": {
                        "title": "Max reviews per business",
                        "minimum": 1,
                        "maximum": 500,
                        "type": "integer",
                        "description": "Maximum reviews to collect for each business (paginates 20 per page). Default keeps first runs fast and cheap; raise it to pull deeper review history.",
                        "default": 20
                    },
                    "includeReviewerDetails": {
                        "title": "Include reviewer details",
                        "type": "boolean",
                        "description": "Include public reviewer display name, country, and review count.",
                        "default": true
                    },
                    "includeAiSummary": {
                        "title": "Include AI summary",
                        "type": "boolean",
                        "description": "Include Trustpilot summary/topic text when it is present in the page data.",
                        "default": true
                    },
                    "delayMs": {
                        "title": "Delay after page load (ms)",
                        "minimum": 0,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Small wait after navigation before reading page data.",
                        "default": 1500
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
