# Trustpilot Reviews Scraper — company reviews, newest first (`inovaflow/trustpilot-reviews-scraper`) Actor

Public reviews of any company on Trustpilot, newest first: reviewer, country, stars, title, text, dates, verification, the company's reply, plus the company's TrustScore and review counts. Star, date and language filters. Paste a domain, Trustpilot link or name. No login, pay per review.

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

## Pricing

from $0.30 / 1,000 reviews

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

**Every public review of any company on Trustpilot — reviewer, country, stars, title, text, published and experience dates, verification, the company's reply, and the company's own TrustScore, stars and review counts — newest first, with Trustpilot's star, date and language filters. Paste a domain, a Trustpilot link or a name. No login, no API key, $0.30 per 1,000 reviews.**

If you track a brand's reputation, benchmark competitors or research a market, you know Trustpilot shows twenty reviews a page and nothing to export. The reviews are public — all of them — and every review page carries them in structured form, with the company's score and counts next to them. The only thing in the way is Trustpilot's bot wall, which lets browsers through and plain requests not. We open one real browser for about two seconds to pass it, then read every page the fast way.

We built this to feed our own review-intelligence reports and use it daily. Now we're sharing it.

### Who it's for

- **Brand and reputation teams** — *"every new review since Monday, with the ones we haven't answered."*
- **Competitive research** — *"the last 500 reviews of each of our three competitors, 1–2 stars only."*
- **Product and support** — *"what are people complaining about in the last 30 days?"*
- **Due diligence and analysts** — *"TrustScore, review counts and the full review history of these 50 companies."*
- **AI agents and pipelines** — *"reviews of company X as flat JSON, with the TrustScore on every row."*

### What you can enter

| Input | Example | What happens |
|---|---|---|
| **Domain** | `slack.com` | Read directly — the domain is how Trustpilot names a company |
| **Trustpilot link** | `https://www.trustpilot.com/review/notion.so` | The domain comes from the link |
| **Website** | `https://slack.com/intl/en-gb` | The domain comes from the address |
| **Company name** | `Asana` | Looked up in Trustpilot's search; the exact name wins, then the matching domain, else the top hit |

**Each row:** reviewer name, country and review count, stars, title, text, language, published / experience / updated dates, whether Trustpilot marks the review as verified and where it came from (organic or invited), the company's reply and its date, likes, and — repeated on every row so the table stands alone — the company's name, domain, Trustpilot page, website, TrustScore, stars, total and last-12-months review counts, categories, claimed status and country. Every row links to the review itself.

### Options that matter

- **Order** — *Newest first* (the default) or *Most relevant*, Trustpilot's own default view.
- **Only these star ratings** — pick `1` and `2` for the complaints. Trustpilot filters on its side, so you pay only for matching reviews.
- **Only reviews published on or after** — with *Newest first* the Actor stops paging as soon as it reaches older reviews; recent windows (30 days, 3, 6, 12 months) also use Trustpilot's own date filter, so a weekly check of a busy company costs only the new reviews.
- **Review languages** — every language by default (Trustpilot's page shows one language at a time; we ask for all). Give `en`, `de`… to narrow.
- **Verified only / replied only** — Trustpilot's own toggles.
- **Trustpilot site** — `www` by default; `uk`, `de`, `fr`… change the page language and the local companies in search. The reviews are the same.
- **Maximum reviews per company** — the cap on delivered rows and on what you pay. 50 is a quick look, 5,000 a deep history.

### How to set it up

1. Paste the companies (domains, links or names), one per line.
2. Pick the order and the filters, and set the maximum reviews per company.
3. Run. Rows land in the dataset company by company; the status message and the `OUTPUT` record say how each company was resolved, how many pages were read, how many reviews match your filters on Trustpilot's side, and why the Actor stopped.

### Pricing

Pay per result: **$0.0003 per review** ($0.30 per 1,000), plus the platform's start fee ($0.005 per GB of memory, two units at the default 2 GB — one real browser per parallel company needs the room). Reviews removed by your filters, duplicates and empty runs are never charged.

### Notes

- **No account, no key.** Everything comes from the public review pages.
- **The bot wall.** Trustpilot's challenge passes in a real browser; the Actor opens one for about two seconds per proxy session, keeps the token it receives and reads every page over plain HTTP with it. If a token stops working mid-run, the Actor mints a new one and continues.
- **Proxies.** Residential proxies pass the wall reliably and are the default; the browser and the page reads share one session so the token stays valid.
- **Company not on Trustpilot.** A domain without a Trustpilot page delivers no rows and the summary says `not found`.

# Actor input Schema

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

One per line: `slack.com`, `https://www.trustpilot.com/review/slack.com`, or `Slack`.

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

`Newest first` lets the date filter stop early. `Most relevant` is Trustpilot's own default view.

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

Stops after this many delivered reviews for each company. Also caps what you pay. 50 is a quick sample; 5,000 a deep history (20 reviews a page).

## `publishedAfter` (type: `string`):

A date, `YYYY-MM-DD`. With `Newest first` the Actor stops paging as soon as it reaches older reviews; recent windows also use Trustpilot's own date filter, so a weekly check of a busy company costs only the new reviews.

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

Empty = all. Pick the stars you want; `1` and `2` give you the complaints. Trustpilot filters server-side, so you pay only for matching reviews.

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

Empty = every language (`all`). Otherwise two-letter codes, e.g. `en`, `de`, `fr`.

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

Keep only reviews Trustpilot marks as verified (invited or verified purchase).

## `withReplyOnly` (type: `boolean`):

Keep only reviews with a company reply.

## `site` (type: `string`):

Which Trustpilot edition to read. All editions list the same reviews; the edition only changes the page language and the local companies in search. `www` (international, English) is the default.

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

How many companies are read at the same time (each on its own proxy session).

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

Trustpilot's bot wall checks the browser and the IP. Residential proxies pass it reliably; the token minted by the browser is then reused for the plain page reads on the same session.

## Actor input object example

```json
{
  "companies": [
    "slack.com",
    "https://www.trustpilot.com/review/notion.so"
  ],
  "sort": "recency",
  "maxReviewsPerCompany": 50,
  "publishedAfter": "2026-01-01",
  "stars": [],
  "languages": [
    "en"
  ],
  "verifiedOnly": false,
  "withReplyOnly": false,
  "site": "www",
  "maxConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

One row per review: company, reviewer, country, stars, title, text, dates, verification, company reply.

## `companies` (type: `string`):

The company behind each row: TrustScore, stars, review counts, categories, website.

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

Reviews per company, resolution, pages read, token mints, what could not be found.

# 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"
    ],
    "maxReviewsPerCompany": 50,
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("inovaflow/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": ["slack.com"],
    "maxReviewsPerCompany": 50,
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("inovaflow/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": [
    "slack.com"
  ],
  "maxReviewsPerCompany": 50,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call inovaflow/trustpilot-reviews-scraper --silent --output-dataset

```

## MCP server setup

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