# Trustpilot Negative Reviews Scraper - 1 & 2 Star (`vonsensey/trustpilot-negative-reviews-scraper-api`) Actor

Collect only the 1 and 2 star reviews for any company on Trustpilot, with the full complaint text, the date, the reviewer's country, and whether the company replied and what it said. Filtering by rating also reaches deeper history than an unfiltered scrape. Pay per review.

- **URL**: https://apify.com/vonsensey/trustpilot-negative-reviews-scraper-api.md
- **Developed by:** [Blackcube Agency AB](https://apify.com/vonsensey) (community)
- **Categories:** Business, Lead generation, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Trustpilot Negative Reviews Scraper - 1 & 2 Star

<table style="border-collapse:collapse;width:100%;margin:0 0 4px">
<tr><td colspan="3" style="padding:9px 12px;background:#0B6E75;border:1px solid #0B6E75"><span style="color:#FFFFFF;font-weight:700;font-size:13px;letter-spacing:.3px">Trustpilot Review Intelligence Suite</span><span style="color:#CFF0F2;font-size:12px"> &nbsp;&bull;&nbsp; 11 Actors, one codebase, one review billed once</span></td></tr>
<tr><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/trustpilot-reviews-scraper" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">Trustpilot Reviews Scraper</a><br><span style="color:#6B7280;font-size:11px">All Languages &amp; Replies</span></td><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/trustpilot-review-monitoring-scraper-api" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">Trustpilot Review Monitoring</a><br><span style="color:#6B7280;font-size:11px">New Reviews Only</span></td><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/brand-reputation-monitoring-scraper-api" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">Brand Reputation Monitoring Scraper</a><br><span style="color:#6B7280;font-size:11px">Trustpilot</span></td></tr>
<tr><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/trustpilot-competitor-analysis-scraper-api" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">Trustpilot Competitor Analysis Scraper</a><br><span style="color:#6B7280;font-size:11px">Rivals</span></td><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/trustpilot-data-export-csv-json-api" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">Trustpilot Data Export</a><br><span style="color:#6B7280;font-size:11px">Reviews to CSV &amp; JSON</span></td><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/trustpilot-star-rating-scraper-api" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">Trustpilot Star Rating Scraper</a><br><span style="color:#6B7280;font-size:11px">TrustScore API</span></td></tr>
<tr><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/customer-feedback-scraper-reviews-api" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">Customer Feedback Scraper</a><br><span style="color:#6B7280;font-size:11px">Trustpilot Reviews</span></td><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/trustpilot-email-scraper-company-contacts" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">Trustpilot Email Scraper</a><br><span style="color:#6B7280;font-size:11px">Company Contacts</span></td><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/trustpilot-leads-scraper-company-data-api" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">Trustpilot Leads Scraper</a><br><span style="color:#6B7280;font-size:11px">Company Data &amp; B2B</span></td></tr>
<tr><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#ECFDF5;vertical-align:top;width:33%"><span style="color:#0B6E75;font-weight:700;font-size:13px">Trustpilot Negative Reviews Scraper</span><br><span style="color:#0B6E75;font-size:11px;font-weight:600">&#10148; You are here</span></td><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/trustpilot-verified-reviews-scraper-api" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">Trustpilot Verified Reviews Scraper</a><br><span style="color:#6B7280;font-size:11px">Genuine</span></td></tr>
</table>

**More from this account:** [YouTube Transcript Suite](https://apify.com/vonsensey/youtube-transcript-scraper) · [Website Contact & Email Suite](https://apify.com/vonsensey/website-contact-email-extractor) · [Career Site & ATS Jobs Suite](https://apify.com/vonsensey/career-page-job-postings-scraper-api) · [Google News Suite](https://apify.com/vonsensey/google-news-scraper-api) · [Keyword Research Suite](https://apify.com/vonsensey/google-keyword-ideas-scraper) · [Shopify Store Intelligence Suite](https://apify.com/vonsensey/shopify-store-leads-scraper) · [eBay Data Suite](https://apify.com/vonsensey/ebay-scraper-api) · [Amazon Reviews Suite](https://apify.com/vonsensey/amazon-reviews-scraper-api) · [Reddit](https://apify.com/vonsensey/reddit-scraper-posts-comments-api) · [Meta Ad Library](https://apify.com/vonsensey/facebook-ads-library-scraper-meta-ad-api) · [Vinted](https://apify.com/vonsensey/vinted-scraper-api) · [App Store & Google Play Reviews Suite](https://apify.com/vonsensey/app-store-google-play-reviews-scraper)

Collect only the 1 and 2 star reviews for any company on Trustpilot, with the full complaint text, the date, the reviewer's country, and whether the company replied and what it said. Filtering by rating also reaches deeper history than an unfiltered scrape. Pay per review.

### Why this one

**It tells you what it could not reach.** Trustpilot serves at most 200 reviews for any one search — page 11 comes back empty. This Actor works around that by splitting a company's history into separate searches by star rating and by language, then walking each one, so a large company yields far more than 200. Where a slice still holds more than 200, the run says so by name in a coverage row instead of quietly returning a partial answer. None of the four leading Trustpilot Actors we benchmarked emits any completeness signal at all.

**It reads every language, not just English.** Trustpilot's own pages default to English. On one measured company that is 30,081 of 45,738 reviews — a scraper that leaves the default alone silently drops a third of the corpus, and you cannot tell from the output. This one asks for all languages by default and reports the exact review count per language.

**A schedule does not re-bill you for history.** Turn on change tracking and the Actor remembers every review id it has delivered, so tomorrow's run charges for tomorrow's reviews. There is no run-start fee, so a daily watch on a quiet brand costs nothing on a quiet day.

**Nothing in it expires.** No bundled token, no API key, no credential that lapses and takes the Actor down until someone redeploys it.

**You can cap the bill.** A per-company cap, a whole-run cap, and a hard dollar ceiling. Failed lookups, filtered-out reviews, companies with no Trustpilot profile and the coverage report are all free.

### What people use it for

- **Track what customers say about you and your competitors.** Put a list of brands on a daily schedule and get only the reviews that appeared since the last run, with the complaint text and whatever the company replied.
- **Build the evidence for a pitch or an audit.** Pull the 1 and 2 star reviews for a prospect, with the exact share of complaints they answer and how many days they take, straight from Trustpilot's own numbers.
- **Feed a sentiment or topic model.** Export the review text with the star rating, language, country and date attached, in every language the company has reviews in rather than English only.
- **Qualify B2B leads.** Get TrustScore, review volume and trend, category, country, published contact details and claimed status for a list of domains, without paying for review text you do not want.

### Getting started

Paste one or more Trustpilot company pages — or just their domains — into **Companies**, set how
many reviews you want per company, and run it. This listing starts already configured for complaints only - 1 and 2 star, with the company's reply; every other option is still available.

### Recipes

#### Every reachable review for one company

```json
{
  "companyUrls": ["https://www.trustpilot.com/review/www.currys.co.uk"],
  "maxReviewsPerCompany": 0
}
```

#### Just the complaints, with the company's answer

```json
{
  "companyUrls": ["www.currys.co.uk"],
  "ratings": ["1", "2"],
  "maxReviewsPerCompany": 500
}
```

#### A daily watch over several brands, billed only for new reviews

```json
{
  "companyUrls": ["www.currys.co.uk", "www.argos.co.uk", "www.johnlewis.com"],
  "onlyNewSinceLastRun": true,
  "stateLabel": "uk-retail",
  "maxReviewsPerCompany": 200
}
```

#### Only reviews that mention a word you care about

```json
{
  "companyUrls": ["www.currys.co.uk"],
  "searchTerm": "refund",
  "maxReviewsPerCompany": 300
}
```

Trustpilot applies this one itself, so you are billed for matching reviews rather than filtering afterwards.

#### Company data only, no review text

```json
{
  "companyUrls": ["www.currys.co.uk", "monzo.com", "www.tesco.com"],
  "companyProfilesOnly": true
}
```

One request per company. TrustScore, the full star spread, contact details, claimed status and reply behaviour — and no review charges at all.

### Input reference

| Field | What it does |
|---|---|
| `companyUrls` | Trustpilot company pages or plain domains. `www.trustpilot.com/review/x.com`, `uk.trustpilot.com/review/x.com` and `x.com` all work |
| `maxReviewsPerCompany` | per-company cap; 0 means as much as the Actor can reach |
| `maxReviews` | ceiling across the whole run |
| `includeCompanyProfile` | add the company intelligence row (charged separately) |
| `companyProfilesOnly` | company rows only, no reviews and no review charges |
| `ratings` | keep only these star ratings; also makes deep history cheaper to reach |
| `languages` | ISO codes such as `en`, `de`, `fr`; empty means all languages |
| `reviewsSince` / `publishedBefore` | date window |
| `searchTerm` | only reviews mentioning this word — applied by Trustpilot, so you are not billed for the rest |
| `sort` | newest first, or Trustpilot's own relevance order |
| `onlyVerified` / `onlyWithReplies` | keep only verified reviews, or only answered ones |
| `onlyNewSinceLastRun` + `stateLabel` | change tracking for scheduled runs |
| `maxCostUsd` | hard spending ceiling for the run |

### What you get

Each review row:

| Field | What it is |
|---|---|
| `rating` | 1 to 5 stars |
| `title`, `text` | the review as written |
| `publishedDate`, `experiencedDate` | when it was posted, and when the experience happened |
| `language` | ISO code of the review's own language |
| `isVerified`, `verificationLevel`, `verificationSource` | Trustpilot's verification state, read from the review's label rather than a raw flag |
| `isFiltered`, `isPending`, `hasUnhandledReports` | whether Trustpilot has filtered, held or received reports about this review |
| `reviewerName`, `reviewerCountry`, `reviewerTotalReviews` | who wrote it and how active they are |
| `reviewerReviewsOfThisCompany` | how many times this person has reviewed this company |
| `hasReply`, `replyText`, `replyPublishedDate` | the company's public answer |
| `locationName`, `locationId` | the branch, for multi-location businesses |
| `usefulCount` | how many people found it useful |
| `companyName`, `companyDomain`, `companyTrustScore`, `companyReviewCount` | flat columns so a spreadsheet needs no joins |
| `reviewUrl`, `reviewId` | a stable link and a stable id |

Each company row:

| Field | What it is |
|---|---|
| `trustScore`, `stars` | the headline score |
| `reviewCount`, `reviewCountLast12Months` | volume, and how much of it is recent |
| `ratingOne` … `ratingFive` | the exact star distribution |
| `languageBreakdown` | every language with its exact review count |
| `replyPercentage`, `averageDaysToReply` | what share of negative reviews the company answers, and how fast |
| `negativeReviewsWithReplies`, `totalNegativeReviews`, `lastReplyToNegativeReview` | the numbers behind that |
| `contactEmail`, `contactPhone`, `contactAddress`, `contactCity`, `contactZipCode` | the contact details the company publishes on its profile |
| `primaryCategory`, `categories`, `countryCode` | how Trustpilot classifies it |
| `isClaimed`, `claimedDate`, `isClosed`, `isTemporarilyClosed` | profile status |
| `verifiedByGoogle`, `verifiedPaymentMethod`, `verifiedUserIdentity`, `hasConsumerAlert` | trust signals |
| `similarCompanies` | companies Trustpilot lists alongside this one, with their scores |

And one free coverage row per company:

| Field | What it is |
|---|---|
| `reviewsReturned` | what you got |
| `writtenReviewsTotal` | how many reviews with text exist |
| `reviewsTotal` | Trustpilot's headline count, which also counts star-only ratings that carry no text and that no listing page serves |
| `saturatedCells` | the searches that hit the 200 ceiling, named |
| `unreachableEstimate` | written reviews not returned |
| `stoppedBecause` | why the run stopped for this company |

### Run it on a schedule

This is built to be put on a cron. Set `onlyNewSinceLastRun` to true and give `stateLabel` a
name — for example `uk-retail` — and reuse that exact label on every run. The Actor keeps the
ids of every review it has already handed you, so a scheduled run delivers and charges for new
reviews only. There is no run-start fee, so a morning where nobody reviewed you costs nothing.

In Apify, open the Actor, choose **Schedules**, and add one — `0 7 * * *` runs it every day at
07:00 UTC. Point `reviewsSince` at your last run instead if you would rather bound it by date.

### Pricing

| Charged for | Free | Bronze | Silver | Gold | Platinum | Diamond |
|---|---|---|---|---|---|---|
| 1,000 reviews | $5.00 | $4.20 | $3.20 | $2.50 | $2.30 | $2.10 |
| 1,000 company profiles | $16.00 | $13.50 | $10.30 | $8.00 | $7.40 | $6.80 |

The Store card shows the Gold tier. So 1,000 reviews is **$2.50**
on Gold, and a company profile is **$8.00 per 1,000**.

There is **no charge for starting a run**, and these are always free:

- companies with no Trustpilot profile, and anything else that produced no data
- reviews excluded by your own filters
- the per-company coverage report
- every diagnostic row explaining why an input returned nothing

### FAQ

#### How do I export Trustpilot reviews to CSV or Excel?

Run the Actor, open the run's **Storage** tab and choose CSV, Excel or JSON. The dataset ships
with a reviews view, a company view and a coverage view, so the export already has sensible
columns instead of every raw field.

#### Can I get more than 200 reviews from Trustpilot?

Yes, and it is worth understanding how. Trustpilot itself will not serve more than 200 results
for any single search — page 11 is empty. This Actor splits a company's history into separate
searches by star rating and language and walks each one, which is how it goes well past 200.
Where one slice still holds more than 200 reviews, that slice is named in the coverage row, so
you always know whether you have the whole picture. Nobody can return "all" reviews for a very
large company from the public pages, and any Actor that claims otherwise is not measuring it.

#### Does it get reviews in other languages?

Yes, all of them, by default. Trustpilot's pages show English first, so scrapers that do not
override that return only English. Every company row lists each language with its exact count
so you can check.

#### Do I need a Trustpilot API key?

No. Trustpilot's own APIs are sold to businesses for their own profile and are not available
for researching other companies. This Actor reads the public review pages, so there is nothing
to apply for and no credential to keep alive.

#### Does it get the company's replies to reviews?

Yes — `replyText` and `replyPublishedDate` on any review that has one, and `hasReply` to
filter on. The company row also carries what share of negative reviews the company answers and
how many days it takes on average.

#### What does a run actually cost?

You pay per review delivered, and per company profile if you keep that on. A run that returns
1,000 reviews on the Gold tier costs $2.50. Reviews filtered out by your own settings, companies
with no Trustpilot profile, error rows and the coverage report are all free, and there is no
charge for starting a run.

#### Will a daily schedule bill me for the same reviews again?

Not with `onlyNewSinceLastRun` on. The Actor remembers the review ids it has delivered under
your `stateLabel` and skips them, so you are charged for new reviews only.

#### Can I scrape reviewers' email addresses?

No. Trustpilot does not publish reviewer email addresses and neither does this Actor. The
contact fields are the company's own published details — the email, phone and address a business
puts on its Trustpilot profile.

#### Is this an official Trustpilot tool?

No. It is an independent Actor that reads publicly available review pages. It is not affiliated
with, endorsed by, or connected to Trustpilot in any way.

### Notes and limits

- **Unofficial.** Not affiliated with, endorsed by, or connected to Trustpilot A/S. "Trustpilot"
  is used only to say which public website this Actor reads.
- **Public data only.** It reads pages any visitor can open. It does not log in, and it collects
  no private or login-gated data.
- **Personal data.** Reviews carry the display name and country the reviewer chose to publish. If
  you process them for people in the EU/UK, that is personal data and the GDPR applies to what
  you do with it — you are the controller of your copy.
- **Reviews with no text.** Trustpilot's headline review count includes star-only ratings, which
  no listing page serves. Every run reports written reviews and star-only ratings as separate
  numbers so the gap is never a mystery.
- **There is a browser in the pipeline.** Trustpilot fronts its pages with a browser check.
  This Actor solves it the way it is meant to be solved — with a real browser — once per run,
  and then reuses that one session for every page and every company. Where Trustpilot also
  serves plain HTTP, it switches to that automatically because it is far faster. It never
  claims to be browserless, and it never needs an API key or a token you have to supply.

### Support

Something wrong, or a field you need? Open an issue on the
[Actor's issues tab](https://apify.com/vonsensey/trustpilot-negative-reviews-scraper-api/issues) and it gets looked at.

The full-featured version of this engine is [Trustpilot Reviews Scraper - All Languages & Replies](https://apify.com/vonsensey/trustpilot-reviews-scraper).

> **Run it without configuring anything** — [Scrape negative Trustpilot reviews](https://apify.com/vonsensey/trustpilot-negative-reviews-scraper-api/examples/scrape-negative-trustpilot-reviews), a ready-made example you can start as-is or copy.

### Use cases

- **Track what customers say about you and your rivals.** Put a brand list on a daily schedule and get only the reviews that appeared since the last run, with the complaint text and the company's answer.
- **Build the evidence for a pitch or an audit.** Pull a prospect's 1 and 2 star reviews alongside the exact share of complaints they answer and how many days they take, from Trustpilot's own numbers.
- **Feed a sentiment or topic model.** Review text with star rating, language, country and date attached — in every language the company has reviews in, not English only.
- **Qualify B2B leads.** TrustScore, review volume and trend, category, country, published contact details and claimed status for a list of domains, without paying for review text you do not need.

### Run it on a schedule

A one-off pull answers a question; a schedule answers it every day without you. Open **Schedules** in the Apify Console, point a cron at this Actor, and the dataset keeps filling on its own — no server, no cron box, no babysitting. Everything here is built to be re-run: you are billed per review delivered, so a scheduled run that finds nothing new costs nothing.

### FAQ

#### How do I export Trustpilot reviews to CSV or Excel?

Run it, then open the run's Storage tab and pick CSV, Excel or JSON. The dataset ships with a reviews view, a company view and a coverage view, so the export already has sensible columns.

#### Can I get more than 200 reviews from Trustpilot?

Yes. Trustpilot itself serves at most 200 results for any single search, so this splits a company's history into separate searches by star rating and language and walks each one. Where a slice still holds more than 200, the run names that slice in a free coverage row, so you always know whether you have the whole picture.

#### Does it return reviews in every language?

Yes, by default. Trustpilot's pages show English first, so scrapers that do not override that return English only — on one measured company that is 30,081 of 45,738 reviews. Every company row lists each language with its exact count.

#### Will a daily schedule bill me for the same reviews twice?

No, with change tracking on. The Actor remembers the review ids it has already delivered under your tracking label and skips them, so you are charged for new reviews only. There is no run-start fee either, so a quiet day costs nothing.

***

Something wrong, or a field you need that is missing? Open an issue on the **Issues** tab — it is read and it gets fixed. If this saved you time, a rating on the Store page helps the next person find it.

# Actor input Schema

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

Trustpilot company pages or plain domains, one per line. All of these work: https://www.trustpilot.com/review/www.amazon.com, uk.trustpilot.com/review/monzo.com, or just monzo.com. Companies with no Trustpilot profile come back as a free error row instead of failing the run.

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

Stop after this many reviews for each company. Set 0 for every review this Actor can reach — it automatically works around Trustpilot's 200-per-search ceiling by splitting the history by rating and language. Each run reports exactly what it reached and what it could not.

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

Hard ceiling across every company in the run. 0 means no overall limit.

## `includeCompanyProfile` (type: `boolean`):

Add one company intelligence row per company: TrustScore, the full 1-5 star spread, review counts by language, categories, published contact details, claimed and verification status, consumer alerts, and how much of its negative feedback the company actually answers. Turn this off and it is never charged.

## `companyProfilesOnly` (type: `boolean`):

Return just the company intelligence row for each company and skip the reviews entirely. One request per company, and no review charges. Use it when you want TrustScore, the star spread, contact details and reply behaviour across a list of companies.

## `ratings` (type: `array`):

Only return reviews with these star ratings. Leave empty for all of them. Picking ratings also makes deep history cheaper and more complete, because it is one of the axes used to get past the 200-per-search ceiling.

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

Two-letter language codes such as en, de, fr, da, nl. Leave empty to collect every language — which is what this Actor does by default, unlike a scraper that silently returns only the English reviews Trustpilot shows first.

## `reviewsSince` (type: `string`):

A date such as 2026-01-31. Reviews published before it are skipped and never charged. Ideal on a schedule: point it at your last run.

## `publishedBefore` (type: `string`):

Upper bound on the publication date, for pulling a fixed historical window. Applied after fetching, unlike the star and language filters which Trustpilot applies itself.

## `searchTerm` (type: `string`):

Only keep reviews whose title or text contains this word, for example refund, delivery, or cancelled.

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

Newest first is what a monitor wants. Most relevant is Trustpilot's own ordering. On a large company both are used anyway, because the two orderings surface different reviews and that is one of the ways this Actor reaches past the 200-per-search ceiling.

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

Keep only reviews Trustpilot marks as verified.

## `onlyWithReplies` (type: `boolean`):

Keep only reviews that carry a company reply.

## `onlyNewSinceLastRun` (type: `boolean`):

Remember which reviews were already delivered and skip them next time, so a daily or weekly schedule only ever charges for genuinely new feedback. Needs a tracking label below.

## `stateLabel` (type: `string`):

A name for this watch list, for example uk-competitors. Reuse exactly the same label on every run so the Actor knows which history to compare against. Different label means a separate, independent memory.

## `maxCostUsd` (type: `integer`):

A hard spending ceiling for this run. The run stops delivering once it would exceed it. Leave empty for no ceiling.

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

Leave this off. Trustpilot is reached directly from Apify's own network, which is both faster and more reliable here — routing through a proxy was measured to fail. Only change it if you have a specific reason.

## Actor input object example

```json
{
  "companyUrls": [
    "https://www.trustpilot.com/review/www.currys.co.uk"
  ],
  "maxReviewsPerCompany": 200,
  "maxReviews": 0,
  "includeCompanyProfile": true,
  "companyProfilesOnly": false,
  "ratings": [
    "1",
    "2"
  ],
  "languages": [],
  "sort": "recency",
  "onlyVerified": false,
  "onlyWithReplies": false,
  "onlyNewSinceLastRun": false,
  "stateLabel": "my-watchlist",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `reviews` (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 = {
    "companyUrls": [
        "https://www.trustpilot.com/review/www.currys.co.uk"
    ],
    "maxReviewsPerCompany": 200,
    "ratings": [
        "1",
        "2"
    ],
    "stateLabel": "my-watchlist"
};

// Run the Actor and wait for it to finish
const run = await client.actor("vonsensey/trustpilot-negative-reviews-scraper-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.currys.co.uk"],
    "maxReviewsPerCompany": 200,
    "ratings": [
        "1",
        "2",
    ],
    "stateLabel": "my-watchlist",
}

# Run the Actor and wait for it to finish
run = client.actor("vonsensey/trustpilot-negative-reviews-scraper-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.currys.co.uk"
  ],
  "maxReviewsPerCompany": 200,
  "ratings": [
    "1",
    "2"
  ],
  "stateLabel": "my-watchlist"
}' |
apify call vonsensey/trustpilot-negative-reviews-scraper-api --silent --output-dataset

```

## MCP server setup

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