Trustpilot Scraper - Reviews at $0.45 per 1,000 avatar

Trustpilot Scraper - Reviews at $0.45 per 1,000

Pricing

from $0.45 / 1,000 review returneds

Go to Apify Store
Trustpilot Scraper - Reviews at $0.45 per 1,000

Trustpilot Scraper - Reviews at $0.45 per 1,000

Pull rating, title, full review text, author, date, verification status and company replies from any Trustpilot page. No login, no API key. The cheapest Trustpilot review scraper on the Store: $0.45 per 1,000 reviews plus $0.001 per run start, flat on every plan.

Pricing

from $0.45 / 1,000 review returneds

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

2 days ago

Last modified

Share

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.