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

Scrape Trustpilot reviews for any company by domain, link or keyword: rating, text, date, reviewer, company replies. Filters, insights. No login.

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

## Pricing

Pay per event + usage

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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?

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 Scraper: Ratings, Replies & Insights

Export Trustpilot reviews for any company by domain, Trustpilot link or keyword: star rating, title, full text, date, language, verified flag and the company's reply, as JSON, CSV or Excel, from **$0.11 per 1,000 reviews**.

> **Limit: at most 400 reviews per company per run** (200 by default, 400 with **Get more than 200 reviews**). This is a fixed limit of the data source behind this Actor, not a setting we can raise. For the complete history of a company with thousands of reviews, use an Actor that advertises unlimited reviews (3.4–8.4× the price on the Free plan for 1,000 reviews — see [Compared with alternatives](#compared-with-alternatives)), or schedule this Actor with **Only new reviews** to build the history going forward.

### Why this Actor

- **Low price:** $0.22 per 1,000 reviews ($0.11 on Gold and higher plans) plus $0.0035 per company. No start fee, no monthly fee (platform usage billed separately — see Pricing).
- **Flat rows with a stable `id`:** rating, title, text, language, date, verified flag, photos, company reply (text, date, all replies) and company context (name, website, TrustScore, total reviews, address). Reviewer details (name, country, profile, number of reviews written) are **off by default for privacy** and can be turned on.
- **Star, verified, language and date filters**, and up to 400 reviews per company with **Get more than 200 reviews**.
- **Three ways in:** company domains, Trustpilot links from any country site, or keyword search (up to 140 companies per keyword) — plus a company-list mode for lead lists.
- **Built for monitoring:** "Only new reviews" skips (and does not charge as reviews) reviews delivered by earlier runs; a free INSIGHTS record gives rating distribution, monthly trend, reply rate and top words per company.

### Compared with alternatives

Typical run: **1,000 reviews from 5 companies**. Prices from public Apify Store listings, checked September 2026 (start fees included; **optional add-on events excluded** — e.g. the most-used Actor also offers company metadata at $0.01 per company and AI insights at $0.02–$0.05 per company). The other Actors include platform usage in their price; for this Actor Apify platform usage is billed separately by Apify (at the default 256 MB a small run typically uses about $0.001–$0.003), so add about $0.001–$0.003 to its row.

| Actor | Free plan | Gold plan | Start fee | Platform usage | Reviews per company |
|---|---|---|---|---|---|
| Most-used Trustpilot Actor (~2,800 users) | $0.80 | $0.525 | ✓ ($0.025–$0.05) | Included | No cap (as advertised) |
| Second most-used (~2,300 users) | $0.58 | $0.305 ($0.205 Platinum, $0.145 Diamond) | ✓ ($0.005) | Included | Not stated |
| Cheapest flat-rate Actor ($0.25 / 1,000) | $0.255 | $0.255 | ✓ ($0.005) | Included | More than 200 (as advertised) |
| "Unlimited reviews" Actor | $2.00 ($0.40 on Bronze) | $0.30 | ✓ ($0.0005) | Included | Unlimited (as advertised) |
| **This Actor** | **$0.2375** | **$0.1275** | ✗ | Billed separately (~$0.001–$0.003) | **400 (fixed maximum)** |

What the table means:

- **For up to 400 reviews per company, this Actor is the lowest-priced option in the table** on every plan for this run (on Platinum and Diamond our Gold price of $0.1275 applies), also after adding its platform usage, and adds free INSIGHTS, keyword search, company lists and an **Only new reviews** mode that does not charge repeats.
- **Need more than 400 reviews of one company?** This Actor cannot deliver them. Actors advertising "no cap" / "unlimited" (we have not verified these claims) may go deeper, but the same 1,000 reviews cost $0.80–$2.00 on the Free plan ($0.30–$0.525 on Gold). Pick one of them for one-off full-history exports of large companies.
- Prices for other run sizes differ; start fees weigh more on small runs (this Actor has none).

### Not included

- **More than 400 reviews per company** — a fixed limit of the data source (see above). Workaround: schedule runs with **Only new reviews** to keep a complete history from today on.
- **Private business-account data** (invitation statistics, reviewer e-mails, TrustBox widgets) — only public data is collected.
- **Review sites other than Trustpilot** (G2, Capterra, Yelp) — not covered. For **Google Maps reviews and places**, use [Google Maps Scraper Plus](https://apify.com/cheapapi/google-maps-scraper-plus).
- **Sentiment scores per review** — export the text to your own model; INSIGHTS gives rating distribution and top words for free.
- **Company rankings in Google search** — use [Google SERP Scraper](https://apify.com/cheapapi/google-serp-scraper); for how brands appear in AI answers, use [AI Search Visibility Tracker](https://apify.com/cheapapi/ai-search-visibility-tracker).

### What data you get

One row per review (examples from a real run):

| Field | Type | Example |
|---|---|---|
| `id` | string | `3f9f139b9c4370ce` (stable: same review → same ID in every run) |
| `input` | string | `abetter.bid` |
| `searchKeyword` | string | null | `car insurance` (keyword search only, otherwise `null`) |
| `companyDomain` | string | `abetter.bid` |
| `companyName` | string | `A Better Bid` |
| `companyTrustpilotUrl` | string | `https://www.trustpilot.com/review/abetter.bid` |
| `companyWebsite` | string | null | `https://abetter.bid` (website from keyword search; otherwise derived from the Trustpilot domain) |
| `companyLocation` | string | null | `1201 N. Orange Street Suite #7258 Wilmington 19801 US` |
| `companyOverallRating` | number | `2.9` (TrustScore) |
| `companyReviewsCount` | integer | `124` |
| `reviewId` | string | `6a99bf97d9fe5fdcca9099e8` |
| `reviewUrl` | string | `https://www.trustpilot.com/reviews/6a99bf97d9fe5fdcca9099e8` |
| `rating` | number | `5` |
| `title` | string | `Smooth transitions.` |
| `text` | string | `Smooth, seamless process and transactions…` |
| `language` | string | `en` |
| `publishedAt` | string (ISO 8601) | `2026-09-03T20:42:31.000Z` |
| `verified` | boolean | `false` |
| `images` | string\[] | `[]` |
| `position` | integer | `1` (position in the sort order it was collected in) |
| `reviewerName` | string | *(only with **Include reviewer details**)* `I WIN` |
| `reviewerProfileUrl` | string | *(only with **Include reviewer details**)* `https://www.trustpilot.com/users/6a99bf8e186db6423b36b225` |
| `reviewerAvatarUrl` | string | null | *(only with **Include reviewer details**)* `https://user-images.trustpilot.com/…/73x73.png` |
| `reviewerCountry` | string | null | *(only with **Include reviewer details**)* `US` |
| `reviewerReviewsCount` | integer | null | *(only with **Include reviewer details**)* `1` (helps spot one-off accounts) |
| `hasCompanyReply` | boolean | `true` |
| `companyReplyText` | string | null | `Thank you so much for your positive feedback!` |
| `companyReplyDate` | string | null | `2026-09-09T14:46:32.000Z` |
| `companyReplies` | object\[] | `[{ "title", "text", "date" }]` |
| `scrapedAt` | string (ISO 8601) | `2026-09-28T10:07:40.832Z` |

`companyReplyText`, `companyReplyDate` and `companyReplies` are left out when **Include company replies** is off. The five `reviewer…` fields are included only when **Include reviewer details** is on (off by default).

In **Only list companies** mode each row is a company: `id`, `keyword`, `rank`, `companyName`, `companyDomain`, `companyWebsite`, `companyTrustpilotUrl`, `rating`, `reviewsCount`, `scrapedAt`.

The key-value store also holds **INSIGHTS** (free, per company: average rating, 1–5 star distribution, monthly rating trend, verified share, reply share, languages, top words in positive and negative reviews) and **RUN\_SUMMARY** (counts, skipped inputs and why, errors, whether the budget stopped the run).

### How to use

1. Open the Actor in Apify Console and click **Try for free**.
2. In **Companies**, enter one company per line — the domain as Trustpilot shows it (`www.airbnb.com`) or the Trustpilot link (`https://uk.trustpilot.com/review/www.booking.com`). Tip: open the company on Trustpilot and copy the link from your browser.
3. Set **Max reviews per company** (default 100, up to 200; up to 400 with **Get more than 200 reviews**).
4. Optional: open **Advanced: review options** (sort, more reviews, replies, reviewer details, monitoring), **Filters** (stars, verified, language, date) or the keyword search section.
5. Click **Start**. Most runs finish in 1–3 minutes.
6. Download the results as JSON, CSV, Excel or HTML from the **Output** tab, or read them through the API.

Ready-to-paste input:

```json
{
    "companies": ["www.airbnb.com", "https://uk.trustpilot.com/review/www.booking.com"],
    "maxReviewsPerCompany": 100
}
```

#### API

**curl** (runs the Actor and returns the reviews in one call):

```bash
curl -X POST "https://api.apify.com/v2/acts/cheapapi~trustpilot-reviews-scraper/run-sync-get-dataset-items?token=<YOUR_TOKEN>" \
  -H "Content-Type: application/json" \
  -d '{"companies": ["www.airbnb.com"], "maxReviewsPerCompany": 100}'
```

**JavaScript** (`npm install apify-client`):

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

const client = new ApifyClient({ token: '<YOUR_TOKEN>' });
const run = await client.actor('cheapapi/trustpilot-reviews-scraper').call({
    companies: ['www.airbnb.com'],
    maxReviewsPerCompany: 100,
    maxRating: 2, // only 1–2 star reviews
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, items[0]?.title);
```

**Python** (`pip install apify-client`):

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_TOKEN>")
run = client.actor("cheapapi/trustpilot-reviews-scraper").call(run_input={
    "companies": ["www.airbnb.com"],
    "maxReviewsPerCompany": 100,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["rating"], item["title"])
```

### Use cases

- **Reputation monitoring:** schedule a daily run with **Only new reviews** and alert your team about new 1–2 star reviews.
- **Competitor benchmarking:** compare TrustScore, rating trend and reply rate across dozens of competitors in one run.
- **Customer-experience research:** collect negative reviews (`maxRating: 2`) and group complaints with the INSIGHTS top words.
- **AI and sentiment pipelines:** feed clean review text with language codes into an LLM or a sentiment model.
- **Lead generation:** list companies in a category (`car insurance`, `web hosting`) with their rating and review count, then target low-rated ones.
- **Due diligence:** check how a supplier or acquisition target treats unhappy customers (reply rate, reply text).

### Advanced options

| Option | Input name | Default | What it does |
|---|---|---|---|
| Sort reviews by | `sortBy` | `recency` | `recency` = most recent first, `relevance` = Trustpilot's default order |
| Get more than 200 reviews | `getMoreReviews` | `false` | Adds a second request per company in the other sort order and removes duplicates: up to 400 distinct reviews per company (fewer, sometimes none, when the two orders overlap). One extra company event per company where it adds reviews; "page checked" fees when it adds few or none (see Pricing) |
| Minimum star rating | `minRating` | `1` | Only reviews with at least this many stars (1–5; `4` = 4 and 5 stars) |
| Maximum star rating | `maxRating` | `5` | Only reviews with at most this many stars (1–5; `2` = negative only) |
| Only verified reviews | `onlyVerified` | `false` | Only reviews Trustpilot marks as verified |
| Review languages | `languages` | all | Language codes, e.g. `["en", "de"]` |
| Reviews published from / until | `dateFrom` / `dateTo` | none | Date range, `YYYY-MM-DD` |
| Include company replies | `includeCompanyReplies` | `true` | Turn off to leave reply text and date out (`hasCompanyReply` stays) |
| Include reviewer details | `includeReviewerDetails` | `false` | Adds reviewer name, profile URL, avatar URL, country and number of reviews written (personal data — see Privacy) |
| Only new reviews | `skipPreviouslyScraped` | `false` | Skips (and does not charge as reviews) reviews delivered by earlier runs with this option on; a company with nothing new costs "page checked" fees (see Pricing). The list is kept in your key-value store `trustpilot-reviews-seen` |
| Company insights summary | `generateInsights` | `true` | Free INSIGHTS record per run |
| Find companies by keyword | `searchKeywords` | none | Company names or categories to search on Trustpilot |
| Companies per keyword | `maxCompaniesPerSearch` | `5` | Top matches used per keyword (1–140) |
| Only list companies | `companiesOnly` | `false` | Return the matching companies instead of their reviews |
| Processing speed | `processingSpeed` | `auto` | `auto` (fast below 2,000 expected reviews, economy above), `fast` (usually 1–3 min), `economy` (up to ~45 min, applied to runs of 500+ reviews). Same event prices; economy needs fewer "page checked" fees |

The star, verified, language and date options are grouped under **Filters** in the input form. Filters are applied to the reviews read for each company (up to 200 in your sort order, or up to 200 in each order with **Get more than 200 reviews**), so a filtered run can return fewer rows than the maximum.

**How "Get more than 200 reviews" works:** one request returns at most 200 reviews of a company in one sort order. With the option on, a company that has more reviews than were read gets a second request in the other order (newest ↔ most relevant). Reviews are de-duplicated by review ID, so you pay only for distinct reviews. How many new reviews the second request adds depends on how much the two orders overlap — anywhere from none to 200. For very active companies the two orders can overlap completely (in our test with a company with 100,000+ reviews the second request added no new reviews); a second request that adds no new reviews is not charged as reviews or as a company, only the "page checked" fees that cover it (see Pricing). The second request is only made when it can help: the first one came back full, the company has more reviews on Trustpilot, and fewer reviews than your maximum were delivered (because the maximum is above 200, or filters / **Only new reviews** left some out).

Advanced input example:

```json
{
    "companies": ["www.airbnb.com"],
    "searchKeywords": ["car insurance"],
    "maxCompaniesPerSearch": 10,
    "maxReviewsPerCompany": 400,
    "getMoreReviews": true,
    "sortBy": "recency",
    "maxRating": 2,
    "languages": ["en"],
    "dateFrom": "2026-01-01",
    "includeCompanyReplies": true,
    "includeReviewerDetails": false,
    "skipPreviouslyScraped": true,
    "processingSpeed": "auto"
}
```

### Output example

Example output — a real review row (default settings, reviewer details off):

```json
{
    "id": "3f9f139b9c4370ce",
    "input": "abetter.bid",
    "searchKeyword": null,
    "companyDomain": "abetter.bid",
    "companyName": "A Better Bid",
    "companyTrustpilotUrl": "https://www.trustpilot.com/review/abetter.bid",
    "companyWebsite": "https://abetter.bid",
    "companyLocation": "1201 N. Orange Street  Suite #7258 Wilmington 19801 US",
    "companyOverallRating": 2.9,
    "companyReviewsCount": 124,
    "reviewUrl": "https://www.trustpilot.com/reviews/6a99bf97d9fe5fdcca9099e8",
    "reviewId": "6a99bf97d9fe5fdcca9099e8",
    "rating": 5,
    "title": "Smooth transitions.",
    "text": "Smooth, seamless process and transactions. Answer all concerns and questions. Great business. ",
    "language": "en",
    "publishedAt": "2026-09-03T20:42:31.000Z",
    "verified": false,
    "images": [],
    "position": 1,
    "hasCompanyReply": true,
    "companyReplyText": "Thank you so much for your positive feedback!",
    "companyReplyDate": "2026-09-09T14:46:32.000Z",
    "companyReplies": [
        {
            "title": "Reply from A Better Bid",
            "text": "Thank you so much for your positive feedback!",
            "date": "2026-09-09T14:46:32.000Z"
        }
    ],
    "scrapedAt": "2026-09-28T10:07:40.832Z"
}
```

With **Include reviewer details** on, the row also has `"reviewerName": "I WIN"`, `"reviewerProfileUrl": "https://www.trustpilot.com/users/6a99bf8e186db6423b36b225"`, `"reviewerAvatarUrl": "https://user-images.trustpilot.com/6a99bf8e186db6423b36b225/73x73.png"`, `"reviewerCountry": "US"` and `"reviewerReviewsCount": 1`.

Example output — a company row in **Only list companies** mode:

```json
{ "id": "eec8c293f43609dd", "keyword": "pizza restaurant", "rank": 1, "companyName": "Pizza Bella Milano Restaurant og Grill", "companyDomain": "pizzabellamilano.dk", "companyWebsite": "https://pizzabellamilano.dk/", "companyTrustpilotUrl": "https://www.trustpilot.com/review/pizzabellamilano.dk", "reviewsCount": 30, "rating": 1.5, "scrapedAt": "2026-09-28T10:14:14.345Z" }
```

The dataset has three table views: **Reviews**, **Companies** and **Company list (keyword search)**.

### Pricing

**Typical cost: about $0.24 for 1,000 reviews from 5 companies ($0.13 on Gold and higher plans), plus Apify platform usage billed separately.**

**Apify Free plan:** Apify does not pay developers for usage on its Free plan, so on the Free plan this Actor can be used for up to **$0.25 of results per calendar month** — enough to try it on a small input. When the allowance is used up, the run ends with a clear message (not an error). Any paid Apify plan removes the limit; prices are the same.

Pay per event: you pay for reviews and companies delivered. No start fee, no monthly fee. Apify platform usage is billed separately by Apify (at the default 256 MB a small run typically uses about $0.001–$0.003).

| Event | Free | Bronze | Silver | Gold, Platinum, Diamond | When it is charged |
|---|---|---|---|---|---|
| Review | $0.22 / 1,000 | $0.22 / 1,000 | $0.22 / 1,000 | **$0.11 / 1,000** | Per review delivered |
| Company with reviews | $0.0035 | $0.0035 | $0.0035 | $0.0035 | Once per company that delivered at least one review; with **Get more than 200 reviews**, once more when the second request adds at least one new review |
| Keyword search | $0.003 | $0.003 | $0.003 | $0.003 | Once per keyword that found at least one company (never for companies you enter directly) |
| Company listed | $0.0003 | $0.0003 | $0.0003 | $0.0002 | Per company row in **Only list companies** mode |
| Page checked | $0.0022 | $0.0022 | $0.0022 | $0.0022 | Only when a request delivered too little to pay for the pages it read — see below |

**When "Page checked" is charged.** Reviews are read in pages of 20 and search results in pages of 10, and every page read has a cost, whether or not anything is delivered. When the reviews (or companies) delivered for a request don't cover the pages it read, the difference is charged as "Page checked" events — **never more than one per page read**, and none when a normal company delivers the reviews you asked for. It happens when:

- star / verified / language / date filters match nothing (or very little) of the reviews read,
- **Only new reviews** finds nothing new since the last run,
- a company has far fewer reviews than **Max reviews per company**, or has no Trustpilot page,
- the second request of **Get more than 200 reviews** adds no (or few) new reviews,
- a keyword finds no company, or **Companies per keyword** is above 10 in review mode (extra search pages),
- a request was sent but got no answer (the data service may still have processed it).

Worked examples:

| Run | Free / Bronze / Silver | Gold and above |
|---|---|---|
| 1 company × 100 reviews | 100 × $0.00022 + $0.0035 = **$0.0255** | **$0.0145** |
| 10 companies × 200 reviews | 2,000 × $0.00022 + 10 × $0.0035 = **$0.475** | **$0.255** |
| 1 company, "Get more than 200 reviews", 400 distinct reviews | 400 × $0.00022 + 2 × $0.0035 = **$0.095** | **$0.051** |
| Keyword → 5 companies × 100 reviews | 500 × $0.00022 + 5 × $0.0035 + $0.003 = **$0.1305** | **$0.0755** |
| Keyword → list of 20 companies | $0.003 + 20 × $0.0003 = **$0.009** | **$0.007** |
| Daily monitor, **Only new reviews**, max 20, nothing new that day | 1 × $0.0022 = **$0.0022** per company | **$0.0022** |
| 1 company, max 100, filters match nothing (fast) | 5 × $0.0022 = **$0.011** | **$0.011** |
| 1 company with only 3 reviews, max 100 (fast) | 3 × $0.00022 + $0.0035 + 3 × $0.0022 = **$0.01076** | 3 × $0.00011 + $0.0035 + 3 × $0.0022 = **$0.01043** |

Plus Apify platform usage (see above). Set **Maximum cost per run** in the run options: before each request the Actor reserves the most that request can cost (including "Page checked" fees), so it never charges beyond your maximum, stops cleanly when it is reached and keeps everything delivered so far. On Gold and higher plans the second request of "Get more than 200 reviews" uses economy processing, which can take up to ~45 minutes.

### Integrations

- **Make and Zapier:** use the Apify app to start the Actor and pass new reviews to Slack, e-mail, a CRM or a helpdesk.
- **Google Sheets:** export the dataset, or use the Apify Google Sheets integration to add rows after each run.
- **Webhooks:** get a call to your URL when a run succeeds or fails (Actor → Integrations → Webhooks).
- **Schedules:** run daily or weekly with **Only new reviews** on for low-cost monitoring (Console → Schedules).
- **API and MCP:** start runs and read datasets from any language through the Apify API (examples above), or let AI agents call the Actor through the Apify MCP server.

### FAQ

**Is there a limit on the Apify Free plan, and is platform usage included?** On the Free plan you can use up to $0.25 of this Actor's results per calendar month, enough to try it (Apify pays developers nothing for Free-plan usage while our data costs are real). Runs that reach the allowance stop cleanly and keep everything collected so far; the allowance resets on the 1st of the month; paid Apify plans have no limit. Apify platform usage is not included: it is billed separately by Apify (at the default 256 MB a small run typically uses about $0.001–$0.003).

**Is it legal to scrape Trustpilot reviews?** The Actor collects only publicly visible reviews — the same data anyone sees without logging in. Reviewer names, countries and profile links are left out unless you turn on **Include reviewer details**; review texts can still contain personal data, so make sure your use complies with GDPR, CCPA and Trustpilot's terms, e.g. analyze in aggregate and don't contact reviewers. If unsure, ask a lawyer.

**How fresh is the data?** Every run collects reviews from Trustpilot at run time; `scrapedAt` shows when.

**Why did I get fewer reviews than I asked for?** The company has fewer reviews, your star/verified/language/date filters removed some (filters work on the reviews read — see Advanced options), **Only new reviews** skipped ones delivered before, or your maximum cost per run was reached. RUN\_SUMMARY lists skipped companies with the reason.

**How many reviews can I get per company?** Up to 200 by default and up to 400 with **Get more than 200 reviews** (newest and most relevant reviews combined, duplicates removed). 400 is a fixed limit of the data source; for complete histories of very large companies see [Compared with alternatives](#compared-with-alternatives). To build a company's history over time, schedule the Actor with **Only new reviews**.

**Which company identifier do I use?** The part after `/review/` in the Trustpilot link — for Airbnb that is `www.airbnb.com`; for many companies it is the domain without `www`. Pasting the whole Trustpilot link always works.

**How do I control my budget, and why was I charged for "Page checked"?** Set **Maximum cost per run**; the Actor never charges beyond it, and requests rejected before any data was read are free. Each page of 20 reviews (or 10 search results) the Actor reads costs money, even when nothing is delivered. When a company delivered too few reviews to pay for the pages read — filters matched nothing, **Only new reviews** found nothing new, the company has fewer reviews than your maximum, the extra request of **Get more than 200 reviews** added nothing, a keyword found no company, or a request got no answer — the difference is charged as "Page checked" events at $0.0022 each, never more than one per page read. RUN\_SUMMARY shows `pagesCheckedCharged`. To keep it low, set **Max reviews per company** close to what you expect to get (e.g. 20 for daily monitoring).

**Can I monitor companies automatically?** Yes — create a schedule with **Only new reviews** on. Each run delivers (and charges as reviews) only reviews that earlier runs have not delivered; a company with nothing new costs a small "Page checked" fee ($0.0022 with **Max reviews per company** 20); add a webhook or a Make/Zapier scenario for alerts.

**Which export formats are available?** JSON, JSONL, CSV, Excel, XML and HTML from the Output tab or the API, plus Google Sheets through the integration.

**Do I need a Trustpilot account, API key or proxies?** No. Enter companies and click Start.

**Why does a run take a few minutes?** Reviews are collected fresh for every run. Fast mode usually takes 1–3 minutes; economy mode (automatic for runs of 2,000+ reviews) can take up to ~45 minutes at the same event prices.

**Where do I get help?** Open an issue on the Actor's **Issues** tab in Apify Console with your run ID.

### Limitations

- At most 200 reviews per company by default and 400 with **Get more than 200 reviews** — a fixed limit of the data source; the full history of very large companies (thousands of reviews) is not available in one run.
- With **Get more than 200 reviews**, the number of extra reviews depends on how much the newest and most relevant orders overlap, so 400 distinct reviews are not guaranteed.
- Star, verified, language and date filters are applied to the reviews read, not by Trustpilot, so filtered runs can return fewer rows.
- Keyword search returns up to 140 companies per keyword; generic keywords can match unrelated companies.
- Reviewer country, photos and company replies are present only when Trustpilot shows them.
- Companies without a Trustpilot page return no reviews; they are not charged as companies or reviews, but the pages read cost "Page checked" fees (see Pricing).

### Privacy

**Privacy by default:** reviewer details (display name, profile link, avatar link, country, number of reviews written) are **not included** unless you turn on **Include reviewer details** — the same default as our Google Maps, YouTube and App Store Actors. The Actor collects only what is public on Trustpilot, never private account data, and your results stay in your own Apify account. Review texts may still mention people; you are responsible for processing the data lawfully (e.g. GDPR, CCPA). Turn reviewer details on only when you have a lawful reason, such as replying to or moderating reviews of your own company.

# Actor input Schema

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

Companies to collect reviews for. Enter the website domain as Trustpilot shows it (e.g. www.airbnb.com) or paste the Trustpilot review page link (e.g. https://www.trustpilot.com/review/www.airbnb.com — any country site like uk.trustpilot.com works). One per line; bulk lists are fine.

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

How many reviews to collect for each company (newest first by default). Up to 200, or up to 400 with "Get more than 200 reviews" below; 400 per company is a fixed maximum of the data source. You pay per review delivered. Tip: for daily monitoring use a small value such as 20 — see Pricing in the README for the small "page checked" fee.

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

Which reviews come first (and therefore which ones you get when you set a limit).

## `getMoreReviews` (type: `boolean`):

Adds a second request in the other sort order (newest + most relevant) for companies with more reviews, removes duplicates and lets "Max reviews per company" go up to 400. The number of extra reviews depends on how much the two orders overlap. Distinct reviews only are charged, plus one extra company event where new reviews were added — details in the README.

## `includeCompanyReplies` (type: `boolean`):

Add the company's reply to each review (text, date and all replies). hasCompanyReply is always included.

## `includeReviewerDetails` (type: `boolean`):

Add the reviewer's display name, profile link, avatar link, country and number of reviews written. Off by default because these are personal data; turn on only if you have a lawful reason to process them.

## `skipPreviouslyScraped` (type: `boolean`):

For monitoring: reviews already delivered by earlier runs with this option on are left out and not charged as reviews. A company with nothing new costs a small "page checked" fee (see the README). The list of seen reviews is kept in your key-value store "trustpilot-reviews-seen".

## `generateInsights` (type: `boolean`):

Free: saves an INSIGHTS record per run with each company's rating distribution, monthly rating trend, verified and reply rates, and the most frequent words in positive and negative reviews.

## `minRating` (type: `integer`):

Only reviews with at least this many stars (1–5; 1 = no lower limit). Example: 4 keeps only 4- and 5-star reviews.

## `maxRating` (type: `integer`):

Only reviews with at most this many stars (1–5; 5 = no upper limit). Example: 2 keeps only negative (1- and 2-star) reviews.

## `onlyVerified` (type: `boolean`):

Only reviews Trustpilot marks as verified.

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

Only reviews in these languages (codes such as en, de, fr, es, it, nl, da). Leave empty for all languages.

## `dateFrom` (type: `string`):

Only reviews published on or after this date (YYYY-MM-DD).

## `dateTo` (type: `string`):

Only reviews published on or before this date (YYYY-MM-DD).

## `searchKeywords` (type: `array`):

Company names or categories to search on Trustpilot.

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

How many of the top matching companies to use per keyword (1–140). Values above 10 in review mode read extra search pages, which can add small "page checked" fees (see the README).

## `companiesOnly` (type: `boolean`):

Return the matching companies (name, domain, website, rating, review count) instead of their reviews — handy for lead lists and market maps.

## `processingSpeed` (type: `string`):

Fast: results usually in 1–3 minutes. Economy: can take up to ~45 minutes, used for large runs (500+ reviews). Automatic: fast for normal runs, economy for runs of 2,000+ reviews. Event prices are the same; economy needs fewer "page checked" fees when a company delivers few reviews.

## Actor input object example

```json
{
  "companies": [
    "www.airbnb.com"
  ],
  "maxReviewsPerCompany": 100,
  "sortBy": "recency",
  "getMoreReviews": false,
  "includeCompanyReplies": true,
  "includeReviewerDetails": false,
  "skipPreviouslyScraped": false,
  "generateInsights": true,
  "minRating": 1,
  "maxRating": 5,
  "onlyVerified": false,
  "maxCompaniesPerSearch": 5,
  "companiesOnly": false,
  "processingSpeed": "auto"
}
```

# Actor output Schema

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

No description

## `insights` (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.airbnb.com"
    ],
    "maxReviewsPerCompany": 100,
    "sortBy": "recency",
    "processingSpeed": "auto"
};

// Run the Actor and wait for it to finish
const run = await client.actor("cheapapi/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.airbnb.com"],
    "maxReviewsPerCompany": 100,
    "sortBy": "recency",
    "processingSpeed": "auto",
}

# Run the Actor and wait for it to finish
run = client.actor("cheapapi/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.airbnb.com"
  ],
  "maxReviewsPerCompany": 100,
  "sortBy": "recency",
  "processingSpeed": "auto"
}' |
apify call cheapapi/trustpilot-reviews-scraper --silent --output-dataset

```

## MCP server setup

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