# Trustpilot Reviews & Company Info Scraper (`barefoot_grade/trustpilot-reviews-scraper`) Actor

Get Trustpilot reviews for any company: stars, title, full text, date, language, reviewer and company reply. Plus each company's TrustScore, review count, star breakdown, categories and contact details. Filter by stars, language and date, or find companies by search or category.

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

## Pricing

from $0.50 / 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.

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 Reviews & Company Info Scraper

Get Trustpilot reviews for any company as clean rows: star rating, title, full text, posting and experience dates, language, the reviewer's name and country, verification status, useful votes and the company's public reply. Every company also comes back as one profile row with its TrustScore, total review count, a 1-to-5 star breakdown, categories, description, website, e-mail, phone and address, and how often it replies to negative reviews.

Add companies by website (`amazon.com`) or by Trustpilot link, filter by star rating, language, date and verified or replied reviews, or find companies by search term or category and get their profiles (and their reviews, if you want them) in the same run.

### Use cases

- **Reputation monitoring**: collect the newest reviews for your brand on a schedule and route 1-star reviews to your support team.
- **Competitor analysis**: compare TrustScore, rating mix, reply rate and review themes across every company in your market.
- **Customer research**: read thousands of real customer experiences in one language, or across all of them, for product and service insights.
- **Lead generation**: build lists of companies in a Trustpilot category with their website, phone, e-mail, address and rating.
- **Sentiment and AI training data**: export full review text with ratings, dates and languages as JSON or CSV.

### Quick Start

```json
{
  "companies": ["www.zooplus.co.uk"],
  "maxReviewsPerCompany": 100
}
```

This returns the zooplus.co.uk profile row and its 100 newest reviews in all languages. Paste a Trustpilot review link instead of a website to keep the filters you picked on Trustpilot (stars, language, date, order).

### Input

