Request a tool
All toolsGuidesMCP serverRequest a toolPlatformsCategories
Trustpilot Scraper icon

Trustpilot Scraper

Trustpilot reviews scraper at $0.45 per 1,000 plus $0.001 per run start. Rating, full text, author, date, verification and company replies.

70 runs on Apify $0.00045 per review ($0.45 / 1,000)
Run this in the cloudRun on Apify →

Reviews & Reputation Data

How it works

  1. 1
    Open it on Apify

    Hit Run on Apify — it opens the tool in the cloud, no install.

  2. 2
    Set the inputs

    Adjust companyDomains, companyDomain, maxReviews (sensible defaults are pre-filled).

  3. 3
    Click Run

    The tool runs on Apify’s cloud and collects the data for you.

  4. 4
    Export the results

    Download as JSON, CSV or Excel, or pipe straight into your app, Google Sheets, or an AI agent.

Pricing

$0.00045 per review = $0.45 per 1,000

You are charged forWhenPrice
Review returnedCharged per review returned (blocked/empty not charged).$0.00045
Actor StartCharged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event).$0.001

Pay-per-event pricing: you are billed per result, not per subscription — a run that returns nothing costs nothing beyond the start fee. Billing is handled by Apify on your own account. These are the live Apify store prices, in effect since 2026-08-04, and they are what you are actually charged.

Inputs

FieldWhat it doesType
companyDomainsOne or more company domains as they appear on Trustpilot, e.g. "www.amazon.com", "nike.com", "booking.com".array
companyDomainA single domain, if you prefer one box instead of the list above.string
maxReviewsHow many reviews to collect per company (Trustpilot shows ~20 per page; the scraper paginates). Note: some fields (title, text, author, authorCountry, likes, experiencedAt, replyText) can be null when Trustpilot omits them. You are charged only for genuine reviews; empty review shells and blocked/empty look-ups are not charged.integer
notionConnectorOptional. Write each review as a page into your Notion when the run finishes. Authorize a Notion connector once in Settings → API & Integrations → MCP connectors, then pick it here. Leave empty to skip (default) — results are always saved to the dataset regardless.string
notionParentIdOptional. The Notion data source ID of the database to write into (only used if a Notion connector is set). Leave empty to create the pages privately in your workspace instead.string

What you get

A structured dataset — each result includes fields like:

companyNameratingtitleauthorpublishedAtreviewUrl

Export every run as JSON, CSV or Excel, or send it to your app, a database, Google Sheets, or an AI agent.

Related tools in Reviews & Reputation Data

Other ready-to-run tools in the same category — all pay-per-use on the Apify cloud.

G2 Reviews Scraper iconReviews & Reputation Data

G2 Reviews Scraper

Scrape G2 software reviews at $1.70 per 1,000: rating, title, full text, reviewer, date and URL. Any product slug. No G2 account or API key needed.

Ready to run — no setup

Capterra Reviews Scraper iconReviews & Reputation Data

Capterra Reviews Scraper

Extract Capterra reviews without an API key or login. Ratings, pros, cons, sub-scores and reviewer profile for any product, as JSON, CSV or Excel.

Ready to run — no setup

Tripadvisor Reviews Scraper iconReviews & Reputation Data

Tripadvisor Reviews Scraper

Extract Tripadvisor reviews for hotels, restaurants and attractions: rating, full text, reviewer, hometown, trip type, owner response and review URL.

Ready to run — no setup

Booking.com Reviews Scraper iconReviews & Reputation Data

Booking.com Reviews Scraper

Extract public Booking.com guest reviews: rating, review title, positive and negative text, reviewer name and country.

Ready to run — no setup

Google Play Reviews Scraper iconApp Store Data

Google Play Reviews Scraper

Google Play reviews scraper at $0.09 per 1,000, flat at every volume. Unlimited reviews, any country or language, star and date filters. No API key.

Ready to run — no setup

2GIS Reviews Scraper iconMaps & Local Lead Generation

2GIS Reviews Scraper

Extract 2GIS reviews by place URL or city search: star rating, review text, author, date, photos, owner replies and aggregate rating. No 2GIS API key.

Ready to run — no setup

See all Reviews & Reputation Data →

Trustpilot Scraper

Scrape Trustpilot company reviews and ratings for any business — the full review text, star rating, reviewer, dates, verified flag, and the company's reply.

