# Trustpilot Reviews Scraper: Ratings & Replies (`fascinating_lentil/trustpilot-reviews-scraper`) Actor

Scrape public Trustpilot company reviews, ratings, review text, dates, verification signals, company replies, and company-level TrustScore summaries.

- **URL**: https://apify.com/fascinating\_lentil/trustpilot-reviews-scraper.md
- **Developed by:** [Md Jakaria Mirza](https://apify.com/fascinating_lentil) (community)
- **Categories:** Business, Marketing
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Trustpilot Reviews Scraper

Scrape public Trustpilot company reviews and rating signals without a Trustpilot login or API key. Provide company domains or Trustpilot review slugs such as `nike.com`, or full Trustpilot review URLs, and receive structured review rows for brand monitoring, competitor research, support analysis, and reporting.

The Actor uses a browser with proxy support because Trustpilot can present anti-bot challenges. It saves review records to the default dataset and saves company-level summary data to a separate `companies` dataset when a review is successfully collected.

### Quick start

Run one company with one recent review:

```json
{
  "companyNames": ["nike.com"],
  "companyUrls": [],
  "maxReviewsPerCompany": 1,
  "sortBy": "most_recent",
  "filterByRating": "all",
  "verifiedOnly": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

Export results as JSON, CSV, Excel, XML, or HTML, or consume them through the Apify API, schedules, webhooks, Make, Zapier, n8n, and other integrations.

### What it extracts

#### Review rows

- Review ID and direct Trustpilot review URL
- Company name and source company page URL
- Star rating
- Review title and review body
- Date of experience and review posted date
- Verified-review flag
- Useful count when shown
- Company reply text and reply date when present
- Scraped timestamp

#### Company summary rows

Company summaries are written to the named `companies` dataset after the first review is saved for that company. They include:

- Company name, domain, Trustpilot URL, and website URL
- Overall TrustScore and star rating
- Total review count
- Rating distribution percentages
- Claimed status and category when available
- Scraped timestamp

### Output dataset

The default dataset is intentionally a clean list of reviews. The `Reviews` view includes the fields most users need for spreadsheet, BI, API, and sentiment-analysis workflows.

#### Verified review sample

This shortened sample comes from a successful public Actor run:

```json
{
  "reviewId": "6a2935848b5c27d1ace126be",
  "companyName": "Netflix",
  "companyUrl": "https://www.trustpilot.com/review/netflix.com",
  "starRating": 5,
  "reviewTitle": "Legends",
  "reviewBody": "Legends - just finished the series and WOW! Great true story and amazing acting!",
  "dateOfExperience": "2026-06-10T00:00:00.000Z",
  "reviewPostedDate": "2026-06-10T11:59:32.000Z",
  "verifiedPurchase": false,
  "usefulCount": 0,
  "companyReply": null,
  "companyReplyDate": null,
  "reviewUrl": "https://www.trustpilot.com/reviews/6a2935848b5c27d1ace126be",
  "scrapedAt": "2026-06-10T17:49:53.800Z"
}
```

Review text, ratings, counts, and reply data can change when Trustpilot updates the page or the reviewer/company edits content.

### Input

| Field | Type | Default | Description |
| --- | --- | --- | --- |
| `companyNames` | array | `["nike.com"]` | Company domains or Trustpilot review slugs. The Actor builds the review URL automatically. |
| `companyUrls` | array | `[]` | Full Trustpilot company review URLs. |
| `maxReviewsPerCompany` | integer | `1` | Maximum reviews to save per company. Use `0` only when you intentionally want all available pages. |
| `sortBy` | string | `most_recent` | `most_recent`, `most_relevant`, or `lowest_rated`. |
| `filterByRating` | string | `all` | `all`, `5`, `4`, `3`, `2`, or `1`. |
| `verifiedOnly` | boolean | `false` | Save only reviews marked verified by Trustpilot. |
| `proxyConfiguration` | object | Residential Apify Proxy | Proxy settings for browser requests. Residential proxies are recommended. |

Provide at least one company domain, Trustpilot review slug, or full Trustpilot review URL. Duplicate targets are removed before scraping, and each run accepts up to 50 unique companies. Start with `maxReviewsPerCompany: 1` to confirm output and cost before scaling.

### Common workflows

#### Monitor recent negative feedback

Set `sortBy` to `most_recent` and `filterByRating` to `1` to collect the newest one-star reviews for a brand or competitor.

#### Compare competitors

Pass several company domains and compare TrustScore, star distribution, review volume, and recent review themes.

#### Feed sentiment analysis

Export review titles, bodies, ratings, dates, and company replies to a spreadsheet, database, or NLP pipeline.

#### Build support reports

Use recurring runs to watch new public reviews and route the dataset to a BI dashboard or workflow tool.

### Pricing

This Actor uses Pay Per Event pricing.

| Event | Price |
| --- | ---: |
| Actor start | $0.00005 per GB of memory |
| Each successfully saved `review-scraped` item | $0.001 |

The Actor default is 1 GB of memory, so the startup charge is approximately $0.00005 per run. A one-review sample run is therefore approximately $0.00105 before any applicable platform usage, proxy traffic, or account-level charges.

Reviews are charged only when they are successfully saved to the dataset. Blocked or empty runs do not charge `review-scraped` events. Reaching the user's maximum-cost limit stops further review work cleanly instead of turning a valid partial run into a failure.

### Limits and reliability

- Trustpilot can change page structure or anti-bot behavior.
- Residential proxies are recommended for reliable browser access.
- Image, media, and font downloads are blocked, concurrency is bounded, and the cloud default is 1 GB to reduce platform and proxy costs without blocking Trustpilot's challenge scripts or JSON data.
- Very large runs can take longer because the Actor paginates public review pages.
- Each run accepts at most 50 unique companies and 10,000 reviews per company. Use smaller batches for more predictable completion times.
- Company replies, useful counts, and verification labels are returned only when Trustpilot exposes them on the page.
- `lowest_rated` uses the one-star filter when no explicit `filterByRating` is provided.
- A valid company page with no reviews matching the selected filters finishes successfully with an empty default dataset; blocked or unparseable pages still fail visibly.
- Company summaries are stored in a named dataset, while the default dataset stays review-only.

### API example

```bash
curl -X POST "https://api.apify.com/v2/acts/fascinating_lentil~trustpilot-reviews-scraper/runs?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "companyNames": ["nike.com"],
    "companyUrls": [],
    "maxReviewsPerCompany": 1,
    "sortBy": "most_recent",
    "filterByRating": "all",
    "verifiedOnly": false,
    "proxyConfiguration": {
      "useApifyProxy": true,
      "apifyProxyGroups": ["RESIDENTIAL"]
    }
  }'
