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

Scrape public Trustpilot reviews for any company. Bypasses the ~200-review page limit. Fails loudly, never returns empty success.

- **URL**: https://apify.com/nitinjha/trustpilot-reviews-scraper.md
- **Developed by:** [Nitin jha](https://apify.com/nitinjha) (community)
- **Categories:** Developer tools, Social media, SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 review scrapeds

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

Export Trustpilot reviews to JSON, CSV, or any downstream tool — no limits, no silent failures. Scrapes public company reviews and delivers structured data via the Apify API, Make, Zapier, n8n, or Google Sheets.

**Last verified working:** June 2026 · **Schema version:** 1.0.0

---

### Why this scraper?

Most Trustpilot scrapers have two fatal flaws. This one doesn't.

**1. Bypasses the ~200-review / page-10 wall.**
Trustpilot limits naive scrapers to roughly 10 pages (~200 reviews) per URL. This actor uses star-rating segmentation — scraping each star band independently — to return hundreds or thousands of reviews per company, not just the first 200.

**2. Never silently fails.**
If a run produces zero results for a valid domain, the actor exits with a non-zero code and a clear error message. Competing actors return an empty dataset with a "success" status. You'd never know something went wrong.

---

### Input

| Field | Required | Default | Description |
|---|---|---|---|
| `companyDomains` | Yes (or `startUrls`) | — | e.g. `["amazon.com", "nike.com"]` |
| `startUrls` | Optional | — | Direct Trustpilot review URLs |
| `maxReviews` | No | `0` (all) | Per-company review cap. `0` = up to 50,000 |
| `sortBy` | No | `recency` | `recency` or `relevance` |
| `language` | No | `all` | ISO 639-1 code, e.g. `en`, `de` |
| `starRatings` | No | `[]` (all) | e.g. `[1, 2]` to scrape low-star reviews only |
| `includeCompanyProfile` | No | `false` | Also push a company summary row |
| `proxyConfiguration` | No | Residential | Apify proxy settings |

---

### Output fields

Every review row contains these 22 fields. Missing values are `null` — never silently dropped.

| Field | Type | Description |
|---|---|---|
| `reviewId` | string | Trustpilot's unique review ID |
| `companyDomain` | string | e.g. `amazon.com` |
| `companyName` | string | Display name from Trustpilot |
| `reviewUrl` | string | Direct link to the review |
| `reviewTitle` | string \| null | Review headline |
| `reviewText` | string \| null | Full review body |
| `rating` | integer | 1–5 stars |
| `reviewLanguage` | string \| null | ISO 639-1 language code |
| `reviewDate` | ISO 8601 datetime | When the review was published |
| `experienceDate` | ISO 8601 date \| null | Date of the reported experience |
| `isVerified` | boolean | Trustpilot verified purchase badge |
| `reviewerName` | string \| null | Reviewer display name |
| `reviewerCountry` | string \| null | ISO 3166-1 country code |
| `reviewerProfileUrl` | string \| null | Trustpilot profile link |
| `reviewerReviewCount` | integer \| null | Total reviews by this person |
| `likesCount` | integer | Helpful votes on this review |
| `companyReply` | string \| null | Company's response text |
| `companyReplyDate` | ISO 8601 datetime \| null | When the company replied |
| `isEdited` | boolean | Whether the review was edited after posting |
| `sourcePage` | integer | Pagination page number |
| `scrapedAt` | ISO 8601 datetime | When this row was extracted |
| `schemaVersion` | string | `1.0.0` — for pipeline compatibility |

When `includeCompanyProfile` is enabled, one additional row per company is pushed with `recordType: "company"` containing the overall rating, total review count, trust score, and categories.

---

### Pricing

Charged per review successfully pushed — you only pay for results, never for retries or failures.

| Volume | Cost |
|---|---|
| 100 reviews | ~$0.50 |
| 1,000 reviews | ~$5.00 |
| 10,000 reviews | ~$50.00 |

The actor startup event is charged at a negligible flat fee per run. Company profile rows are charged separately and only when `includeCompanyProfile` is enabled.

---

### How to export all Trustpilot reviews to CSV

1. Run the actor with your domain list and desired `maxReviews`.
2. In the Apify Console, open the **Dataset** tab and click **Export → CSV**.
3. Or hit the API directly: `GET https://api.apify.com/v2/datasets/{datasetId}/items?format=csv`

### How to get more than 200 Trustpilot reviews

The page-10 cap is a Trustpilot UI limitation per URL. Set `maxReviews` to your target (e.g. `1000`) and leave `starRatings` empty. The actor automatically segments by star rating, giving each band its own independent 10-page window — returning up to ~1,000 reviews per company in a single run.

### How to scrape only 1-star or negative Trustpilot reviews

Set `starRatings` to `[1]` or `[1, 2]`. Only those star bands will be scraped, making runs faster and cheaper when you only need critical reviews for sentiment analysis or churn research.

### Trustpilot API alternative

This actor delivers Trustpilot review data without requiring access to Trustpilot's official (paid) Data Solutions API. It reads publicly available review pages — the same data any visitor sees.

### How to monitor competitor reviews on Trustpilot

Feed a list of competitor domains and schedule the actor weekly. Connect the output to Google Sheets via the Apify → Google Sheets integration, or route it through Make or n8n for automated dashboards and alerts.

### How to track brand reputation with Trustpilot data

Combine `rating`, `reviewDate`, and `reviewText` to track NPS trends over time. Pipe the output to a sentiment analysis step (e.g. via the Claude API or OpenAI) to quantify reputation shifts across any time window.

---

### Integrations

Works out of the box with:

- **Apify API** — fetch results as JSON, CSV, XLSX, XML
- **Make (formerly Integromat)** — Apify module available
- **Zapier** — Apify Zap available
- **n8n** — Apify node available
- **Google Sheets** — via Apify's native Google Sheets integration

---

### Legal & ethics

This actor scrapes only **public review data** visible to any web visitor without authentication. Users are responsible for compliance with Trustpilot's Terms of Service, GDPR (reviewer names and countries are personal data under EU law), and any applicable local regulations. Do not use the output for spam or unsolicited contact with reviewers.

---

### Changelog

| Date | Version | Notes |
|---|---|---|
| 2026-06-26 | 0.1 | Initial release — star-filter segmentation, 22-field schema, PPE charging |

# Actor input Schema

## `companyDomains` (type: `array`):

List of company domains to scrape. Example: ["amazon.com", "nike.com"]. The actor resolves these to Trustpilot review pages automatically.
## `startUrls` (type: `array`):

Direct Trustpilot review page URLs. Use this as an alternative to companyDomains. Example: [{"url": "https://www.trustpilot.com/review/amazon.com"}]
## `maxReviews` (type: `integer`):

Maximum number of reviews to extract per company. Set to 0 for no limit (up to 50,000).
## `sortBy` (type: `string`):

Sort order for reviews.
## `language` (type: `string`):

Filter reviews by language code (e.g. 'en', 'de', 'fr'). Use 'all' to include all languages.
## `starRatings` (type: `array`):

Filter by star rating. Leave empty to include all ratings. Example: [1, 2] to pull only 1-star and 2-star reviews.
## `includeCompanyProfile` (type: `boolean`):

When enabled, also push one company-level summary row per company (overall rating, total reviews, trust score, categories).
## `proxyConfiguration` (type: `object`):

Proxy settings. Defaults to Apify residential proxies for best reliability. Datacenter proxies are cheaper but more likely to be blocked.

## Actor input object example

```json
{
  "companyDomains": [
    "amazon.com"
  ],
  "maxReviews": 100,
  "sortBy": "recency",
  "language": "all",
  "starRatings": [],
  "includeCompanyProfile": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
````

# 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 = {
    "companyDomains": [
        "amazon.com"
    ],
    "maxReviews": 100,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("nitinjha/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 = {
    "companyDomains": ["amazon.com"],
    "maxReviews": 100,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("nitinjha/trustpilot-reviews-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 '{
  "companyDomains": [
    "amazon.com"
  ],
  "maxReviews": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call nitinjha/trustpilot-reviews-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Trustpilot Reviews Scraper",
        "description": "Scrape public Trustpilot reviews for any company. Bypasses the ~200-review page limit. Fails loudly, never returns empty success.",
        "version": "0.1",
        "x-build-id": "kDGgRASoiFkjunpoy"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/nitinjha~trustpilot-reviews-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-nitinjha-trustpilot-reviews-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/nitinjha~trustpilot-reviews-scraper/runs": {
            "post": {
                "operationId": "runs-sync-nitinjha-trustpilot-reviews-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/nitinjha~trustpilot-reviews-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-nitinjha-trustpilot-reviews-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",
                "properties": {
                    "companyDomains": {
                        "title": "Company Domains",
                        "type": "array",
                        "description": "List of company domains to scrape. Example: [\"amazon.com\", \"nike.com\"]. The actor resolves these to Trustpilot review pages automatically.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "Start URLs",
                        "type": "array",
                        "description": "Direct Trustpilot review page URLs. Use this as an alternative to companyDomains. Example: [{\"url\": \"https://www.trustpilot.com/review/amazon.com\"}]",
                        "items": {
                            "type": "object"
                        }
                    },
                    "maxReviews": {
                        "title": "Max Reviews Per Company",
                        "minimum": 0,
                        "type": "integer",
                        "description": "Maximum number of reviews to extract per company. Set to 0 for no limit (up to 50,000).",
                        "default": 0
                    },
                    "sortBy": {
                        "title": "Sort By",
                        "enum": [
                            "recency",
                            "relevance"
                        ],
                        "type": "string",
                        "description": "Sort order for reviews.",
                        "default": "recency"
                    },
                    "language": {
                        "title": "Review Language",
                        "type": "string",
                        "description": "Filter reviews by language code (e.g. 'en', 'de', 'fr'). Use 'all' to include all languages.",
                        "default": "all"
                    },
                    "starRatings": {
                        "title": "Star Ratings to Include",
                        "type": "array",
                        "description": "Filter by star rating. Leave empty to include all ratings. Example: [1, 2] to pull only 1-star and 2-star reviews.",
                        "items": {
                            "type": "integer",
                            "minimum": 1,
                            "maximum": 5
                        },
                        "default": []
                    },
                    "includeCompanyProfile": {
                        "title": "Include Company Profile",
                        "type": "boolean",
                        "description": "When enabled, also push one company-level summary row per company (overall rating, total reviews, trust score, categories).",
                        "default": false
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Proxy settings. Defaults to Apify residential proxies for best reliability. Datacenter proxies are cheaper but more likely to be blocked."
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
