Trustpilot Reviews Scraper avatar

Trustpilot Reviews Scraper

Pricing

from $0.25 / 1,000 review scrapeds

Go to Apify Store
Trustpilot Reviews Scraper

Trustpilot Reviews Scraper

Extract public Trustpilot company reviews: ratings, text, replies, reviewer info, and company trust score. Filter by stars, language, and date. Deep coverage past the ~200-review wall via smart filter slicing. No login required.

Pricing

from $0.25 / 1,000 review scrapeds

Rating

0.0

(0)

Developer

Daniel Valev

Daniel Valev

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

What does Trustpilot Reviews Scraper do?

Trustpilot Reviews Scraper collects public reviews from Trustpilot company profiles and saves one structured dataset item per review. Give it company domains or Trustpilot review URLs, optional star/language/date filters, and a maximum number of reviews per company.

It does not log in to Trustpilot, does not use mobile-app APIs or user cookies, and does not claim unlimited history. Trustpilot’s public pagination stops around page 10 (~200 reviews) per filter combination; with deep coverage the Actor slices filters (stars, then languages/dates) and merges unique reviews so you can go further without signing in.

Why scrape Trustpilot reviews?

Public reviews support competitor research, reputation monitoring, and incremental sync workflows:

  • schedule recurring runs and keep only reviews newer than publishedAfter
  • compare ratings and reply behaviour across companies
  • export JSON/CSV through Apify integrations, the API, or MCP

The default run scrapes 20 reviews for pipedrive.com so health checks stay cheap while still exercising the live browser + HTTP path.

What data can Trustpilot Reviews Scraper extract?

FieldTypeMeaning
reviewId / reviewUrlstringPublic review identity and URL
title / text / ratingstring / intReview content and stars
publishedDate / experienceDate / updatedDateISO datetimeTrustpilot timestamps (UTC)
language / likes / sourcestring / intLanguage, likes, source label
verificationLevel / isVerifiedstring / boolVerification metadata
authorName / authorId / countrystringPublic reviewer fields (optional anonymization)
replyMessage / replyPublishedDatestringCompany reply when present
companyName / companyDomain / companyTrustScoremixedCompany profile fields
scrapedAt / inputUrlstringActor metadata

Every field is always present; unavailable values are null (arrays default to []).

How to scrape Trustpilot reviews

  1. Open the Actor Input tab.
  2. Add one or more companyUrls (domain or full Trustpilot URL).
  3. Set maxReviewsPerCompany (use 0 for everything reachable on the public path).
  4. Optionally filter by stars, languages, date, verified, or withReplies.
  5. Keep Apify Proxy on the RESIDENTIAL group — datacenter IPs are commonly blocked by Trustpilot’s WAF.
  6. Run the Actor and open the Dataset tab (and COVERAGE_REPORT in the key-value store).

Incremental sync with publishedAfter

Set publishedAfter to an ISO date (YYYY-MM-DD, midnight UTC) or a full ISO date-time. Only reviews strictly newer than the cursor are saved and charged. With sort=recency, pagination stops as soon as a page crosses the cutoff.

Pricing

Pricing is pay-per-event. Platform usage is included in the event price (not billed separately). Configure the same numbers in Console Publishing → Monetization.

EventFree / no discountDescription
Run started (run-start)$0.005Once when the Actor run starts successfully
Review scraped (review-scraped)$0.0005 / review ($0.50 / 1,000)Per review saved to the dataset

Volume discounts on higher Apify plans:

PlanPer-review pricePer 1,000 reviews
No discount (Free)$0.00050$0.50
Bronze$0.00043$0.43
Silver$0.00035$0.35
Gold$0.00025$0.25

Reviews skipped by publishedAfter, deduplication, or filters are not charged. Blocked runs that produce zero reviews do not charge review events. Set a max total charge on the run to stop cleanly with stopReason = charge-limit-reached.

Input

