Trustpilot Scraper - Reviews at $0.45 per 1,000
Pricing
from $0.45 / 1,000 review returneds
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
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
2 days ago
Last modified
Categories
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
| Field | Type | Notes |
|---|---|---|
companyDomains | array of strings | One or more domains to look up, e.g. www.amazon.com, nike.com, booking.com. |
companyDomain | string | A single domain, if you prefer one box instead of the list. Used only when companyDomains is empty. |
maxReviews | integer | Reviews to collect per company (Trustpilot serves ~20 per page; the actor paginates). Default 100, max 5000. |
proxyConfiguration | object | Optional. Leave it alone and the actor uses its own proven egress. Supply your own proxy servers and they are used exactly as given. |
notionConnector | string | Optional. Write each delivered review into your Notion as well as the dataset. |
notionParentId | string | Optional. 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
publishedAtas the watermark. - Competitive review mining — pull several domains in one run and compare rating distributions;
categoriestells you which Trustpilot vertical each company sits in. - Support and product research —
textplusexperiencedAtgives you dated complaint data; feed it to an LLM for theme extraction. - Reply-rate auditing —
replyText/replyAtare populated whenever the company answered, so you can measure how fast a business responds and how many reviews it ignores. - Verification filtering —
verifiedmarks 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
nullon a given review:title,text,author,authorCountry,authorReviewCount,likes,experiencedAt,language,replyText,replyAt, and (rarely)rating. Company-context fieldstrustScore,starRating,totalReviews,categoriesandwebsiteUrlcan also benullwhen 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
BLOCKEDrow 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);
maxReviewsis 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
| Code | What it means | What to do |
|---|---|---|
BLOCKED | Trustpilot'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_RESULTS | The 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_INPUT | No domain was provided. | Set companyDomains (or the single companyDomain field). |
RATE_LIMITED | Trustpilot returned 429. | The actor backs off and retries; lower maxReviews or split the job if it persists. |
SERVER_ERROR | Trustpilot returned 5xx. | Usually transient — retry later. |
NETWORK | The request could not reach Trustpilot. | Retry; if it repeats with your own proxy servers set, check those servers. |
EMPTY_REVIEW | Trustpilot 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.