# Trustpilot Reviews API (`lergassy/trustpilot-reviews-api`) Actor

Scrape Trustpilot reviews, ratings, company replies and TrustScores for any company. Filter by stars, language, date range and keyword, or look companies up by name. No login, API key or proxy. Export data, run via API, schedule runs, or integrate with other tools or AI workflows.

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

## Pricing

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

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

Scrape **Trustpilot reviews** for any company: review text, star rating, dates, reviewer name and country, verification status, company replies, and the company's TrustScore and category. Filter by stars, language, date range and keyword, or look a company up by name when you only know what it is called. No login, no API key, no proxy.

### What is Trustpilot Reviews API?

Trustpilot Reviews API is a **Trustpilot scraper** that returns reviews and company profiles as structured rows. Give it domains or Trustpilot URLs, and every review comes back with the fields Trustpilot itself shows — plus the ones it does not show on the page, such as the reviewer's review count and the review's verification level.

| What you give it | What you get back |
| --- | --- |
| `slack.com` | Every Slack review, newest first, with the company's TrustScore row |
| A Trustpilot review URL | The same |
| A company name | Matching companies, then their reviews if you ask for them |
| A star, date or keyword filter | Only the reviews you asked for |

### What data can Trustpilot Reviews API extract?

One row per review:

| Field | Type | Example |
| --- | --- | --- |
| `companyDomain` | string | `slack.com` |
| `companyName` | string | `Slack` |
| `companyTrustScore` | number | `2.1` |
| `reviewId` | string | `6a9aef96e362f002a33f21c4` |
| `reviewUrl` | string | `https://www.trustpilot.com/reviews/6a9aef96e362f002a33f21c4` |
| `title` | string | `Fiverr Won't Honor Their Buyer Credits` |
| `text` | string | `I had around 10 purchased projects…` |
| `rating` | integer | `1` |
| `publishedAt` | string | `2026-09-04T18:19:34.000Z` |
| `experiencedAt` | string | `2026-09-03T00:00:00.000Z` |
| `updatedAt` | string | `null` |
| `language` | string | `en` |
| `likes` | integer | `0` |
| `isVerified` | boolean | `false` |
| `verificationLevel` | string | `not-verified`, `invited`, … |
| `reviewSource` | string | `Organic`, `InvitationLinkApi`, … |
| `consumerName` | string | `Christian Dudnick` |
| `consumerCountry` | string | `US` |
| `consumerReviewCount` | integer | `2` |
| `consumerIsVerified` | boolean | `false` |
| `consumerReviewsOfThisCompany` | integer | `1` |
| `replyText` | string | `Hi Kamal, Miles here! Thank you for letting us know…` |
| `replyPublishedAt` | string | `2026-08-30T10:12:00.000Z` |
| `locationName` | string | Branch the review is attached to, when there is one |
| `scrapedAt` | string | `2026-09-05T02:10:11+00:00` |

One row per company:

| Field | Example |
| --- | --- |
| `trustScore` / `stars` | `2.1` / `2` |
| `reviewCount` / `reviewCountLast12Months` | `365` / `44` |
| `reviewCountMatchingFilters` | Reviews that match this run's filters |
| `isClaimed`, `isCollectingReviews`, `isClosed` | Profile status flags |
| `hasCollectedIncentivisedReviews`, `consumerAlert` | Trustpilot's own warnings |
| `primaryCategory`, `categories` | `Software Company` |
| `websiteUrl`, `countryCode`, `businessUnitId` | Identity fields |

And one row per search result when you search by name: `companyDomain`, `companyName`, `trustScore`, `stars`, `reviewCount`, `profileUrl`, plus the public `contactEmail`, `contactPhone`, `websiteUrl`, `countryName` and `city` from the profile.

### How much does it cost to scrape Trustpilot reviews?

| Event | Price | When it is charged |
| --- | --- | --- |
| Review scraped | $0.0015 | Per review written to the dataset |
| Company profile | $0.003 | Per company row |
| Search result | $0.001 | Per company found by a name search |

**Failed companies and searches are never charged.** A domain Trustpilot does not know, a closed profile or a page that cannot be read comes back as an `error` row at no cost.

| Job | Cost |
| --- | --- |
| 1,000 reviews for one company | $1.50 |
| 100 competitors, latest 50 reviews each | $7.80 |
| Only complaints (1–2 stars) from the last 3 months, 20 companies × 200 | $6.06 |
| TrustScores of 500 companies, no reviews | $1.50 |

Comparable Trustpilot Actors charge $0.65 to $5 per 1,000 reviews and often add a per-run start fee; this one has no start fee and no proxy surcharge, because it reaches Trustpilot without a proxy. The Apify Free plan includes $5 of usage a month, roughly **3,000 reviews**.

### How to scrape Trustpilot reviews

1. Click **Try for free** and sign in to Apify.
2. Paste domains or Trustpilot URLs into **Companies** — `slack.com` is enough.
3. Set **Max reviews per company**. Reviews come newest first.
4. Optionally pick star ratings, a date range, a language or a keyword.
5. Press **Start**, then open **Output** or export as JSON, CSV or Excel.

