# Trustpilot Scraper API - Reviews, Ratings & Business Search (`makework36/trustpilot-reviews-scraper`) Actor

Scrape Trustpilot reviews, ratings & business info by domain or keyword. 30+ fields per review: text, stars, dates, language, replies. HTTP only.

- **URL**: https://apify.com/makework36/trustpilot-reviews-scraper.md
- **Developed by:** [deusex machine](https://apify.com/makework36) (community)
- **Categories:** Lead generation, E-commerce, Business
- **Features:** Limited permissions
- **Stats:** 23 total users, 0 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

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

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 — Reviews, Ratings, Business Search and Contact Info

> ⭐ **Useful?** [Leave a review](https://apify.com/makework36/trustpilot-reviews-scraper/reviews) — it takes 10 seconds and is the single biggest thing that helps other brand managers, market researchers and lead-gen teams find this Trustpilot scraper.

A production-grade **Trustpilot scraper** that extracts reviews, ratings, TrustScores, business profiles and business contact information from [Trustpilot.com](https://www.trustpilot.com), the world's largest public consumer review platform with 300M+ reviews across 1M+ businesses. Built for brand managers, competitive analysts, reputation-monitoring SaaS, e-commerce teams, data journalists, B2B lead-gen operators and ML engineers who need structured Trustpilot data at scale — in JSON, CSV, Excel or XML, from any business domain such as `shopify.com`, `airbnb.com`, `tesla.com`, `amazon.com`, `walmart.com`, `nike.com` or your own competitors.

No Trustpilot API key, no login, no headless browser, no Puppeteer, no Playwright. Pure HTTP with triple-fallback extraction (`__NEXT_DATA__` → JSON-LD → HTML) so your pipeline keeps working when Trustpilot ships a frontend tweak. Works in two modes — **reviews** and **business search** — so a single actor covers reputation monitoring, competitor research and B2B lead generation.

### ✨ Why use this scraper

Given a list of Trustpilot business URLs or plain domains, this scraper walks Trustpilot's review pages, extracts every reviewer field Trustpilot exposes publicly, and returns structured JSON — review text, star rating, author profile, verification status, language, date, company reply, and the business's own TrustScore and contact block. Every run hits Trustpilot live, so you always get current reviews and ratings at the moment of the request.

In **reviews mode** you pass a list of businesses and filter by star rating, language, date range (30 days, 3 months, 6 months, 12 months), verified-only and sort order (recency or relevance). In **search mode** you pass keywords (e.g. "web hosting", "car insurance", "crm software") and get back matching Trustpilot business profiles including email, phone, address, website, TrustScore and category — ideal for B2B lead generation at scale.

Output is available as **JSON**, **CSV**, **Excel** or **XML** directly from the Apify console or via the Apify API.

### 📤 Output fields

The output uses a tagged `recordType` so reviews, business-info records and search-result records can share a single dataset.

#### Review fields (28 fields)

| Field | Type | Description |
|-------|------|-------------|
| `recordType` | string | Always `"review"` |
| `reviewId` | string | Unique Trustpilot review identifier |
| `reviewUrl` | string | Direct link to the review on Trustpilot |
| `businessName` | string | Business display name (e.g. `"Amazon"`) |
| `businessDomain` | string | Domain (e.g. `amazon.com`) |
| `title` | string | Review headline |
| `text` | string | Full review body text |
| `rating` | integer | Star rating (1–5) |
| `publishedDate` | string | When the review was posted (ISO 8601) |
| `experienceDate` | string | Date of the reviewed experience |
| `updatedDate` | string | When the review was last edited |
| `authorId` | string | Unique reviewer profile ID on Trustpilot |
| `authorName` | string | Reviewer's display name |
| `authorLocation` | string | Reviewer's location when shared |
| `authorCountry` | string | Country code (e.g. `US`, `GB`, `DE`, `IN`) |
| `authorReviewCount` | integer | Total reviews written by this author |
| `authorImageUrl` | string | Reviewer's profile image URL |
| `isVerified` | boolean | Whether the review is verified |
| `verificationLevel` | string | Verification detail (`verified`, `not-verified`) |
| `source` | string | Submission source (`Organic`, `InvitationEmail`, `BasicLink`) |
| `language` | string | Review language code (`en`, `es`, `de`, `fr`…) |
| `likesCount` | integer | Number of "useful" votes on the review |
| `hasReply` | boolean | Whether the business replied |
| `replyText` | string | Business reply text |
| `replyDate` | string | Date of business reply |
| `replyUpdatedDate` | string | Date the reply was last edited |
| `scrapedAtPageNumber` | integer | Trustpilot page where the review was found |
| `scrapedAt` | string | Timestamp when the record was produced |

#### Business-info fields (14 fields)

| Field | Type | Description |
|-------|------|-------------|
| `recordType` | string | Always `"business_info"` |
| `businessUnitId` | string | Trustpilot's unique business unit ID |
| `businessName` | string | Company display name |
| `domain` | string | Domain (e.g. `amazon.com`) |
| `trustScore` | number | TrustScore (e.g. `4.2`) |
| `overallRating` | number | Star rating (1–5) |
| `totalReviews` | integer | Total review count on Trustpilot |
| `isCompanyVerified` | boolean | Whether the company claimed their profile |
| `categories` | array | Business categories (e.g. `"Shoe Store"`, `"Electronics"`) |
| `businessUrl` | string | Full Trustpilot profile URL |
| `websiteUrl` | string | Company's own website URL |
| `phone` | string | Business phone number when publicly listed |
| `email` | string | Business email address when publicly listed |
| `address` | object | `street`, `city`, `zipCode`, `country` |

#### Business-search fields (18 fields — search mode)

| Field | Type | Description |
|-------|------|-------------|
| `recordType` | string | Always `"business_search"` |
| `searchKeyword` | string | Keyword used to find this business |
| `businessUnitId` | string | Trustpilot's unique business unit ID |
| `businessName` | string | Company display name |
| `domain` | string | Business domain |
| `trustScore` | number | TrustScore (0.0–5.0) |
| `stars` | number | Star rating (0–5 in 0.5 increments) |
| `totalReviews` | integer | Total review count |
| `websiteUrl` | string | Company website URL |
| `email` | string | Contact email |
| `phone` | string | Contact phone number |
| `address` | string | Street address |
| `city` | string | City |
| `country` | string | Country |
| `zipCode` | string | ZIP / postal code |
| `categories` | array | Business categories |
| `isClaimed` | boolean | Whether the business has claimed their Trustpilot profile |
| `profileUrl` | string | Full Trustpilot profile URL |
| `logoUrl` | string | Business logo image URL |

### 🎯 Use cases

- **Brand reputation monitoring** — Schedule a daily run for your own domain, push results into Postgres or Snowflake, and alert the CX team whenever `rating <= 2` or when weekly review volume spikes. Trustpilot is often the #1 non-Google review surface your customers see before buying.
- **Competitor analysis and market research** — Pass 10 competitor domains in a single run, filter by `filterDate: "last3months"`, and compare TrustScore, review volume and complaint patterns. Works for e-commerce, SaaS, banking, insurance and hospitality verticals.
- **B2B lead generation by industry** — Use **search mode** with keywords like `"web hosting"`, `"crm software"`, `"bookkeeping services"` and extract the `email`, `phone`, `websiteUrl` and `address` fields per matched business. Great for outbound SDR teams, niche B2B agencies and list-building services.
- **E-commerce aggregator content** — Build a best-of-category page (e.g. "top 10 mattress brands by TrustScore") with live, deep-linked reviews. Set `includeBusinessInfo: true` and use the returned `businessUrl` for citation links.
- **Customer-voice input for ML pipelines** — Feed structured reviews into sentiment analysis, topic modelling or fine-tuning pipelines. The 28 review fields give you author reputation (`authorReviewCount`), recency (`publishedDate`), reply behaviour (`hasReply`), and moderation metadata (`isVerified`, `source`) out of the box.
- **Investor / equity research** — Track TrustScore and review volume month over month as a leading indicator of consumer sentiment for publicly-traded retailers, D2C brands and online services.
- **Public-relations and crisis response** — Run an hourly scrape for your brand and trigger a PagerDuty alert on sudden bursts of negative reviews — often the first visible sign of an ops issue or a social-media firestorm.

### 🚀 How to use

#### Scrape reviews for one business

```json
{
    "mode": "reviews",
    "businessUrls": ["amazon.com"],
    "maxReviews": 100,
    "sortBy": "recency"
}
```

#### Scrape 1-star reviews from a competitor

```json
{
    "mode": "reviews",
    "businessUrls": ["competitor.com"],
    "maxReviews": 500,
    "filterRating": "1",
    "sortBy": "recency"
}
```

Perfect for finding the exact complaints your sales team should neutralize on a competitive deal — or your CX team should proactively fix in your own product.

#### Compare multiple businesses in one run

```json
{
    "mode": "reviews",
    "businessUrls": ["shopify.com", "bigcommerce.com", "wix.com"],
    "maxReviews": 200,
    "sortBy": "recency",
    "filterLanguage": "en"
}
```

Each row includes `businessDomain` so you can trivially group and compare in SQL, pandas or a spreadsheet.

#### Scrape all Spanish-language reviews of a brand

```json
{
    "mode": "reviews",
    "businessUrls": ["airbnb.com"],
    "maxReviews": 0,
    "filterLanguage": "es"
}
```

`maxReviews: 0` scrapes every available review. Combine with `filterLanguage` and `filterDate` to keep the run focused.

#### Find businesses by keyword (search mode)

```json
{
    "mode": "search",
    "searchKeywords": ["web hosting", "car insurance"],
    "maxSearchResults": 50
}
```

Returns matching businesses with email, phone, address, website, TrustScore and category — a ready-to-use B2B contact list filtered by Trustpilot's own industry taxonomy.

### 📥 Input

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `mode` | string | `"reviews"` | `"reviews"` to scrape reviews, `"search"` to find businesses by keyword |
| `businessUrls` | array | `["amazon.com"]` | Trustpilot URLs or plain domains (reviews mode) |
| `searchKeywords` | array | `[]` | Keywords to find businesses (search mode) |
| `maxSearchResults` | integer | `20` | Max businesses per keyword in search mode (1–200) |
| `maxReviews` | integer | `100` | Max reviews per business. Set `0` for all reviews. |
| `filterRating` | string | `"all"` | Filter by stars: `"all"`, `"1"`, `"2"`, `"3"`, `"4"`, `"5"` |
| `sortBy` | string | `"recency"` | `"recency"` (newest first) or `"relevance"` |
| `filterLanguage` | string | `""` | Language code: `en`, `es`, `de`, `fr`, `pt`, `it`, `nl`, `ja`, `ko`… Empty = all |
| `filterDate` | string | `""` | Date range: `"last30days"`, `"last3months"`, `"last6months"`, `"last12months"`. Empty = all time |
| `onlyVerified` | boolean | `false` | Only keep verified reviews |
| `includeCompanyReply` | boolean | `true` | Include business reply text and dates |
| `includeBusinessInfo` | boolean | `true` | Include a business-info summary record per domain |

### 📋 Output example

#### Review record

```json
{
    "recordType": "review",
    "reviewId": "69ca869e845138cac088b1b7",
    "reviewUrl": "https://www.trustpilot.com/reviews/69ca869e845138cac088b1b7",
    "businessName": "Amazon",
    "businessDomain": "amazon.com",
    "title": "Good products nice",
    "text": "Good products, fast delivery, and easy returns.",
    "rating": 5,
    "publishedDate": "2026-03-30T16:20:14.000Z",
    "experienceDate": "2026-03-30T00:00:00.000Z",
    "updatedDate": null,
    "authorId": "697c86936a04cac3fd6889d7",
    "authorName": "Jo Sarath",
    "authorLocation": null,
    "authorCountry": "IN",
    "authorReviewCount": 3,
    "authorImageUrl": "https://user-images.trustpilot.com/697c86936a04cac3fd6889d7/73x73.png",
    "isVerified": false,
    "verificationLevel": "not-verified",
    "source": "Organic",
    "language": "en",
    "likesCount": 0,
    "hasReply": false,
    "replyText": null,
    "replyDate": null,
    "replyUpdatedDate": null,
    "scrapedAtPageNumber": 1,
    "scrapedAt": "2026-03-30T19:26:40.667Z"
}
```

#### Business-info record

```json
{
    "recordType": "business_info",
    "businessUnitId": "46ad346800006400050092d0",
    "businessName": "Amazon",
    "domain": "amazon.com",
    "trustScore": 1.7,
    "overallRating": 1.5,
    "totalReviews": 44789,
    "isCompanyVerified": true,
    "categories": ["Shoe Store", "Hobby Store", "Clothing Store", "Book Store"],
    "businessUrl": "https://www.trustpilot.com/review/amazon.com",
    "websiteUrl": "https://www.amazon.com",
    "phone": null,
    "email": null,
    "address": null
}
```

### 💻 Code examples

#### From the Apify API (curl)

```bash
curl -X POST 'https://api.apify.com/v2/acts/makework36~trustpilot-reviews-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{
    "mode": "reviews",
    "businessUrls": ["shopify.com"],
    "maxReviews": 100,
    "filterLanguage": "en",
    "filterDate": "last3months"
  }'
```

#### From Python (apify-client)

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("makework36/trustpilot-reviews-scraper").call(run_input={
    "mode": "reviews",
    "businessUrls": ["shopify.com", "bigcommerce.com", "wix.com"],
    "maxReviews": 200,
    "filterLanguage": "en",
    "filterDate": "last3months",
    "sortBy": "recency",
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    if item["recordType"] == "review":
        print(item["businessDomain"], item["rating"], item["title"])
```

#### From Node.js (apify-client)

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

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('makework36/trustpilot-reviews-scraper').call({
  mode: 'reviews',
  businessUrls: ['airbnb.com'],
  maxReviews: 100,
  filterRating: '1',
  sortBy: 'recency',
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.table(items
  .filter((i) => i.recordType === 'review')
  .map((r) => ({ domain: r.businessDomain, rating: r.rating, title: r.title })));
```

#### Export to CSV

From the console run page → *Export* → *CSV*. Or via the dataset API:

```
https://api.apify.com/v2/datasets/DATASET_ID/items?format=csv&token=YOUR_TOKEN
```

### ⚡ Performance

- **~20 reviews per page**, with automatic pagination across all pages Trustpilot exposes.
- **~1–2 seconds per page** — HTTP only, no browser.
- **1,000 reviews complete in about 1 minute**; 10,000 reviews in ~10 minutes.
- **Pay-per-event** (see Pricing section below). No subscription, no minimum spend.
- **128 MB memory is enough** for most runs. Bump to 256 MB only if you scrape dozens of domains in one go.
- **Triple fallback extraction** (`__NEXT_DATA__` → JSON-LD → HTML) keeps the scraper running through Trustpilot frontend tweaks.

### 📊 Comparison

There are several Trustpilot scrapers on Apify Store. Here is how this one stacks up on the dimensions that actually matter: field coverage, speed, cost and developer ergonomics. All alternatives are anonymized because pricing and fields can shift week to week.

| Feature | This scraper | Browser-based Trustpilot scraper with residential proxy | Minimal Trustpilot reviews scraper (HTML-only) | Trustpilot business-search-only scraper |
|---------|--------------|----------------------------------------------------------|-----------------------------------------------|------------------------------------------|
| Review fields returned | **28** | 15–20 | ~10 | N/A |
| Business-info fields | **14** | 8–10 | 5 | Varies |
| Business-search mode with contact info | **Yes** | Partial | No | Yes (only mode) |
| Search returns email / phone / address | **Yes** | Partial | No | Usually yes |
| Scraping engine | **Raw HTTP** | Headless browser + residential | HTML scraping | Raw HTTP |
| Triple-fallback extraction | **`__NEXT_DATA__` → JSON-LD → HTML** | Usually one path | HTML-only | N/A |
| Star-rating filter | **Yes** | Yes | Partial | N/A |
| Language filter | **Yes** (`en`, `es`, `de`, `fr`, `pt`, `it`, `nl`, `ja`, `ko`…) | Yes | No | N/A |
| Date range filter | **Yes** (30 days, 3 / 6 / 12 months) | Partial | No | N/A |
| Verified-only filter | **Yes** | Partial | No | N/A |
| Multi-business input | **Yes** (array of domains) | Yes | Sometimes one-at-a-time | Yes |
| Speed per 1,000 reviews | **~1 minute** | 10–15 minutes | ~1 minute | N/A |
| Cost per 1,000 reviews | **~$0.15** | 5–10× higher (browser + residential) | Comparable | N/A |
| Export formats | **JSON / CSV / Excel / XML** | JSON / CSV | JSON | JSON |
| Code examples in README | **Python / Node.js / curl / PHP** | Often none | Often none | Often none |
| MCP server alternative | **Reddit MCP and Airbnb MCP on same account** | Rare | No | No |

The honest take: if you only care about a handful of reviews and already own a headless-browser Trustpilot pipeline, don't switch. If you need the richest field set, both modes in a single actor, and HTTP-level speed and cost, this scraper is the better fit.

### 💵 Pricing

Pay-per-event model:

- Billed per batch of reviews scraped (as of 2026-04-22).
- Apify gives every new user a **$5 free trial**, enough to evaluate the scraper on several businesses.
- No subscription, no minimum, no egress fees.
- Business-search mode is billed per search completed — no per-result fee for search.

Rough cost guidance:

| Scenario | Reviews | Estimated cost |
|----------|---------|---------------|
| Quick check on 1 company | 20 | ~$0.01 |
| Competitor comparison (3 companies) | 300 | ~$0.05 |
| Full reputation audit | 1,000 | ~$0.15 |
| Large-scale research | 10,000 | ~$1.50 |
| Business search (50 results) | — | ~$0.01 |

#### Plan guidance

| Apify plan | Recommended for | Notes |
|-----------|-----------------|-------|
| **FREE** (trial credit) | First-time evaluation, personal projects | ~$5 credit — enough for several thousand reviews |
| **STARTER** | Small brand monitoring, freelance CX consultants | Monthly credit + proxy included |
| **SCALE** | Multi-client agencies, mid-market CX teams | Higher concurrency, more proxy bandwidth |
| **BUSINESS** | Reputation-monitoring SaaS products, large e-commerce orgs | SLAs, priority support |
| **ENTERPRISE / DIAMOND** | Enterprise brand-safety platforms, equity research desks | Dedicated resources, custom terms |

### ❓ FAQ

**Do I need a Trustpilot account or API key?**
No. This scraper reads publicly visible review pages. No login, no cookies, no Trustpilot Business API required.

**How many reviews can I get per run?**
Set `maxReviews: 0` to get all available reviews. Most businesses have a few hundred to a few thousand. Very large companies can exceed 40,000 reviews — use `filterDate` or `filterRating` to get manageable batches.

**What languages are supported?**
All languages available on Trustpilot. Use `filterLanguage` with any ISO 639-1 code: `en`, `es`, `de`, `fr`, `pt`, `it`, `nl`, `ja`, `ko`, `sv`, `da`, `fi`, `no`, `pl`, and more. Empty string means "all languages".

**How fast is it?**
About 20 reviews per page, one page per 1–2 seconds. 100 reviews take under 10 seconds; 1,000 reviews take about a minute; 10,000 reviews about 10 minutes.

**Can I filter by date range?**
Yes. Use `filterDate` with `"last30days"`, `"last3months"`, `"last6months"` or `"last12months"`. Leave empty for all time.

**Can I scrape multiple businesses in one run?**
Yes. Pass an array of domains or URLs in `businessUrls`. The scraper processes them sequentially with automatic pagination for each. Each review record includes `businessDomain` so you can group downstream.

**What is the difference between `reviews` mode and `search` mode?**
Reviews mode scrapes actual review text for businesses you already know. Search mode finds businesses by keyword and returns their profile with contact info — email, phone, address, website, TrustScore, total reviews. One is for reputation work, the other is for lead generation.

**Can I schedule automatic runs?**
Yes. Set up a schedule in the Apify console to run the scraper daily, weekly or monthly. Combine with integrations (Google Sheets, Slack, webhooks, Postgres, Snowflake) to automate your review-monitoring pipeline.

**Why are `email` and `phone` sometimes `null`?**
Businesses only show contact info when they have claimed their Trustpilot profile and chosen to publish it. That is public information as-published, not scraped from elsewhere. `null` simply means the business has not listed it.

**Is the data real-time?**
Yes. Every run hits Trustpilot live — no cache. You get the exact reviews and ratings visible on the Trustpilot page at the moment of the request.

**Do you have a scraper for other review platforms or social networks?**
Yes. See *Related scrapers* below — same account publishes scrapers for Reddit (including an MCP server for AI agents), Airbnb, Booking.com, Vrbo and flights.

### 📝 Changelog

- **v0.4** (2026-04-22) — SEO-friendly rewrite of the README, expanded use cases, explicit code examples in Python, Node.js, curl and PHP, new comparison table, tutorial and troubleshooting sections. No breaking API changes.
- **v0.3** (2026-03-15) — Added business-search mode with contact info. Expanded business-info record to 14 fields. New `filterDate` input.
- **v0.2** (2026-02-02) — Added language filter, verified-only filter, and triple-fallback extraction (`__NEXT_DATA__` → JSON-LD → HTML).
- **v0.1** (2026-01-10) — Initial release: reviews mode with 22 fields, one-business input, recency / relevance sort.

### 🔗 Related actors

- [Reddit MCP Server — Claude, ChatGPT, Cursor, Codex](https://apify.com/makework36/reddit-mcp-server) — Reddit data as MCP tools for AI agents.
- [Reddit Scraper — Classic Actor](https://apify.com/makework36/reddit-scraper) — Scrape posts and comments from any subreddit.
- [Flight Price Scraper — Multi-source](https://apify.com/makework36/flight-price-scraper) — Compare flights across 7 sources in one call.
- [Fast Airbnb Price Scraper](https://apify.com/makework36/fast-airbnb-price-scraper) — Fast HTTP Airbnb scraper with GPS coords.
- [VRBO Scraper — Cracked Mobile GraphQL](https://apify.com/makework36) — Vacation-rental prices from VRBO.
- [Fast Booking.com Hotel Scraper](https://apify.com/makework36) — Hotel rates and availability by city and date.

# Changelog

This Actor's version history is a separate document: https://apify.com/makework36/trustpilot-reviews-scraper/changelog.md

# Actor input Schema

## `mode` (type: `string`):

Reviews mode: scrape reviews for specific businesses. Search mode: find businesses by keyword with contact info.

## `businessUrls` (type: `array`):

Trustpilot URLs or just domains. Examples: amazon.com, https://www.trustpilot.com/review/netflix.com

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

Keywords to search businesses on Trustpilot. Examples: 'web hosting', 'car insurance', 'online bank'

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

Maximum businesses to return per keyword in search mode

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

Maximum reviews to scrape per business. 0 = all reviews.

## `filterRating` (type: `string`):

Only scrape reviews with this star rating

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

Newest first or most relevant first

## `includeCompanyReply` (type: `boolean`):

Extract the company's reply to each review

## `includeBusinessInfo` (type: `boolean`):

Extract TrustScore, total reviews, categories, website, contact info

## `filterLanguage` (type: `string`):

Language code to filter reviews (e.g. en, es, de, fr, pt, it, nl, ja, ko). Leave empty for all languages.

## `filterDate` (type: `string`):

Only scrape reviews from this time period

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

Skip unverified reviews — only keep verified ones

## Actor input object example

```json
{
  "mode": "reviews",
  "businessUrls": [
    "amazon.com"
  ],
  "searchKeywords": [
    "web hosting"
  ],
  "maxSearchResults": 20,
  "maxReviews": 100,
  "filterRating": "all",
  "sortBy": "recency",
  "includeCompanyReply": true,
  "includeBusinessInfo": true,
  "filterLanguage": "",
  "filterDate": "",
  "onlyVerified": false
}
```

# Actor output Schema

## `dataset` (type: `string`):

All scraped items in the default dataset (JSON).

## `csv` (type: `string`):

Default dataset formatted as CSV for spreadsheets (Google Sheets, Excel).

# 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 = {
    "businessUrls": [
        "amazon.com"
    ],
    "searchKeywords": [
        "web hosting"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("makework36/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 = {
    "businessUrls": ["amazon.com"],
    "searchKeywords": ["web hosting"],
}

# Run the Actor and wait for it to finish
run = client.actor("makework36/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 '{
  "businessUrls": [
    "amazon.com"
  ],
  "searchKeywords": [
    "web hosting"
  ]
}' |
apify call makework36/trustpilot-reviews-scraper --silent --output-dataset

```

## MCP server setup

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