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

Trustpilot business reviews as clean, structured JSON for reputation monitoring. Send company URLs and get review text, star rating, verified status, date of experience, reviewer location, company replies, and the full star breakdown. Pay per review, MCP-ready for Claude and AI agents.

- **URL**: https://apify.com/johnvc/trustpilot-reviews-api.md
- **Developed by:** [John](https://apify.com/johnvc) (community)
- **Categories:** AI, E-commerce, Social media
- **Stats:** 4 total users, 4 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.57 / 1,000 review returneds

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/platform/actors/running/actors-in-store#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

## Trustpilot Reviews API for Reputation Monitoring

Trustpilot business reviews as clean, structured JSON for reputation monitoring. Send company URLs and get back every review with its star rating, full text, verified status, date of experience, reviewer location, and any reply the business posted, alongside the company's overall rating and its full star distribution.

Built for reputation monitoring rather than one-off exports: the date of experience is separate from the posting date, replies come through as structured entries, and the star breakdown carries both counts and percentages so you can track a rating shifting rather than just read its current value.

The data comes from public company review pages on [Trustpilot](https://www.trustpilot.com/). This Actor is not affiliated with, endorsed by, or connected to Trustpilot, and it is not a resale of Trustpilot's own developer API.

### What this actor returns

- **Review detail:** title, full text, star rating, posting date, and the separate date of experience
- **Trust signals:** verified-review flag, verified-business flag, useful-vote count, and the reviewer's total review count for weighting
- **Company replies:** what the business said back, and when
- **Company rating:** overall score, word label, total review count, and the 5-to-1 star split with counts and percentages
- **Company detail:** website, activities, category path, email, phone, location, country

Every review row also carries a one-line plain-language `summary`, so an AI agent can read a record without post-processing.

### Use cases

- **Monitor your own reputation.** Re-run on a schedule and watch the star breakdown move, not just the headline score.
- **Watch competitors.** Collect several companies in one run and compare rating distribution and reply behaviour.
- **Find unanswered complaints.** Filter for low ratings with no entry in `reviewReplies`.
- **Analyse sentiment by market.** Reviewer location lets you split feedback by country.
- **Audit review quality.** The verified flag and the reviewer's overall review count help separate established reviewers from one-time accounts.
- **Build a customer review dataset.** Export the flat rows straight into a sentiment model or a BI table.

### Input parameters

| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| `companyUrls` | array of strings | **Required** | (none) | Company review-page URLs. A bare domain also works as shorthand. Up to 200 companies per run; anything beyond the cap is not collected. | `["https://www.trustpilot.com/review/example.com", "acme.com"]` |
| `maxReviewsPerCompany` | integer | Optional | `100` | Reviews per company, from 1 to 1000. This is your cost control, since you are charged per review. | `100` |
| `datePosted` | string | Optional | (none, all reviews) | Return only reviews posted within a recent window. One of `Last 30 days`, `Last 3 months`, `Last 6 months`, `Last 12 months`. The source accepts these fixed windows only, not calendar dates. Leave empty for all. | `Last 30 days` |

```json
{
  "companyUrls": ["https://www.trustpilot.com/review/www.dugood.org"],
  "maxReviewsPerCompany": 100
}
```

The per-company cap is applied at the source, so nothing beyond it is collected or billed.

You supply the company URLs. There is no keyword search or company-discovery mode, so a run answers "what do these companies' reviews look like" rather than "which companies exist in this category".

### Example output

One dataset row per review. Every row carries a `result_type` of either `review` or `error`.

```json
{
  "result_type": "review",
  "companyName": "DuGood Credit Union",
  "reviewTitle": "Very good beautiful App",
  "reviewContent": "Staff were helpful and the process was quick.",
  "reviewRating": 5,
  "reviewDate": "2026-07-24T09:12:00.000Z",
  "dateOfExperience": "2026-07-23T00:00:00.000Z",
  "isVerifiedReview": false,
  "reviewerName": "Muhammad Ubaidullah",
  "reviewerLocation": "PK",
  "reviewerTotalReviews": 7,
  "companyOverallRating": 4.7,
  "companyRatingLabel": "Excellent",
  "companyTotalReviews": 4389,
  "companyActivities": ["Credit Union", "Bank", "Mortgage Lender"],
  "categoryPath": ["Money & Insurance", "Credit & Debt Services", "Credit Union"],
  "starBreakdown": {
    "star5": { "count": 4083, "percent": 93 },
    "star4": { "count": 169, "percent": 4 },
    "star3": { "count": 55, "percent": 1 },
    "star2": { "count": 24, "percent": 1 },
    "star1": { "count": 58, "percent": 1 }
  },
  "summary": "5-star review of DuGood Credit Union by Muhammad Ubaidullah: \"Very good beautiful App\""
}
```

#### Output fields

| Field | Type | What it holds |
|---|---|---|
| `result_type` | string | `review` or `error`, so failures stay visible in the same dataset |
| `reviewId` | string | Stable identifier for the review on the source site |
| `reviewTitle` | string | Headline the reviewer gave |
| `reviewContent` | string | Full review body |
| `reviewRating` | integer | Star rating this reviewer gave, 1 to 5 |
| `reviewDate` | string | When the review was posted |
| `dateOfExperience` | string | When the reviewer says the experience happened |
| `isVerifiedReview` | boolean | Whether the source verified this review |
| `reviewUsefulCount` | integer | How many people marked the review useful |
| `reviewReplies` | array | Replies the business posted to this review, with text and date |
| `reviewUrl` | string | Direct link to the individual review |
| `reviewerName` | string | Display name of the reviewer |
| `reviewerLocation` | string | Country the reviewer posted from |
| `reviewerTotalReviews` | integer | How many reviews this person has posted overall |
| `companyName` | string | Name of the reviewed business |
| `companyUrl` | string | The company review page this review came from |
| `companyWebsite` | string | The business's own website |
| `companyCategory` | string | Primary category the business is listed under |
| `companyActivities` | array | All activity categories the business is listed under |
| `categoryPath` | array | Category breadcrumb trail, broadest first |
| `companyOverallRating` | number | The business's overall star rating across all reviews |
| `companyRatingLabel` | string | Word form of the overall rating, for example `Excellent` |
| `companyTotalReviews` | integer | How many reviews the business has in total |
| `companyIsVerified` | boolean | Whether the business is verified on the source site |
| `companyEmail`, `companyPhone`, `companyLocation`, `companyCountry` | string | Contact and address details the business publishes itself |
| `companyAbout`, `companyLogo` | string | The business's own description and logo URL |
| `starBreakdown` | object | The 5-to-1 star split, each level with a `count` and a `percent` |
| `summary` | string | One-line plain-language summary of the review |
| `error_message`, `error_type` | string | Why a company URL produced no reviews, on `error` rows only |
| `fetched_at` | string | UTC timestamp when this row was collected |

A company URL that returns nothing produces a row with `result_type: "error"` and a plain-language `error_message`, so a failure never disappears silently.

### Pricing

Pay per result. One event, `review-scraped`, is charged once for every review pushed to the dataset. Nothing is charged for a company that returns no reviews.

`maxReviewsPerCompany` caps what a run can cost, and the cap is enforced at the source rather than by discarding rows we already paid for. Current rates are shown on the Store card.

### How to get started

1. [View on Apify Store](https://apify.com/johnvc/trustpilot-reviews-api?fpr=9n7kx3) and click Try for free.
2. Find the company's public review page on [Trustpilot](https://www.trustpilot.com/) and paste one or more of those URLs, or bare domains, into **Company URLs**.
3. Run it. Results appear on the Output tab and export as JSON, CSV, or Excel. The **Reputation snapshot** view shows the rating distribution directly.

Prefer to start from code? The [example repo](https://github.com/johnisanerd/Apify-Trustpilot-Reviews-API) has a Python quick-start plus MCP install walkthroughs for Claude, Cursor, and ChatGPT.

### 🔌 Use this API from Claude (MCP)

Add this Actor as a tool in [Claude Code](https://claude.ai/referral/uIlpa7nPLg) (free trial), [Claude Cowork](https://claude.ai/referral/uIlpa7nPLg) (free trial), Cursor, or any other MCP client through the hosted Apify MCP server:

```
https://mcp.apify.com/?tools=actors,docs,johnvc/trustpilot-reviews-api
```

With [Claude Code](https://claude.ai/referral/uIlpa7nPLg) (free trial):

```
claude mcp add --transport http trustpilot "https://mcp.apify.com/?tools=actors,docs,johnvc/trustpilot-reviews-api"
```

Then ask your agent something like "summarise the one-star reviews for this company and flag any without a reply".

https://www.youtube.com/watch?v=jREWahDGhJM

Apify MCP integration docs: https://docs.apify.com/platform/integrations/mcp

### 💸 Pay per run with crypto (x402)

The Trustpilot Reviews API supports agentic payments via the [x402 protocol](https://docs.apify.com/platform/integrations/x402).
AI agents and MCP clients can pay for runs in USDC (on Base) with no Apify account or API token needed:
point your agent at the [Apify MCP server](https://mcp.apify.com/?tools=actors,docs,johnvc/trustpilot-reviews-api) and it can
discover, pay for, and run this Actor autonomously. Read the
[Apify x402 announcement](https://apify.com/change-log/pay-for-apify-actors-with-x402?fpr=9n7kx3) for details.

### 🔌 Integrations: Automate Reputation Monitoring

A single run tells you what a company's reviews look like today. Reputation monitoring is a time series, so run the same input on a schedule and keep every snapshot. The recipes below all sit on [Apify platform integrations](https://docs.apify.com/platform/integrations).

#### Tasks and schedules: the core recipe

Save one [task](https://docs.apify.com/platform/actors/running/tasks) per thing you are watching. A sensible split is one task for your own company and one task holding your competitor set, each with its own `maxReviewsPerCompany`. Then attach a [schedule](https://docs.apify.com/platform/schedules) from the Actor's **Actions**, then **Schedule** menu.

Useful cron strings:

- `0 7 * * *` runs daily at 7 AM, the normal cadence for a brand you actively manage
- `0 */6 * * *` runs every six hours, for a launch week or an active complaint spike
- `0 9 * * 1` runs Mondays at 9 AM, enough for a competitor set you only review weekly

One schedule can trigger several tasks at once, so a single Monday morning trigger can refresh your own reviews and every competitor in one go. Pair a schedule with `datePosted: "Last 30 days"` to keep each run small and cheap once the backfill is done.

The [Monitor Trustpilot Reputation for Any Company](https://apify.com/johnvc/trustpilot-reviews-api/examples/monitor-trustpilot-reputation-for-any-company?fpr=9n7kx3) task is already configured this way, so you can copy it rather than build it.

#### n8n, Make, and Zapier

There is no dedicated community node for this Actor yet, so use the generic [Apify n8n integration](https://docs.apify.com/platform/integrations/n8n): a Schedule Trigger, then the Apify node running `johnvc/trustpilot-reviews-api`, then a Filter node on `reviewRating <= 2`, then a Slack or email node. That is a working unanswered-complaint alarm in four nodes.

The same pattern drops into [Make](https://docs.apify.com/platform/integrations/make) and [Zapier](https://docs.apify.com/platform/integrations/zapier) without changes: trigger, run, filter, notify.

#### Store the history in Supabase

Rating history only exists if you keep it. The no-code path is the Apify node followed by a Supabase node. In Python, `apify-client` plus `supabase` does the same job:

```python
from apify_client import ApifyClient
from supabase import create_client

apify = ApifyClient("<APIFY_API_TOKEN>")
supabase = create_client("<SUPABASE_URL>", "<SUPABASE_SERVICE_KEY>")

run = apify.actor("johnvc/trustpilot-reviews-api").call(run_input={
    "companyUrls": ["https://www.trustpilot.com/review/www.dugood.org"],
    "maxReviewsPerCompany": 100,
    "datePosted": "Last 30 days",
})

rows = [
    {
        "review_id": item.get("reviewId"),
        "company_name": item.get("companyName"),
        "review_rating": item.get("reviewRating"),
        "review_title": item.get("reviewTitle"),
        "date_of_experience": item.get("dateOfExperience"),
        "is_verified_review": item.get("isVerifiedReview"),
        "reviewer_location": item.get("reviewerLocation"),
        "company_overall_rating": item.get("companyOverallRating"),
        "has_reply": bool(item.get("reviewReplies")),
        "fetched_at": item.get("fetched_at"),
    }
    for item in apify.dataset(run.default_dataset_id).iterate_items()
    if item.get("result_type") == "review"
]

supabase.table("trustpilot_reviews").upsert(rows, on_conflict="review_id").execute()
```

Upserting on `reviewId` means a daily run is idempotent: old reviews stay put, new ones land, and `company_overall_rating` gives you a dated rating series to chart.

#### MCP and AI agents

Add the Actor to any MCP client through the [Apify MCP server](https://mcp.apify.com/) and an agent can pull reviews mid-conversation. The setup URL is in the MCP section above, and the [Read Trustpilot Reviews in Claude via MCP](https://apify.com/johnvc/trustpilot-reviews-api/examples/trustpilot-reviews-in-claude-via-mcp?fpr=9n7kx3) task shows a working configuration. A question an agent can answer with one call: "which of our five competitors improved their one-star share this quarter, and which of them reply to complaints".

#### Webhooks

For anything custom, attach an [Apify webhook](https://docs.apify.com/platform/integrations/webhooks) on `ACTOR.RUN.SUCCEEDED` and post the dataset ID to your own service. That covers pushing into a warehouse or opening a ticket when a complaint lands.

### 🔗 Related Tools

Reviews live on more than one site, and most reputation work ends up pulling from several of them.

- [G2 Reviews API](https://apify.com/johnvc/g2-reviews-api?fpr=9n7kx3) for B2B software reviews, the natural pair when your buyers research on both G2 and Trustpilot
- [Glassdoor Reviews API](https://apify.com/johnvc/glassdoor-reviews-api?fpr=9n7kx3) for employer reviews, which often explain a customer-facing rating slide
- [Yelp Reviews API](https://apify.com/johnvc/yelp-reviews-api?fpr=9n7kx3) for local business reviews, for brands with physical locations
- [OpenTable Reviews API](https://apify.com/johnvc/opentable-reviews-api?fpr=9n7kx3) for restaurant reviews and diner sentiment
- [Google AI Overview API](https://apify.com/johnvc/Google-AI-Overview-API?fpr=9n7kx3) to see what AI search answers say about your brand, alongside what reviewers say

For contrast: older alternatives such as the [Trustpilot Reviews Scraper by getwally.net](https://apify.com/getwally.net/trustpilot-reviews-scraper?fpr=9n7kx3) return the review headline, text, rating, reviewer name, date, and URL, but not company replies, the verified flag, the date of experience, or the company-level star breakdown, and they carry no user rating on the Store. If you only need the review text, that is enough. If you are tracking a rating over time and want to know who replied, you need the fuller record this API returns.

### 💡 Applications

Ready-to-run examples of this API in action. Open any one and run it in a single click.

#### Get Trustpilot Reviews by API from Company URLs

The developer starting point: paste company URLs, get structured review JSON back.
[Run this task](https://apify.com/johnvc/trustpilot-reviews-api/examples/trustpilot-reviews-api?fpr=9n7kx3)

#### Monitor Trustpilot Reputation for Any Company

Pre-wired for scheduling, so the star breakdown becomes a time series rather than a snapshot.
[Run this task](https://apify.com/johnvc/trustpilot-reviews-api/examples/monitor-trustpilot-reputation-for-any-company?fpr=9n7kx3)

#### Audit Trustpilot Reviews for Fake Review Signals

Weight reviews by the verified flag and the reviewer's total review count to separate established reviewers from one-time accounts.
[Run this task](https://apify.com/johnvc/trustpilot-reviews-api/examples/audit-trustpilot-reviews-for-fake-review-signals?fpr=9n7kx3)

#### Build a Customer Review Dataset for Sentiment Analysis

Flat rows of review text with star ratings attached, ready for a sentiment model.
[Run this task](https://apify.com/johnvc/trustpilot-reviews-api/examples/customer-review-dataset-for-sentiment-analysis?fpr=9n7kx3)

#### Export Trustpilot Reviews to CSV for Any Company

Straight to a spreadsheet, no code, for teams that live in Excel or Sheets.
[Run this task](https://apify.com/johnvc/trustpilot-reviews-api/examples/export-trustpilot-reviews-to-csv?fpr=9n7kx3)

#### Read Trustpilot Reviews in Claude via MCP

A working MCP configuration so an agent can pull reviews inside a conversation.
[Run this task](https://apify.com/johnvc/trustpilot-reviews-api/examples/trustpilot-reviews-in-claude-via-mcp?fpr=9n7kx3)

#### Monitor Competitor Trustpilot Ratings (监控竞品在 Trustpilot 的评分与差评分布)

Track a competitor set's overall rating and one-star share side by side.
[Run this task](https://apify.com/johnvc/trustpilot-reviews-api/examples/monitor-competitor-trustpilot-ratings-zh?fpr=9n7kx3)

#### Bulk Collect Trustpilot Reviews and Export to CSV (批量采集 Trustpilot 评论并导出为 CSV)

Collect many companies in one run and export the whole set as CSV.
[Run this task](https://apify.com/johnvc/trustpilot-reviews-api/examples/bulk-collect-trustpilot-reviews-csv-zh?fpr=9n7kx3)

### ❓ FAQ

#### How do I monitor my company's online reputation?

Run the Actor on your own company URL on a schedule and store each run. The star breakdown gives counts and percentages per level, so you can see a rating moving before the headline number changes.

#### How do I monitor a competitor's reputation?

Put several company URLs in one run. Every row carries its company name and overall rating, so a single export covers the whole comparison set.

#### Can I schedule this Actor for continuous reputation monitoring?

Yes, and this is where the Actor earns its keep. Save a [task](https://docs.apify.com/platform/actors/running/tasks) holding the company URLs you care about, then attach an [Apify schedule](https://docs.apify.com/platform/schedules) from the Actor's **Actions**, then **Schedule** menu. Daily at 7 AM is `0 7 * * *`, every six hours is `0 */6 * * *`, and Mondays at 9 AM is `0 9 * * 1`. One schedule can trigger several tasks, so your own brand and your competitor set can refresh on the same trigger. Set `datePosted` to `Last 30 days` on recurring runs so each one stays small. The Integrations section above has the full recipe, including where to store the accumulated history.

#### Should I use the official Trustpilot API or a web Scraper?

It depends on access. Trustpilot's own developer API is gated behind a business account and its plan limits, and it is scoped to the data that account is entitled to. This Actor works from public company review pages instead, so you can point it at any company, including competitors, without an account relationship. If it helps to have the categories straight: an [API](https://en.wikipedia.org/wiki/API) is a defined interface a provider offers, while [web scraping](https://en.wikipedia.org/wiki/Web_scraping) reads the public page. This Actor gives you a scraper's reach with an API's output shape, and there are no per-call quotas to manage.

#### Is this an official Trustpilot API?

No. This Actor is not affiliated with, endorsed by, or connected to [Trustpilot](https://www.trustpilot.com/). It reads public review pages and returns them as structured data, and it does not claim feature parity with Trustpilot's own developer API.

#### Can I use this Trustpilot Reviews API from the Apify API?

Yes. The [Apify API](https://apify.com/johnvc/trustpilot-reviews-api/api?fpr=9n7kx3) lets you start runs, pass input, attach schedules, and fetch datasets programmatically, and the `apify-client` package exists for both Node.js and Python. The Actor's own API tab has copy-paste snippets with your token filled in.

#### Can I use this Trustpilot review Scraper through an MCP server?

Yes. Add it as a tool in any MCP client through the hosted [Apify MCP server](https://mcp.apify.com/) using `https://mcp.apify.com/?tools=actors,docs,johnvc/trustpilot-reviews-api`. That covers [Claude Code](https://claude.ai/referral/uIlpa7nPLg) (free trial), [Claude Cowork](https://claude.ai/referral/uIlpa7nPLg) (free trial), Cursor, and anything else that speaks MCP. See the [Apify MCP docs](https://docs.apify.com/platform/integrations/mcp) for client setup.

#### Can I integrate this review Scraper with other apps?

Yes. Through [Apify integrations](https://docs.apify.com/platform/integrations) the Actor connects to most cloud services, including [Make](https://docs.apify.com/platform/integrations/make), [Zapier](https://docs.apify.com/platform/integrations/zapier), [Slack](https://docs.apify.com/platform/integrations/slack), Google Drive, and [n8n](https://docs.apify.com/platform/integrations/n8n). For anything custom, an [Apify webhook](https://docs.apify.com/platform/integrations/webhooks) fires on `ACTOR.RUN.SUCCEEDED` and hands your service the dataset ID. The Integrations section above has the full recipes.

#### How can I collect reviews from other review sites?

Trustpilot is one signal among several. For B2B software the equivalent is the [G2 Reviews API](https://apify.com/johnvc/g2-reviews-api?fpr=9n7kx3); for employer sentiment it is the [Glassdoor Reviews API](https://apify.com/johnvc/glassdoor-reviews-api?fpr=9n7kx3); for local businesses it is the [Yelp Reviews API](https://apify.com/johnvc/yelp-reviews-api?fpr=9n7kx3); and for restaurants it is the [OpenTable Reviews API](https://apify.com/johnvc/opentable-reviews-api?fpr=9n7kx3). They share the same run-and-export pattern, so a task built here transfers directly.

#### How do I monitor brand reputation on AI search engines?

Review sites are only half the picture now, because a lot of buyers ask an assistant before they read reviews. Pair this Actor with the [Google AI Overview API](https://apify.com/johnvc/Google-AI-Overview-API?fpr=9n7kx3) and the [Bing Copilot API](https://apify.com/johnvc/bing-copilot-api?fpr=9n7kx3) to capture what AI answers say about your brand on the same schedule you capture reviews, then compare the two.

#### How does media monitoring support reputation management?

Reviews tell you what customers experienced; media and search coverage tell you what everyone else hears about it. Running both on the same cadence lets you line a rating dip up against whatever was published that week, which is normally how you find out why the number moved. This Actor covers the review half of that pairing.

#### How do I choose a reputation monitoring tool for crisis prevention?

For early warning, what the tool measures matters more than how the dashboard looks. Ask whether you get the full star distribution or only the average, since a one-star share can double while the average barely moves. Ask whether the date of experience is kept separate from the posting date, because a cluster of bad experiences shows up in the experience dates before it shows up anywhere else. Then ask whether you can keep the history, because a snapshot cannot show a trend. This Actor returns the first two and leaves the storage and alerting to you, so it fits under a dashboard you already have rather than replacing it.

#### What is the difference between the review date and the date of experience?

The review date is when the review was posted. The date of experience is when the reviewer says the interaction actually happened. They often differ by days or weeks, and for trend analysis the date of experience is usually the more meaningful one.

#### Can I find reviews the business never replied to?

Yes. Filter for rows where `reviewReplies` is absent. Combined with a low `reviewRating`, that is your unanswered-complaint list.

#### Does it return the full star distribution or just the average?

Both. `companyOverallRating` is the headline average, and `starBreakdown` gives each level from five stars to one with an absolute count and a percentage share.

#### How many reviews can I collect per company?

Up to 1000 per company per run, set with `maxReviewsPerCompany`. The cap is applied at the source, so you are never charged for reviews beyond what you asked for.

#### How many companies can I put in one run?

Up to 200 company URLs. If you paste more, only the first 200 are collected, so split larger lists across runs or across saved tasks.

#### Can I search for companies by name or category?

No. You give the Actor company review-page URLs, or bare domains as shorthand, and it returns those companies' reviews. There is no keyword search and no category browse, so build your company list first and feed it in.

#### Can I filter reviews to a date range?

Only to the fixed windows the source offers: `Last 30 days`, `Last 3 months`, `Last 6 months`, or `Last 12 months`. Arbitrary calendar start and end dates are not supported. For a narrower slice, pull the window that contains it and filter on `reviewDate` or `dateOfExperience` afterwards.

#### Are all reviews verified?

No, and that is useful signal. `isVerifiedReview` tells you which ones the source verified, and `reviewerTotalReviews` shows how active the reviewer is overall.

#### Does it return reviewer email addresses?

No. Reviews carry a display name and a country, but no personal contact details. Company-level contact fields are the business's own published details.

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

You pay per review returned, and nothing at all for a company that returns no reviews. Because `maxReviewsPerCompany` is enforced at the source, the cap you set is also the ceiling on what a run can cost. Current rates are on the Store card.

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

Collecting publicly available information is generally lawful in most jurisdictions, though what you then do with it is governed by privacy and copyright law where you operate. Apify's write-up on [the legality of web scraping](https://blog.apify.com/is-web-scraping-legal/) is a good starting point. This Actor returns no reviewer contact details, and it is not legal advice: check your own obligations.

#### What do I do if I get no results?

Check the `error` rows first. A company URL that returns nothing produces a row with `result_type: "error"` and a plain-language `error_message` explaining why, so start there. The usual causes are a URL that no longer exists on the source site, a company with no reviews yet, or a `datePosted` window that excludes everything. Widen the window or drop it entirely and re-run.

### 🌐 About Alpha OSINT

This Actor is part of [Alpha OSINT](https://www.alphaosint.com), toolset of financial and operations data sources and APIs.
For support or requests for this actor, please start a ticket [directly on our support page](https://apify.com/johnvc/trustpilot-reviews-api/issues/open?fpr=9n7kx3).

Last Updated: 2026.08.10

# Actor input Schema

## `companyUrls` (type: `array`):

Company review-page URLs, for example https://www.trustpilot.com/review/example.com. A bare domain such as 'example.com' also works. Up to 200 companies per run.

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

How many reviews to return for each company. Defaults to 100. You are charged per review returned, so this is also your cost control. The cap is applied at the source, so nothing is collected or billed beyond it.

## `datePosted` (type: `string`):

Optional filter to return only reviews posted within a recent window. Leave empty for all reviews. The source accepts these fixed windows only, not calendar dates.

## Actor input object example

```json
{
  "companyUrls": [
    "https://www.trustpilot.com/review/www.dugood.org"
  ],
  "maxReviewsPerCompany": 100
}
```

# Actor output Schema

## `allResults` (type: `string`):

Every dataset item from this run: collected reviews and any error rows.

## `overview` (type: `string`):

Tabular overview of every review: company, stars, title, reviewer, experience date, verified flag.

## `reputation` (type: `string`):

Company-level view: overall rating, total reviews, the 5-to-1 star split, and reply activity.

# 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 = {
    "companyUrls": [
        "https://www.trustpilot.com/review/www.dugood.org"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("johnvc/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 = { "companyUrls": ["https://www.trustpilot.com/review/www.dugood.org"] }

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

```

## MCP server setup

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