Trustpilot Reviews Scraper — Full Pagination avatar

Trustpilot Reviews Scraper — Full Pagination

Pricing

from $0.50 / 1,000 review scrapeds

Go to Apify Store
Trustpilot Reviews Scraper — Full Pagination

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

evanatlasx

Maintained by Community

Actor 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 to www.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-scraped event per review pushed to the dataset.

Input

FieldTypeDefaultNotes
companyUrlsstring[]— (required)Review URLs or domains
maxReviewsinteger50Per company, max 500
starsinteger[]allAny of 1–5
languagestringTrustpilot defaulte.g. en, de (sent as languages= filter)
sortByrecency | relevancerecencyrelevance = Trustpilot's default ordering
requestDelayMsinteger600Pause 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-mandated apify/actor-node:20 image 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. Using apify/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 install
node 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/default
echo '{"companyUrls":["apple.com"],"maxReviews":50}' > storage/key_value_stores/default/INPUT.json
npm start