| Input | Type | Default | Meaning |
| --- | --- | --- | --- |
| `companies` | array | `[]` | Company websites (`amazon.com`, `www.zooplus.co.uk`) or Trustpilot review links (`trustpilot.com/review/...`). |
| `maxReviewsPerCompany` | integer | `100` | Reviews to collect per company, newest first. `0` returns the profile row only. |
| `stars` | array | all | Only these star ratings, for example `["1", "2"]`. |
| `language` | string | `all` | `all`, or a two-letter language code such as `en`, `de` or `fr`. |
| `dateRange` | string | any time | `last30days`, `last3months`, `last6months` or `last12months`. |
| `sort` | string | `recency` | `recency` (newest first) or `relevance` (Trustpilot's most relevant order). |
| `verifiedOnly` | boolean | `false` | Only reviews Trustpilot marks as verified. |
| `withRepliesOnly` | boolean | `false` | Only reviews the company replied to. |
| `includeCompanyInfo` | boolean | `true` | Add one profile row per company. |
| `searchQueries` | array | `[]` | Find companies by search term, for example `pet food`. |
| `categories` | array | `[]` | Find companies by Trustpilot category, for example `bank` or `electronics_technology`, or paste a category link. |
| `categoryCountry` | string | `US` | Country for category lists, for example `GB` or `DE`. |
| `categorySort` | string | `most_relevant` | `most_relevant`, `reviews_count` or `latest_review`. |
| `maxCompaniesPerSearch` | integer | `20` | Companies to return per search term or category. |
| `reviewsForFoundCompanies` | boolean | `false` | Also collect reviews for every company found by search or category. |
| `maxItems` | integer | `1000` | Upper limit on rows for the whole run (profile rows plus reviews). |

### Example queries

- `{"companies": ["www.amazon.com"], "stars": ["1"], "language": "en", "maxReviewsPerCompany": 200}`: the 200 newest 1-star English reviews of Amazon.
- `{"companies": ["https://www.trustpilot.com/review/chewy.com?date=last30days"], "maxReviewsPerCompany": 500}`: everything posted about Chewy in the last 30 days, up to 500 reviews.
- `{"companies": ["www.booking.com", "www.expedia.com"], "maxReviewsPerCompany": 0}`: two profile rows only, for a quick TrustScore comparison.
- `{"categories": ["bank"], "categoryCountry": "GB", "categorySort": "reviews_count", "maxCompaniesPerSearch": 50}`: the 50 most-reviewed UK banks with contact details.
- `{"searchQueries": ["pet food"], "maxCompaniesPerSearch": 5, "reviewsForFoundCompanies": true, "maxReviewsPerCompany": 50}`: five pet food companies and 50 reviews each.

### What it returns

The dataset has two kinds of rows that share one set of columns, so a table or CSV export lines up. `type` tells them apart; fields that do not apply to a row are `null`.

Review rows (`type: "review"`):

| Field | Meaning |
| --- | --- |
| `reviewId`, `reviewUrl` | Trustpilot review id and link. |
| `rating`, `title`, `text` | Star rating (1-5), title and full review text. |
| `language` | Two-letter language code of the review. |
| `publishedAt`, `experiencedAt`, `updatedAt` | When it was posted, the date of the experience, and the last edit if any (UTC). |
| `likes` | Useful votes. |
| `isVerified`, `verificationLevel`, `reviewSource` | Verification status and how the review was collected (for example organic or invited). |
| `reviewerName`, `reviewerId`, `reviewerProfileUrl`, `reviewerCountry`, `reviewerReviewCount`, `reviewerImageUrl` | The reviewer as Trustpilot shows them. |
| `replyText`, `replyPublishedAt` | The company's public reply, if any. |
| `companyId`, `companyDomain`, `companyName`, `companyUrl` | The company reviewed. |

Company rows (`type: "company"`):

| Field | Meaning |
| --- | --- |
| `companyId`, `companyDomain`, `companyName`, `companyUrl` | Trustpilot business id, its Trustpilot name (the website domain), display name and review page. |
| `website` | The company's website. |
| `trustScore`, `stars` | TrustScore (1-5) and the star rating shown. |
| `reviewCount`, `reviewsLast12Months` | Total reviews, and reviews in the last 12 months. |
| `ratingDistribution` | Reviews per star rating, keys `1` to `5`. |
| `categories`, `primaryCategory` | Trustpilot categories. |
| `description` | The company's description on Trustpilot. |
| `email`, `phone`, `address`, `city`, `zipCode`, `country`, `countryCode` | Contact details as listed. |
| `isClaimed`, `claimedAt`, `isClosed` | Profile status. |
| `replyRate`, `averageDaysToReply` | Share of negative reviews the company replied to, and its typical reply time. |
| `logoUrl` | Logo or site image. |
| `source`, `searchQuery`, `searchRank` | `company page`, `search` or `category`; the search term or category that found it, and its position there. |

Every row also has `scrapedAt` (collection time, UTC). Company rows found by search or category carry the fields Trustpilot shows in its lists (name, TrustScore, review count, categories, website and contact details); the star breakdown, description and reply rate come with the company's own profile row.

The run summary (`OUTPUT`) lists each company with the number of reviews matching your filters, how many were returned and any error, each search or category with its total, and the run totals.

### Output example

```json
{
  "type": "review",
  "reviewId": "6ad5cf43aa21da5fe6b8f723",
  "reviewUrl": "https://www.trustpilot.com/reviews/6ad5cf43aa21da5fe6b8f723",
  "rating": 5,
  "title": "Have been using Zooplus for many years",
  "text": "Have been using Zooplus for many years, excellent company fast delivery and you know the goods are genuine and straight from the manufacture, not imported from unsafe companies. Wouldn't go anywhere else.",
  "language": "en",
  "publishedAt": "2026-10-19T10:05:23.000Z",
  "experiencedAt": "2026-10-19T00:00:00.000Z",
  "updatedAt": null,
  "likes": 0,
  "isVerified": false,
  "verificationLevel": "invited",
  "reviewSource": "BasicLink",
  "reviewerName": "NancyR",
  "reviewerId": "54afcc700000ff0001a2f680",
  "reviewerProfileUrl": "https://www.trustpilot.com/users/54afcc700000ff0001a2f680",
  "reviewerCountry": "GB",
  "reviewerReviewCount": 23,
  "reviewerImageUrl": null,
  "replyText": "Hello Nancy,\n\nYour loyalty over so many years means a great deal to us. Thank you for continuing to place your trust in zooplus and for such a heartfelt recommendation. We’re delighted to remain your first choice!\n\nTeam zooplus",
  "replyPublishedAt": "2026-10-19T11:41:52.000Z",
  "companyId": "487c8ef0000064000502f071",
  "companyDomain": "www.zooplus.co.uk",
  "companyName": "zooplus.co.uk",
  "companyUrl": "https://www.trustpilot.com/review/www.zooplus.co.uk",
  "website": null,
  "trustScore": null,
  "stars": null,
  "reviewCount": null,
  "reviewsLast12Months": null,
  "ratingDistribution": null,
  "categories": null,
  "primaryCategory": null,
  "description": null,
  "email": null,
  "phone": null,
  "address": null,
  "city": null,
  "zipCode": null,
  "country": null,
  "countryCode": null,
  "isClaimed": null,
  "claimedAt": null,
  "isClosed": null,
  "replyRate": null,
  "averageDaysToReply": null,
  "logoUrl": null,
  "source": null,
  "searchQuery": null,
  "searchRank": null,
  "scrapedAt": "2026-10-20T03:10:00Z"
}
```

### Good to know

- Trustpilot's public pages show up to 200 reviews (10 pages) for any one combination of filters. When you ask for more than 200 reviews, the actor collects them star rating by star rating, and within a star rating language by language, so a large company can return thousands of reviews. The limit is shared across star ratings in proportion to how many reviews each rating has, so the result mirrors the company's real rating mix. In that case the reviews come back grouped by star rating rather than strictly newest first, and each review is returned once.
- With one star rating and one language selected, a company returns at most its 200 newest matching reviews. The run summary marks companies where more reviews matched than could be returned.
- Without a language filter, reviews in all languages are returned (Trustpilot's own site shows only one language by default).
- A website that has no Trustpilot page is reported in the run summary and the run continues with the next company. If nothing at all is collected, the run fails with a clear message instead of finishing with an empty dataset.
- A company found by both a search and a category is returned once.
- Automated access is subject to Trustpilot's terms; use this actor only where you have the necessary permissions and a lawful basis, and handle reviewer names in line with the privacy rules that apply to you.

### Price

**$0.0005 per row** delivered (one review or one company profile), plus **$0.005 per run start**. The run-start event is charged per GB of memory; the default 1024 MB run is one start event ($0.005). The start is charged even if the run saves no results. Companies and searches that fail are not charged. Platform usage is included in these prices.

# Actor input Schema

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

Company websites (amazon.com, www.zooplus.co.uk) or Trustpilot review links (trustpilot.com/review/...). Filters in a pasted link (stars, language, date, sort) are kept for that company.

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

How many reviews to collect for each company, newest first. Set 0 for the company profile only. Above 200, the reviews are collected star rating by star rating (and language by language) to reach further back.

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

Only reviews with these star ratings. Leave empty for all ratings.

## `language` (type: `string`):

all, or a two-letter language code such as en, de or fr.

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

Only reviews posted in this period.

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

Newest first, or Trustpilot's most relevant order.

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

Only reviews Trustpilot marks as verified.

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

Only reviews the company has replied to.

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

Add one row per company with its TrustScore, review count, star breakdown, categories, description and contact details.

## `searchQueries` (type: `array`):

Optional. Search terms as you would type them on Trustpilot, for example pet food or bank. Each matching company comes back as a company row.

## `categories` (type: `array`):

Optional. Trustpilot category names or links, for example bank, pet_store or trustpilot.com/categories/electronics_technology.

## `categoryCountry` (type: `string`):

Two-letter country code for category lists, for example US, GB or DE.

## `categorySort` (type: `string`):

Order of companies in a category list.

## `maxCompaniesPerSearch` (type: `integer`):

How many companies to return for each search term or category.

## `reviewsForFoundCompanies` (type: `boolean`):

Collect reviews (up to Reviews per company) for every company found by search term or category.

## `maxItems` (type: `integer`):

Upper limit on rows (company rows plus reviews) for the whole run.

## Actor input object example

```json
{
  "companies": [
    "www.zooplus.co.uk"
  ],
  "maxReviewsPerCompany": 100,
  "stars": [],
  "language": "all",
  "dateRange": "",
  "sort": "recency",
  "verifiedOnly": false,
  "withRepliesOnly": false,
  "includeCompanyInfo": true,
  "searchQueries": [],
  "categories": [],
  "categoryCountry": "US",
  "categorySort": "most_relevant",
  "maxCompaniesPerSearch": 20,
  "reviewsForFoundCompanies": false,
  "maxItems": 1000
}
```

# Actor output Schema

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

No description

## `summary` (type: `string`):

No description

# API

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

## JavaScript example

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

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

// Prepare Actor input
const input = {
    "companies": [
        "www.zooplus.co.uk"
    ],
    "maxReviewsPerCompany": 100,
    "language": "all",
    "maxItems": 1000
};

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

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

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

```

## Python example

```python
from apify_client import ApifyClient

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

# Prepare the Actor input
run_input = {
    "companies": ["www.zooplus.co.uk"],
    "maxReviewsPerCompany": 100,
    "language": "all",
    "maxItems": 1000,
}

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

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

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

```

## CLI example

```bash
echo '{
  "companies": [
    "www.zooplus.co.uk"
  ],
  "maxReviewsPerCompany": 100,
  "language": "all",
  "maxItems": 1000
}' |
apify call barefoot_grade/trustpilot-reviews-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,barefoot_grade/trustpilot-reviews-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Da5Q0daXNkosZSH6q/builds/dpb6agtJXUrdKeSw5/openapi.json