Trustpilot sits behind an AWS WAF JavaScript proof-of-work challenge that blocks plain HTTP scrapers. This actor runs a real browser that solves the challenge, reads reviews from the page's own embedded data (stable, not fragile CSS selectors), paginates through them, and rotates a fresh exit address and browser fingerprint on a block — returning reviews or an honest BLOCKED code, never a silent empty result.

It is the cheapest Trustpilot review scraper on the Apify Store, and the price below is flat: the same number on every Apify plan, with no volume tiers and no plan gates.

Pricing

$0.45 per 1,000 reviews ($0.00045 each), plus $0.001 each time a run starts.

Solving Trustpilot's AWS WAF challenge needs a real browser and a clean exit address, and both are already inside that $0.00045 — there is no separate compute charge, no proxy surcharge and no per-page fee. You are charged only for genuine reviews; everything else the actor pushes is free (see What gets charged).

1,000 reviews from a single run works out at $0.451 all-in.

Input

FieldTypeNotes
companyDomainsarray of stringsOne or more domains to look up, e.g. www.amazon.com, nike.com, booking.com.
companyDomainstringA single domain, if you prefer one box instead of the list. Used only when companyDomains is empty.
maxReviewsintegerReviews to collect per company (Trustpilot serves ~20 per page; the actor paginates). Default 100, max 5000.
proxyConfigurationobjectOptional. Leave it alone and the actor uses its own proven egress. Supply your own proxy servers and they are used exactly as given.
notionConnectorstringOptional. Write each delivered review into your Notion as well as the dataset.
notionParentIdstringOptional. The Notion data source ID to write into; empty creates the pages privately in your workspace.

Input field names follow the conventions used across similar Actors, so switching to this one is usually a drop-in change — point your existing input at it and it should run as-is.

Input example

{
  "companyDomains": ["www.amazon.com", "nike.com"],
  "maxReviews": 200
}

Use the domain exactly as Trustpilot shows it in the page URL — www.amazon.com, not amazon.com, if that is what the review page says. If you have the review page open, the domain is the part after /review/.

Output

One row per review, each carrying the company context (companyName, companyDomain, trustScore, starRating, totalReviews, categories, isClaimed, websiteUrl) plus the review itself: reviewId, rating, title, text, author, authorCountry, authorReviewCount, verified, likes, publishedAt, experiencedAt, language, replyText, replyAt, reviewUrl.

Because the company context is repeated on every row, the dataset exports straight to CSV or a spreadsheet without a join — one flat table you can pivot on rating or publishedAt immediately.

Sample output row

{
  "ok": true,
  "companyName": "Amazon",
  "companyDomain": "www.amazon.com",
  "trustScore": 4.1,
  "starRating": 4,
  "totalReviews": 152340,
  "categories": ["electronics_store", "shopping_mall"],
  "isClaimed": true,
  "websiteUrl": "https://www.amazon.com",
  "reviewId": "abc123",
  "rating": 5,
  "title": "Fast delivery",
  "text": "Ordered Monday, arrived Tuesday. Great service.",
  "author": "Jane D.",
  "authorCountry": "US",
  "authorReviewCount": 12,
  "verified": true,
  "likes": 0,
  "publishedAt": "2026-05-01T10:12:00Z",
  "experiencedAt": "2026-04-30T00:00:00Z",
  "language": "en",
  "replyText": null,
  "replyAt": null,
  "reviewUrl": "https://www.trustpilot.com/reviews/abc123"
}

Every row carries an ok flag. ok: true is a real, charged review. ok: false is always free and always explains itself with an errorCode, so a downstream job can filter on one field instead of guessing why a row looks thin.

What you can do with it

  • Reputation monitoring — run it on a schedule for your own domain and alert on any new review under 3 stars, using publishedAt as the watermark.
  • Competitive review mining — pull several domains in one run and compare rating distributions; categories tells you which Trustpilot vertical each company sits in.
  • Support and product researchtext plus experiencedAt gives you dated complaint data; feed it to an LLM for theme extraction.
  • Reply-rate auditingreplyText / replyAt are populated whenever the company answered, so you can measure how fast a business responds and how many reviews it ignores.
  • Verification filteringverified marks invited/verified reviews, so you can score only the reviews Trustpilot itself vouched for.

