Trustpilot Reviews Scraper — Full Pagination
Pricing
from $0.50 / 1,000 review scrapeds
Trustpilot Reviews Scraper — Full Pagination
Scrape Trustpilot company reviews with real page-by-page pagination, star/language filters and dedupe. $0.0005 per review.
Pricing
from $0.50 / 1,000 review scrapeds
Rating
0.0
(0)
Developer
evanatlasx
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
8 hours ago
Last modified
Categories
Share
Trustpilot Reviews Scraper
Scrape public Trustpilot company reviews with real pagination — it keeps paging (20 reviews per page) until maxReviews or the last page, instead of stopping after page one.
- Input a Trustpilot review URL (
https://www.trustpilot.com/review/www.apple.com) or just a domain (apple.com— Trustpilot's own redirect resolves it towww.apple.com). - Filter by star rating and review language, sort by most recent or most relevant.
- De-duplicated by
companyDomain + reviewId. - Invalid / unknown companies are logged and skipped; the run continues with the next company.
- Pay-per-event: one
review-scrapedevent per review pushed to the dataset.
Input
| Field | Type | Default | Notes |
|---|---|---|---|
companyUrls | string[] | — (required) | Review URLs or domains |
maxReviews | integer | 50 | Per company, max 500 |
stars | integer[] | all | Any of 1–5 |
language | string | Trustpilot default | e.g. en, de (sent as languages= filter) |
sortBy | recency | relevance | recency | relevance = Trustpilot's default ordering |
requestDelayMs | integer | 600 | Pause between page requests |
{ "companyUrls": ["https://www.trustpilot.com/review/www.apple.com", "booking.com"], "maxReviews": 100, "stars": [1, 2] }
Output
One dataset item per review:
{"companyUrl": "https://www.trustpilot.com/review/www.apple.com","companyDomain": "www.apple.com","reviewId": "6ae28042249d9d9b014b4328","rating": 4,"title": "…","text": "…","date": "2026-10-29T01:07:46.000Z","experiencedDate": "2026-09-29T00:00:00.000Z","language": "en","countryCode": "US","isVerified": false,"authorName": "…","authorId": "69823c42508003ca728ad78d","replyText": null,"replyDate": null,"reviewUrl": "https://www.trustpilot.com/reviews/6ae28042249d9d9b014b4328","scrapedAt": "2026-10-30T06:44:06.692Z"}
A RUN_SUMMARY record in the default key-value store lists per-company counts, pages fetched and skipped companies with their error / HTTP status.
How it works
Reviews are read from the JSON that Trustpilot's own website (Next.js) loads for each review page: /_next/data/<buildId>/review/<domain>.json?page=N&stars=…&languages=…&sort=…. No login, no private API, no paywall bypass.
Trustpilot fronts its site with an AWS WAF JavaScript challenge. Plain HTTP clients usually get HTTP 403 "Verifying your connection". When that happens the Actor opens one public review page in a regular Google Chrome via playwright-core (no stealth plugins, no CAPTCHA solving), lets it load as for any visitor, then reuses that browser's cookies for fast plain-HTTP pagination. The session is refreshed automatically if the token expires (403) or Trustpilot deploys a new build (404). Locally the session is cached for 20 minutes in the OS temp dir.
Network errors, HTTP 429 and 5xx are retried 3 times with exponential backoff (honouring Retry-After).
Limitations
- Public reviews only. Only what Trustpilot shows anonymously on the public review page is collected. Trustpilot caps listing depth (e.g. ~100 pages when a star filter is applied).
- Anti-bot protection. Trustpilot may block automated traffic. In testing, plain HTTP got 403 from the WAF and headless Chrome was rejected as a bot; only a headed Chrome passed. The browser fallback therefore needs Google Chrome and a display (macOS/Windows desktop, or Linux with
DISPLAY/Xvfb). The spec-mandatedapify/actor-node:20image has no Chrome — on the Apify platform the Actor only works if plain HTTP is not challenged from the platform's IPs; otherwise each company fails with a clear 403 error. Usingapify/actor-node-playwright-chrome:20(with Xvfb) would enable the fallback, but this has not been verified on the platform. - Structure-change risk. The Actor depends on Trustpilot's internal Next.js data format and URL parameters (
page,stars,languages,sort). Any site redesign may break it until updated. - Headed Chrome means a browser window briefly opens when running locally.
- Respect Trustpilot's Terms of Service and applicable law (e.g. GDPR — reviews contain personal names) when using the data.
Local development
npm installnode test/acceptance.js # acceptance checks -> test/results.json# or run the Actor with local storage (no Apify account needed):mkdir -p storage/key_value_stores/defaultecho '{"companyUrls":["apple.com"],"maxReviews":50}' > storage/key_value_stores/default/INPUT.jsonnpm start