See the Input tab for the full schema. Important fields:

  • companyUrls — required list of domains or Trustpilot URLs
  • maxReviewsPerCompany — 0 means unbounded within public/sliced reach; default/prefill is 20
  • languages — empty means all languages (the Actor sends languages=all; Trustpilot’s own UI often defaults to English-only)
  • deepCoverage — slice filters to work past the ~200-review public wall
  • anonymizeReviewers — replace authorName with initials; null authorId / authorImage
  • proxyConfiguration — defaults to Apify Proxy RESIDENTIAL

Output

Results are written to the default dataset. You can download JSON, CSV, Excel, and other formats, or read them through the dataset API.

{
"reviewId": "6ab516bdf6b3a0e76ca64942",
"reviewUrl": "https://www.trustpilot.com/reviews/6ab516bdf6b3a0e76ca64942",
"title": "Training was outstanding",
"text": "The onboarding session was clear and useful.",
"rating": 5,
"publishedDate": "2026-09-24T14:25:33.000Z",
"experienceDate": "2026-09-24T00:00:00.000Z",
"updatedDate": null,
"language": "en",
"likes": 0,
"verificationLevel": "not-verified",
"isVerified": false,
"source": "Organic",
"authorName": "Alex",
"authorId": "public-consumer-id",
"authorImage": null,
"authorReviewCount": 1,
"country": "IE",
"replyMessage": "Thank you for your feedback!",
"replyPublishedDate": "2026-09-24T14:36:05.000Z",
"replyUpdatedDate": null,
"companyName": "Pipedrive",
"companyDomain": "pipedrive.com",
"companyTrustScore": 4.4,
"companyStars": 4.5,
"companyTotalReviews": 3453,
"companyCategories": ["CRM Provider"],
"companyUrl": "https://www.trustpilot.com/review/pipedrive.com",
"scrapedAt": "2026-09-25T12:00:00.000Z",
"inputUrl": "pipedrive.com"
}

Coverage report

Each run also writes COVERAGE_REPORT to the default key-value store (not charged): companyDomain, reviewsTotalOnTrustpilot, reviewsReturned, coveragePercent, filterSlicesFetched, pagesFetched, stopReason.

stopReason is one of: complete, max-reviews-reached, published-after-reached, public-wall, public-wall-after-slicing, charge-limit-reached, not-found, blocked, fetch-errors.

Limits

  • Public pagination stops at about page 10 (~200 reviews) per filter combination; page 11 redirects to login. This Actor never logs in.
  • Deep coverage uses additional star/language/date slices and deduplicates by reviewId. Ordering is no longer a single global newest-first list once slicing is active.
  • Trustpilot fronts pages with an AWS WAF challenge. The Actor bootstraps a real browser once per proxy session, then prefers cheap /_next/data/... HTTP pages. If __NEXT_DATA__ disappears (App Router migration), the company fails loudly and raw HTML is saved as DEBUG_{domain}_page{n}.html.
  • A run that returns 0 reviews because of blocking ends as failed, not as a silent empty success.

Integrations and API / MCP

Use Apify schedules, webhooks, and integrations to push new reviews downstream. For programmatic access, use the Apify API or an MCP client configured against Apify. Call this Actor with the same JSON input you would use in Console.

FAQ

Why do I see fewer languages than on Trustpilot in a browser?

Trustpilot’s own profile UI often defaults to English. Leave languages empty so this Actor requests all languages via languages=all.

Can I get more than 200 reviews for a large company?

Yes, enable deepCoverage and set maxReviewsPerCompany above 200 (or 0). Coverage still depends on how well star/language/date slices separate the catalogue; COVERAGE_REPORT records when the public wall remains after slicing.

Does anonymizeReviewers remove all personal data?

No. Review text can still contain personal data. Anonymization only initials the display name and drops author id/image. You remain responsible for GDPR and other applicable law.

Responsible use

This Actor only reads public Trustpilot pages. Reviewer names and related fields can be personal data under the GDPR. You are responsible for complying with Trustpilot’s terms and applicable law, and for having a lawful basis before processing personal data.