### ⬇️ Input

![Trustpilot Reviews API input: company domains, name search, star, date, language and keyword filters](https://raw.githubusercontent.com/lergassy/apify-actor-assets/main/trustpilot-reviews-api/trustpilot-reviews-api-input-form.png)

```json
{
  "companies": ["slack.com", "https://www.trustpilot.com/review/fiverr.com"],
  "maxReviews": 200,
  "stars": ["1", "2"],
  "dateRange": "last3months",
  "languages": "en",
  "includeCompanyRow": true
}
```

#### Filters

- `stars` — any combination of 1 to 5.
- `languages` — a two-letter code, or `all`.
- `dateRange` — `last30days`, `last3months`, `last6months`, `last12months`, or empty for all time.
- `keyword` — only reviews mentioning a word, for example `refund`.
- `verifiedOnly` — only reviews Trustpilot verified.
- `withRepliesOnly` — only reviews the company answered.
- `sort` — `recency` (default) or `relevance`.

All filters are Trustpilot's own, applied on their side, so a run for 200 complaints reads only complaint pages rather than paging through everything.

#### Searching companies by name

Put names into `searchTerms` to get `search-result` rows with the matching domains and TrustScores. Switch on **Also scrape reviews of search results** to collect reviews for every match in the same run.

#### Company profiles without reviews

Set `maxReviews` to `0` and you get only the company rows — a cheap way to pull TrustScores and review counts for a long list of domains.

### ⬆️ Output

![Trustpilot Reviews API output: reviews with rating, dates, reviewer country, verification and company replies](https://raw.githubusercontent.com/lergassy/apify-actor-assets/main/trustpilot-reviews-api/trustpilot-reviews-api-output-table.png)

```json
{
  "rowType": "review",
  "companyDomain": "fiverr.com",
  "companyName": "Fiverr",
  "companyTrustScore": 2.3,
  "reviewId": "6a9aef96e362f002a33f21c4",
  "reviewUrl": "https://www.trustpilot.com/reviews/6a9aef96e362f002a33f21c4",
  "title": "Fiverr Won't Honor Their Buyer Credits",
  "text": "Fiverr has been terribly disappointing from a buyer perspective…",
  "rating": 1,
  "publishedAt": "2026-09-04T18:19:34.000Z",
  "experiencedAt": "2026-09-03T00:00:00.000Z",
  "language": "en",
  "isVerified": false,
  "verificationLevel": "not-verified",
  "reviewSource": "Organic",
  "consumerName": "Christian Dudnick",
  "consumerCountry": "US",
  "consumerReviewCount": 2,
  "replyText": null,
  "status": "ok"
}
```

```json
{
  "rowType": "company",
  "companyDomain": "slack.com",
  "companyName": "Slack",
  "trustScore": 2.1,
  "stars": 2,
  "reviewCount": 365,
  "reviewCountLast12Months": 44,
  "isClaimed": false,
  "primaryCategory": "Software Company",
  "countryCode": "US"
}
```

#### Error rows

| `errorCode` | Meaning |
| --- | --- |
| `invalid-company` | The value is not a domain or a Trustpilot URL |
| `not-found` | Trustpilot has no page for this company |
| `token-expired` / `http-error` / `network-error` | Trustpilot could not be read; retry |
| `rate-limited` | Trustpilot asked to slow down; lower concurrency |

### Use cases for Trustpilot data

#### Competitor monitoring

Schedule a weekly run over your competitors with `dateRange: last30days` and read what their customers complain about. `replyText` shows how they answer.

#### Reputation and support

Pull your own reviews with `withRepliesOnly: false` and `stars: ["1","2"]` to find unanswered complaints.

#### Lead lists and due diligence

`maxReviews: 0` turns a list of domains into TrustScores, review counts and claim status — a fast quality signal for prospect lists and vendor checks.

#### Sentiment and LLM pipelines

Every review is clean text with a rating, a date and a country, ready for a summarisation or sentiment prompt.

### Integrations

- **API**: `POST https://api.apify.com/v2/acts/lergassy~trustpilot-reviews-api/runs`
- **Python**: `ApifyClient(token).actor('lergassy/trustpilot-reviews-api').call(run_input={'companies': ['slack.com']})`
- **JavaScript**: `await client.actor('lergassy/trustpilot-reviews-api').call({ companies: ['slack.com'] })`
- **n8n, Make, Zapier, Google Sheets, Airtable**: run the Actor and map the dataset onward; set a max total charge in n8n for scheduled runs.
- **MCP**: available through the Apify MCP server as a callable tool.
- **Webhooks**: fire a webhook when a run finishes.

### 🤖 For AI agents and LLM apps

```json
{ "companies": ["slack.com"], "maxReviews": 50 }
```

- `rowType` separates `review`, `company`, `search-result` and `error` rows.
- Reviews arrive newest first; `publishedAt` is ISO 8601.
- `companyTrustScore` is repeated on every review row, so a single row is self-describing.
- Failed companies are never charged, so retries are cheap.

### ❓ FAQ

#### Is it legal to scrape Trustpilot reviews?

The Actor reads public review pages that need no login and collects only what Trustpilot shows to any visitor. How you may store and use that data depends on your jurisdiction and on Trustpilot's terms; check both before running at scale. This is not legal advice.

#### Do I need a proxy, a login or an API key?

No. Trustpilot's pages are protected by a browser verification step; the Actor passes it once at the start of a run and reads all pages with plain HTTP afterwards. No proxy is needed, and none is charged for.

If Trustpilot refuses the verification from the address your run happens to get — some data-centre ranges are treated more harshly than others — the Actor answers the challenge through an Apify proxy instead and carries on. The token it gets back is not tied to an address, so the pages themselves are still read directly. You will see which route was used in the run log.

#### How many reviews can I get for one company?

All of them. Trustpilot pages reviews 20 at a time, and the Actor keeps reading until it reaches your limit or the last page.

#### Can I get only negative reviews?

Yes: set **Star ratings to include** to 1 and 2. Filtering happens on Trustpilot's side, so the run stays fast.

#### Can I use it with the Apify API or an MCP server?

Yes to both, like any Apify Actor.

#### Does it include company replies?

Yes, in `replyText` and `replyPublishedAt`, and `withRepliesOnly` limits a run to answered reviews.

### Your feedback

Missing a field or a filter? Open an issue on the **Issues** tab — issues are answered quickly.

### You might also like

| Actor | What it does |
| --- | --- |
| [Software Reviews Scraper](https://apify.com/lergassy/software-reviews-scraper) | Capterra, Software Advice, GetApp and TrustRadius reviews in one schema |
| [Document Text Extractor](https://apify.com/lergassy/document-text-extractor) | PDF, Word, Excel and PowerPoint to Markdown, tables and RAG chunks |
| [OCR Text Extractor](https://apify.com/lergassy/ocr-text-extractor) | Images and scanned PDFs to text with confidence scores |
| [Email & Phone Verifier](https://apify.com/lergassy/email-phone-verifier) | Validate e-mail addresses and phone numbers |

# Actor input Schema

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

Company domains or Trustpilot review URLs, one per line: <code>slack.com</code>, <code>https://www.trustpilot.com/review/fiverr.com</code>.

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

Company names to look up on Trustpilot when you do not know the domain. Each term returns matching companies as <code>search-result</code> rows.

## `maxReviews` (type: `integer`):

How many reviews to collect for each company, newest first. Set 0 to collect company profiles only.

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

Keep only reviews with these ratings. Leave empty for all. Pick 1 and 2 to collect complaints only.

## `languages` (type: `string`):

Two-letter language code such as <code>en</code>, <code>de</code>, <code>fr</code>, or <code>all</code> for every language.

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

Only reviews from this period.

## `keyword` (type: `string`):

Keep only reviews that mention this word, for example <code>refund</code>.

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

Keep only reviews Trustpilot marks as verified.

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

Keep only reviews the company has answered.

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

Newest first, or Trustpilot's relevance order.

## `includeCompanyRow` (type: `boolean`):

Add one row per company with TrustScore, star rating, review counts, categories and claim status.

## `maxSearchResults` (type: `integer`):

How many matching companies to return for each search term.

## `scrapeSearchResults` (type: `boolean`):

After a search, collect reviews for every company it found, using the limits above.

## `maxConcurrency` (type: `integer`):

How many companies to scrape at the same time.

## `requestTimeoutSecs` (type: `integer`):

How long to wait for one page before giving up on it.

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

Optional. The Actor works without a proxy. Add one only if Trustpilot starts refusing your runs.

## Actor input object example

```json
{
  "companies": [
    "slack.com",
    "https://www.trustpilot.com/review/fiverr.com"
  ],
  "maxReviews": 100,
  "languages": "en",
  "dateRange": "",
  "verifiedOnly": false,
  "withRepliesOnly": false,
  "sort": "recency",
  "includeCompanyRow": true,
  "maxSearchResults": 10,
  "scrapeSearchResults": false,
  "maxConcurrency": 4,
  "requestTimeoutSecs": 45,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `reviews` (type: `string`):

Dataset with reviews, company profiles and search results.

## `reviewsInConsole` (type: `string`):

Browse the results in the Apify Console.

# 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": [
        "slack.com",
        "https://www.trustpilot.com/review/fiverr.com"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("lergassy/trustpilot-reviews-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 = { "companies": [
        "slack.com",
        "https://www.trustpilot.com/review/fiverr.com",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("lergassy/trustpilot-reviews-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 '{
  "companies": [
    "slack.com",
    "https://www.trustpilot.com/review/fiverr.com"
  ]
}' |
apify call lergassy/trustpilot-reviews-api --silent --output-dataset

```

## MCP server setup

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