```

### Responsible use

Use this Actor only for lawful collection of publicly available information. You are responsible for complying with Trustpilot's terms, privacy laws, consumer-review rules, and regulations that apply to your use case.

Do not use the output for spam, harassment, profiling, or unlawful collection of personal data. This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Trustpilot.

### License

Apache-2.0.

# Actor input Schema

## `companyNames` (type: `array`):

Company domains or Trustpilot review slugs to scrape, for example "nike.com" or "spotify.com". The Actor builds the Trustpilot URL automatically.

## `companyUrls` (type: `array`):

Full Trustpilot company review URLs, for example "https://www.trustpilot.com/review/nike.com".

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

Maximum number of reviews to save per company. Start with 1 for a cheap sample. Set to 0 only when you intentionally want all available pages.

## `sortBy` (type: `string`):

How to order reviews on each company page. Lowest rated applies a one-star filter unless another rating filter is selected.

## `filterByRating` (type: `string`):

Only save reviews with this star rating. Choose "All Ratings" for no explicit rating filter.

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

If enabled, only reviews marked verified by Trustpilot are saved to the dataset.

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

Proxy settings for browser requests. Trustpilot uses anti-bot protection, so residential proxies are recommended for reliable results.

## Actor input object example

```json
{
  "companyNames": [
    "nike.com"
  ],
  "companyUrls": [],
  "maxReviewsPerCompany": 1,
  "sortBy": "most_recent",
  "filterByRating": "all",
  "verifiedOnly": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Default dataset items containing public Trustpilot company reviews and reply metadata.

# 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 = {
    "companyNames": [
        "nike.com"
    ]
};

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

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

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/LucDUZYljYftH2zd0/builds/5id09OWfSKveM0AP7/openapi.json
