# Trustpilot Scraper - Reviews, Ratings & Company Profiles \[PPR] (`zadexinho/trustpilot-scraper`) Actor

Extract Trustpilot reviews, ratings, company profiles, and reviewer data. Filter by stars, language, date, keyword search. Scrapes thousands of reviews in seconds. API access included.

- **URL**: https://apify.com/zadexinho/trustpilot-scraper.md
- **Developed by:** [zadexinho](https://apify.com/zadexinho) (community)
- **Categories:** E-commerce, Lead generation, SEO tools
- **Features:** Limited permissions
- **Stats:** 16 total users, 2 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.25 / 1,000 results

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/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

### Trustpilot Scraper

Trustpilot Scraper extracts reviews, star ratings, reviewer profiles, company trust scores, and business categories from Trustpilot.com. It accepts company domains, full Trustpilot URLs, or category URLs as input and returns structured JSON with review text, rating, language, verification status, experience date, reviewer name, reviewer country, company reply, and company statistics. Filter results by star rating, language, date range, keyword search, or verification status. Fast and lightweight — scrapes thousands of reviews in seconds, not minutes.

### What data can you extract?

| Field | Type | Description |
|-------|------|-------------|
| `reviewId` | string | Unique Trustpilot review ID |
| `title` | string | Review headline |
| `text` | string | Full review text |
| `rating` | integer | Star rating (1-5) |
| `language` | string | Review language code (en, de, fr, etc.) |
| `createdAt` | string | Publication date (ISO 8601) |
| `experienceDate` | string | Date of the experience described |
| `updatedAt` | string | Last edit date (null if never edited) |
| `isVerified` | boolean | Whether Trustpilot verified this review |
| `likes` | integer | Number of "useful" votes |
| `url` | string | Direct link to the review |
| `reviewer.name` | string | Reviewer display name |
| `reviewer.numberOfReviews` | integer | Total reviews by this reviewer |
| `reviewer.country` | string | Reviewer country code |
| `reviewer.profileUrl` | string | Link to reviewer profile |
| `company.name` | string | Company display name |
| `company.domain` | string | Company domain |
| `company.trustScore` | number | Trust Score (0-5) |
| `company.stars` | integer | Overall star rating (1-5) |
| `company.totalReviews` | integer | Total number of reviews |
| `company.categories` | string\[] | Business categories |
| `company.profileUrl` | string | Link to company profile |
| `companyReply.text` | string | Company response text |
| `companyReply.createdAt` | string | Response date (ISO 8601) |

### How to scrape Trustpilot reviews

1. Enter one or more company domains in the **Companies** field (e.g., `apify.com`, `shopify.com`). Full Trustpilot URLs also work.
2. Set **Max Reviews Per Company** to control how many reviews to collect. Use `0` for all reviews.
3. Optionally apply filters — star rating, language, date range, or verified-only.
4. Click **Start** and wait for the run to complete.
5. Download results from the **Dataset** tab in JSON, CSV, or Excel format.

To discover companies in a specific industry, enter a Trustpilot category URL (e.g., `https://www.trustpilot.com/categories/electronics`) in the **Category URL** field. The scraper will find companies in that category and collect their reviews.

### How much does it cost?

This actor uses pay-per-event pricing. You are charged per review scraped.

| Tier | Price per review | Price per 1,000 reviews |
|------|-----------------|------------------------|
| FREE | $0.0004 | $0.40 |
| BRONZE | $0.00035 | $0.35 |
| SILVER | $0.0003 | $0.30 |
| GOLD | $0.00025 | $0.25 |

**Example:** Scraping 5,000 reviews on the FREE tier costs approximately $2.00.

Costs scale linearly with the number of reviews scraped. Company metadata and reviewer info are included at no extra charge.

### Use cases

- Monitor customer sentiment for your brand and competitors on Trustpilot.
- Aggregate reviews across an entire product category for market research.
- Feed review text into NLP or sentiment analysis pipelines.
- Track competitor review trends, response rates, and customer complaints.
- Find companies with declining ratings that need reputation management services.
- Collect review datasets for academic research on consumer behavior.
- Build dashboards that combine Trustpilot data with other review sources.
- Identify verified vs unverified review patterns across industries.
- Export review data to spreadsheets for client reporting.

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `companies` | string\[] | — | Company domains or Trustpilot URLs (required) |
| `categoryUrl` | string | — | Trustpilot category URL to discover companies |
| `maxReviewsPerCompany` | integer | `100` | Max reviews per company (0 = all) |
| `sort` | enum | `recency` | Sort order: `recency` or `relevance` |
| `search` | string | — | Filter reviews containing this keyword (e.g., "refund") |
| `aspects` | string\[] | — | Filter reviews by topic aspects |
| `stars` | string\[] | all | Filter by star rating: 1, 2, 3, 4, 5 |
| `languages` | string\[] | all | Filter by language code (en, fr, de, es, etc.) |
| `dateRange` | enum | all time | Last 30 days, 3 months, 6 months, or 12 months |
| `verifiedOnly` | boolean | `false` | Only return verified reviews |
| `withRepliesOnly` | boolean | `false` | Only return reviews with company replies |
| `includeCompanyInfo` | boolean | `true` | Attach company data to each review |
| `includeReviewerInfo` | boolean | `true` | Attach reviewer data to each review |
| `startPage` | integer | `1` | Page to start from (for incremental scraping) |
| `requestDelay` | integer | `500` | Delay between requests in ms |
| `proxy` | object | off | Apify proxy configuration |

#### Input examples

**Single company:**

```json
{
    "companies": ["amazon.com"],
    "maxReviewsPerCompany": 50
}
```

**Multiple companies with filters:**

```json
{
    "companies": ["shopify.com", "stripe.com", "apify.com"],
    "maxReviewsPerCompany": 200,
    "sort": "recency",
    "stars": ["1", "2"],
    "languages": ["en"],
    "verifiedOnly": true
}
```

**Search within reviews:**

```json
{
    "companies": ["amazon.com"],
    "search": "refund",
    "maxReviewsPerCompany": 100
}
```

**Category discovery:**

```json
{
    "categoryUrl": "https://www.trustpilot.com/categories/electronics",
    "maxReviewsPerCompany": 20
}
```

### Output example

```json
{
    "reviewId": "69931ff615dc7667183d6b6f",
    "title": "Reliable automation backbone for n8n workflows",
    "text": "I'm using Apify as part of an automated newsletter pipeline built with n8n, and it's been consistently reliable...",
    "rating": 5,
    "language": "en",
    "createdAt": "2026-02-16T15:47:34.000Z",
    "experienceDate": "2026-01-27T00:00:00.000Z",
    "isVerified": false,
    "likes": 0,
    "url": "https://www.trustpilot.com/reviews/69931ff615dc7667183d6b6f",
    "reviewer": {
        "name": "Ortal Y",
        "numberOfReviews": 1,
        "country": "US",
        "profileUrl": "https://www.trustpilot.com/users/69931feed6c352e02e554935"
    },
    "company": {
        "name": "Apify",
        "domain": "apify.com",
        "trustScore": 4.8,
        "stars": 5,
        "totalReviews": 381,
        "categories": [
            "Online Marketplace",
            "Software Vendor",
            "Software Company"
        ],
        "profileUrl": "https://www.trustpilot.com/review/apify.com"
    }
}
```

### Tips

- Set `maxReviewsPerCompany` to `0` to scrape all reviews. Companies with 10,000+ reviews are supported — the scraper paginates automatically.
- Use `sort: "recency"` with `dateRange: "last30days"` to monitor recent feedback.
- Use `stars: ["1", "2"]` to focus on negative reviews for reputation tracking.
- Use `verifiedOnly: true` when you need higher-confidence review data.
- Use `search` to filter reviews by keyword (e.g., "shipping", "refund", "customer service").
- Use `startPage` for incremental scraping — skip pages you already have from a previous run.
- Use `categoryUrl` to discover and scrape all companies in a Trustpilot category without knowing their domains in advance.
- Increase `requestDelay` to `1000` or higher if you encounter rate limiting on large runs.
- Enable Apify proxy for large runs (10,000+ reviews) if you experience rate limiting.

### FAQ

#### How many reviews can I scrape?

There is no hard limit. Set `maxReviewsPerCompany` to `0` to collect all reviews. The scraper paginates through all available pages automatically.

#### How fast is it?

Scraping 100 reviews typically takes under 10 seconds. Larger runs (10,000+ reviews) scale linearly. Concurrent pagination keeps batch runs efficient.

#### Do I need a proxy?

For most runs, no. If you are scraping tens of thousands of reviews or experience rate limiting, enable Apify proxy in the Advanced settings.

#### What happens if a company is not on Trustpilot?

The scraper logs a warning and moves to the next company. It does not fail the entire run.

#### Can I search within reviews?

Yes. Use the `search` field to filter reviews by keyword (e.g., "refund", "shipping", "customer service"). Only reviews containing the keyword are returned.

### Changelog

- **v0.1.8** — Search query filter, aspects filter, start page, concurrent pagination, circuit breaker, AIMD rate limiting.
- **v0.1.6** — Input validation, per-company timeouts, 403 handling, dedup, inline filter application.
- **v0.1** — Initial release. Reviews, company data, reviewer profiles, category browsing, star/language/date filters.

# Actor input Schema

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

Add company domains (e.g., apify.com, shopify.com) or full Trustpilot URLs. One per entry.

## `categoryUrl` (type: `string`):

Enter a Trustpilot category URL to discover and scrape all companies in that category (e.g., https://www.trustpilot.com/categories/electronics).

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

Set the maximum number of reviews to scrape per company. Use 0 for unlimited.

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

Select how reviews are sorted.

## `search` (type: `string`):

Filter reviews containing this keyword (e.g., 'shipping', 'refund', 'customer service').

## `aspects` (type: `array`):

Filter reviews by topic aspects. Enter Trustpilot aspect identifiers.

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

Select star ratings to include. Leave empty for all ratings.

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

Enter language codes to filter reviews (e.g., en, fr, de, es). Leave empty for all languages.

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

Select a time period to filter reviews.

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

Return only reviews marked as verified by Trustpilot.

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

Return only reviews that have a reply from the company.

## `includeCompanyInfo` (type: `boolean`):

Attach company metadata (name, trust score, total reviews, categories) to each review.

## `includeReviewerInfo` (type: `boolean`):

Attach reviewer metadata (display name, country, review count) to each review.

## `startPage` (type: `integer`):

Page number to start scraping from. Use for incremental scraping (e.g., start from page 5 if you already have pages 1-4).

## `requestDelay` (type: `integer`):

Set the delay between HTTP requests in milliseconds. Increase to 1000+ if you experience rate limiting.

## `proxy` (type: `object`):

Configure proxy settings. Not required for most use cases — the scraper works without proxies.

## Actor input object example

```json
{
  "companies": [
    "apify.com"
  ],
  "maxReviewsPerCompany": 100,
  "sort": "recency",
  "dateRange": "",
  "verifiedOnly": false,
  "withRepliesOnly": false,
  "includeCompanyInfo": true,
  "includeReviewerInfo": true,
  "startPage": 1,
  "requestDelay": 500,
  "proxy": {
    "useApifyProxy": false
  }
}
```

# 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": [
        "apify.com"
    ],
    "maxReviewsPerCompany": 100
};

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

# Run the Actor and wait for it to finish
run = client.actor("zadexinho/trustpilot-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": [
    "apify.com"
  ],
  "maxReviewsPerCompany": 100
}' |
apify call zadexinho/trustpilot-scraper --silent --output-dataset

```

## MCP server setup

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