# Customer Reviews API - Trustpilot Reviews, TrustScore, Profiles (`nabeelbaghoor/customer-reviews-trustscore-api`) Actor

Customer reviews and TrustScores of any business from the public Trustpilot API: service reviews with star, language, reply and date filters, business profiles with star distribution and categories, business search, category listings and product reviews per SKU. Bring your own key.

- **URL**: https://apify.com/nabeelbaghoor/customer-reviews-trustscore-api.md
- **Developed by:** [Nabeel Hassan](https://apify.com/nabeelbaghoor) (community)
- **Categories:** Business, Marketing, E-commerce
- **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 or listing record returneds

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

## Customer Reviews API - Trustpilot Reviews, TrustScore, Profiles

Pull the customer reviews, TrustScore and star distribution of any business on Trustpilot through its official public API, as clean rows ready for sentiment analysis, competitor benchmarking, a BI dashboard or a lead list.

### What it collects

- **Service reviews of any business**: star rating, title, full text, language, created, experienced and updated dates, verification level, likes, reviewer name, location and review count, the company's reply and reply date, and the store location. Filter by stars, language, replied or not, location and date, sorted newest, oldest, highest or lowest first.
- **Every service review**: token paging through all reviews of a business, past the 100,000 review limit of the filtered route.
- **Business profiles**: TrustScore, star average, total reviews, reviews per star, country, website, referring domains, plus (optional) company name, email, phone, address, description, social links, claimed status, categories with ranking position, and the profile page link.
- **Business search**: find businesses by part of a name or domain, optionally in one country.
- **Category listings**: the businesses in a category with TrustScore, review count, location and logo, and the full category tree with translated names.
- **Latest reviews by language**: the newest reviews on the platform in one or more languages.
- **Product reviews and rating summaries**: product reviews per SKU, product URL or customer product id, with attribute ratings and photos, and the star average and distribution of each SKU.
- Read only, pay per result, bring your own key.

### Input

| Field | What it does |
| --- | --- |
| What to read | Service reviews (default), every service review, business profile, search businesses, businesses in a category, categories, latest reviews by language, reviews by id, product reviews, or product rating summary. |
| Businesses | Domains such as example.com, review page addresses, or 24 character business unit ids. |
| Search terms | Search businesses: names or parts of domains. |
| Category ids | Businesses in a category; or parent ids for categories. |
| Review ids | Reviews by id. |
| Star ratings | Keep only these stars (1 to 5). |
| Languages | Language codes such as en or de. Required for latest reviews. |
| Sort order | Newest first (default), oldest first, highest or lowest stars first. |
| Company reply | Any, replied to, or not replied to. |
| Reviews from / to date | Date window, applied by the actor. |
| Include reported reviews | Also return reported reviews. |
| Location id | One location of a multi-location business. |
| Product SKUs, Product URLs, Customer product id | Which products to read product reviews and summaries for. |
| Country, Locale | Narrow search and category results; translate names and links. |
| Include profile details | Business profile: contact details, categories and profile link (3 extra calls). |
| Maximum reviews per business, Maximum results | Row caps. |
| Requests per minute | Pacing for calls to the provider. |
| API key | Your own API key, as a secret input. |

### Example output

```json
{
  "recordType": "review",
  "service": "reviews",
  "requested": "example.com",
  "found": true,
  "businessUnitId": "507f191e810c19729de860ea",
  "businessName": "Example Store",
  "businessDomain": "example.com",
  "reviewId": "66f2a1c4e8b1d20012ab34cd",
  "stars": 2,
  "title": "Late delivery, slow support",
  "text": "The order arrived nine days late and it took three emails to get an answer.",
  "language": "en",
  "createdAt": "2026-09-24T08:12:40.000Z",
  "experiencedAt": "2026-09-20T00:00:00.000Z",
  "isVerified": true,
  "verificationLevel": "invited",
  "numberOfLikes": 1,
  "consumerName": "Jane D.",
  "consumerLocation": "Leeds, GB",
  "consumerReviewCount": 4,
  "companyReply": "Sorry to hear this, Jane. We have refunded the shipping cost.",
  "companyReplyAt": "2026-09-25T10:03:11.000Z",
  "retrievedAt": "2026-10-01T09:14:52.118Z",
  "note": null
}
```

Values are illustrative. A business profile row looks like this:

```json
{
  "recordType": "business",
  "service": "businessProfile",
  "requested": "example.com",
  "businessUnitId": "507f191e810c19729de860ea",
  "businessName": "Example Store",
  "businessDomain": "example.com",
  "trustScore": 4.3,
  "starsAverage": 4.5,
  "numberOfReviews": 18342,
  "starDistribution": { "oneStar": 1420, "twoStars": 310, "threeStars": 602, "fourStars": 2890, "fiveStars": 13120 },
  "country": "GB",
  "websiteUrl": "https://www.example.com",
  "profileUrl": "https://www.trustpilot.com/review/example.com",
  "categoryId": "clothing_store",
  "categoryName": "Clothing Store",
  "details": { "isClaimed": true, "phone": "+44 20 0000 0000", "categories": [{ "categoryId": "clothing_store", "isPrimary": true, "rankPosition": 12, "rankOutOf": 840 }] }
}
```

### FAQ

#### What is this customer reviews API used for?

Getting Trustpilot reviews and ratings into the tools that use them. A brand team tracks its own and its competitors' TrustScore and one-star reviews every week. An analyst feeds review text into sentiment or topic models. A support team lists reviews without a company reply. An agency builds lead lists of businesses in a category with a low TrustScore. An ecommerce team reads product reviews and star averages per SKU.

#### Which data source does this actor read?

The official Trustpilot API at api.trustpilot.com, through the routes its documentation at developers.trustpilot.com marks as API key only: `GET /v1/business-units/find`, `/v1/business-units/search`, `/v1/business-units/{id}`, `/profileinfo`, `/categories`, `/web-links`, `/reviews`, `/all-reviews`, `GET /v1/reviews/latest`, `GET /v1/reviews/{reviewId}`, `GET /v1/categories`, `GET /v1/categories/{categoryId}/business-units`, and `GET /v1/product-reviews/business-units/{id}` and `/reviews`. It is not a web scraper.

#### Can I read the reviews of a business I do not own?

Yes. The public routes return the public reviews and profile of any business on the platform. Private data such as reviewer emails and order ids is only available to the business itself through OAuth, and this actor never asks for it.

#### Do I need an API key?

Yes. This actor is bring-your-own-key and never ships one. The key is the API key (Client ID) of an application created in a Trustpilot Business account that has the API module add-on; the secret is not needed. Paste it into the input, or set the `DATA_API_KEY` environment secret. It is sent only in the `apikey` header. A missing or refused key ends the run cleanly with a message saying which it was.

#### Can I filter reviews by date?

Yes, with the reviews from and to dates. The public review routes take no date filter, so the actor applies the window itself. With newest first sorting it stops paging as soon as reviews are older than the from date, so a recent window costs few calls.

#### How many reviews can I get per business?

The filtered service reviews route returns up to 100,000 reviews per business, 100 per call. For more, use every service review, which pages with tokens and has no such limit but takes no filters other than the date window.

#### Does it use my API allowance?

Yes. Every successful call counts toward the yearly API allowance of your API module plan. One call returns up to 100 reviews. A business profile with details uses four calls.

#### What happens when there is nothing for an input?

It becomes its own row with `found: false` and a note: a domain with no business on the platform (tried with and without www), a review id that does not exist, a SKU with no reviews, or filters that match nothing. Those rows are never charged.

#### How is it priced?

Pay per result. Reviews, product reviews, search and category results, categories and product summaries are one flat price per row. A business profile, which combines up to four calls, is priced per profile. Rows that found nothing are free.

### Pricing

| Event | Price |
| --- | --- |
| Review or listing record returned | $0.005 per record |
| Business profile returned | $0.01 per profile |

### Keyword map

customer reviews API, Trustpilot API, Trustpilot reviews scraper alternative, Trustpilot reviews export, TrustScore API, business reviews data, review monitoring, competitor reviews, sentiment analysis data, online reputation management, product reviews API, star rating distribution, company rating lookup, review aggregation.

# Actor input Schema

## `service` (type: `string`):

Service reviews (the default) reads the reviews of each business with the star, language, reply and sort filters. Every service review reads all of them with page tokens and no provider filters, past the 100,000 review limit of the filtered route. Business profile returns TrustScore, star distribution, categories and contact details. The other services search businesses by name, list a category's businesses or the category tree, read the latest reviews in a language, read reviews by id, or read product reviews and rating summaries per SKU.

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

One per line: a website domain such as example.com, a review page address such as https://www.trustpilot.com/review/example.com, or a 24 character business unit id. Used by service reviews, every service review, business profile, product reviews and product rating summary.

## `searchTerms` (type: `array`):

Search businesses by name only: one company name or part of a domain per line, such as bank or shoes.

## `categoryIds` (type: `array`):

Businesses in a category: the category ids to list, such as pet\_store or electronics\_technology. Categories: parent ids whose sub-categories to list; leave empty for the top level. Category ids come from the categories service.

## `reviewIds` (type: `array`):

Reviews by id only: one 24 character review id per line.

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

Service reviews and product reviews: keep only these star ratings. Leave empty for all.

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

Two letter language codes such as en, de or da. Service reviews: keep only reviews in these languages. Product reviews: one language. Latest reviews by language: required.

## `orderBy` (type: `string`):

Service reviews only: newest first (the default), oldest first, highest stars first or lowest stars first.

## `responded` (type: `string`):

Service reviews only: all reviews, only those the company replied to, or only those without a reply.

## `reviewsFrom` (type: `string`):

Service reviews, every service review and product reviews: keep reviews created on or after this date (YYYY-MM-DD). Applied by the actor, since the public routes take no date filter. With newest first sorting, paging stops once reviews are older than this.

## `reviewsTo` (type: `string`):

Keep reviews created on or before this date (YYYY-MM-DD). Applied by the actor, like the from date.

## `includeReportedReviews` (type: `boolean`):

Service reviews only: also return reviews that have been reported.

## `locationId` (type: `string`):

Service reviews only: keep reviews of one location of a multi-location business, by its location id.

## `skus` (type: `array`):

Product reviews and product rating summary: one SKU per line, as the business lists it. Each SKU is read separately so every row names its SKU.

## `productUrls` (type: `array`):

Product reviews only: product page addresses, as an alternative or addition to SKUs.

## `customerProductId` (type: `string`):

Product reviews and product rating summary: the business's own product id, instead of SKUs and product URLs.

## `country` (type: `string`):

Two letter country code such as US, GB or DE. Narrows search results, category listings and categories, and the category ranking in a business profile.

## `locale` (type: `string`):

Such as en-US or da-DK. Translates category names, and sets the language of profile links, latest review links and product attributes.

## `includeProfileDetails` (type: `boolean`):

Business profile only: also read company contact details, categories with ranking and the profile page link. Three extra API calls per business.

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

Stop each business after this many reviews. 0 means no limit per business, only the overall maximum.

## `maxResults` (type: `integer`):

Stop after this many rows in total.

## `requestsPerMinute` (type: `integer`):

Pacing ceiling for calls to the provider, which recommends no more than 833 calls per 5 minutes. Every call counts toward your yearly API allowance.

## `apiKey` (type: `string`):

Your own API key: the key (Client ID) of an application you create in your Trustpilot Business account with the API module. Not the secret. This actor is bring-your-own-key and never ships one. Leave blank to use the DATA\_API\_KEY environment secret. The key is sent only in the apikey header and is never written to a row or logged.

## `baseUrl` (type: `string`):

Override the host the actor calls. Only useful for testing against a different environment.

## Actor input object example

```json
{
  "service": "reviews",
  "businesses": [
    "trustpilot.com"
  ],
  "orderBy": "createdat.desc",
  "responded": "any",
  "includeReportedReviews": false,
  "includeProfileDetails": true,
  "maxReviewsPerBusiness": 0,
  "maxResults": 500,
  "requestsPerMinute": 120
}
```

# Actor output Schema

## `records` (type: `string`):

One row per review, business, category or product rating summary.

# 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": [
        "trustpilot.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("nabeelbaghoor/customer-reviews-trustscore-api").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": ["trustpilot.com"] }

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,nabeelbaghoor/customer-reviews-trustscore-api"
        }
    }
}
```

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/mPUWNIfrgmEJDpE2R/builds/42AqTCDepdIutPX6v/openapi.json