What gets charged

Pay per result: you are charged only for genuine reviews (ok: true). Specifically:

  • A review with no rating and no text is pushed for transparency with ok: false, errorCode: "EMPTY_REVIEW", and is never charged.
  • Blocked, not-found and empty look-ups return a coded diagnostic row (ok: false) and are never charged.
  • Bad or missing input returns one explanatory row and the run finishes SUCCEEDED — it does not fail and it does not bill you a per-review fee for telling you a field is missing.
  • Duplicate reviews are removed within a run, so you are not charged twice for the same review in one execution.

A run that returns nothing therefore costs only the $0.001 start fee.

Note: there is no cross-run dedup. The same review collected on a later run is a new row and is charged again — standard Apify behaviour. If you re-run on a schedule and only want new reviews, filter on reviewId or publishedAt on your side.

Limitations — read these before you plan a big run

These are the real edges of the actor. They are stated up front so you can design around them rather than discover them at scale.

  • Nullable fields. Trustpilot does not always send every field. The following can be null on a given review: title, text, author, authorCountry, authorReviewCount, likes, experiencedAt, language, replyText, replyAt, and (rarely) rating. Company-context fields trustScore, starRating, totalReviews, categories and websiteUrl can also be null when Trustpilot omits them.
  • Anti-bot is real. Trustpilot's WAF can refuse an exit address. The actor rotates address and fingerprint up to 10 times per company with backoff; if all rotations are refused it returns a BLOCKED row rather than pretending there were no reviews. Re-running usually succeeds because the next attempt starts from a different address.
  • Speed. A real browser plus a proof-of-work challenge is slower than a plain HTTP scraper. Expect roughly a page of ~20 reviews at a time, sequentially, and budget minutes rather than seconds for multi-thousand-review pulls. Raise the run timeout for very large jobs.
  • Pagination ceiling. The actor walks at most 500 pages per company (~10,000 reviews); maxReviews is capped at 5,000 per company in the input schema.
  • Ordering. Reviews come back in Trustpilot's own default page order (newest first). There is no filter for star rating, language or date range — collect and filter downstream.
  • Domains, not search. You give it company domains, not free-text company names. There is no name-to-domain lookup step; if the domain is wrong you get NO_RESULTS, not a guess.
  • Public data only. No login is used or supported, so anything Trustpilot hides from logged-out visitors is out of scope. Removed or moderated reviews are simply absent.
  • Metered residential proxies are not offered by this actor. If a request asks for them they are replaced with rotating datacenter addresses, which keeps the flat price honest. Your own proxy servers, supplied in the input, are always used exactly as given.

Troubleshooting

CodeWhat it meansWhat to do
BLOCKEDTrustpilot's AWS WAF refused every rotation.Re-run — the next attempt starts from a fresh exit address. You can also supply your own proxy servers in the input.
NO_RESULTSThe domain resolved but returned no reviews.Check the domain matches exactly what appears on the Trustpilot review page (e.g. www.amazon.com, not amazon.com).
BAD_INPUTNo domain was provided.Set companyDomains (or the single companyDomain field).
RATE_LIMITEDTrustpilot returned 429.The actor backs off and retries; lower maxReviews or split the job if it persists.
SERVER_ERRORTrustpilot returned 5xx.Usually transient — retry later.
NETWORKThe request could not reach Trustpilot.Retry; if it repeats with your own proxy servers set, check those servers.
EMPTY_REVIEWTrustpilot sent a review with no rating and no text.Nothing to do — the row is free and can be filtered out on ok: false.

None of these codes cost you a per-review charge.

Notes on egress

Egress is handled for you: static addresses that get through the WAF, with rotating datacenter addresses as a fallback, and the container's own address as a last lane. Supplying your own proxy servers in the input overrides all of it. Rotation can make a run slower, but it is what gets the data through. The browser also rotates its User-Agent across a pool on each block.

Billing summary

Two charges apply:

  • $0.001 run-start fee, each time a run begins.
  • $0.00045 per review actually delivered (ok: true) — $0.45 per 1,000.

Samples, diagnostics, empty review shells, in-run duplicates, blocked look-ups and no-result runs never incur the per-result fee. A run that returns nothing costs only the $0.001 start fee, and 1,000 reviews costs $0.451 all-in.