Trustpilot $0.75πŸ’°Reviews Ratings/Reply/Filter/Bypass 200 Limit avatar

Trustpilot $0.75πŸ’°Reviews Ratings/Reply/Filter/Bypass 200 Limit

Pricing

from $0.75 / 1,000 results

Go to Apify Store
Trustpilot $0.75πŸ’°Reviews Ratings/Reply/Filter/Bypass 200 Limit

Trustpilot $0.75πŸ’°Reviews Ratings/Reply/Filter/Bypass 200 Limit

πŸ’°$0.75 per 1,000 results – Ratings, Replies & Filters. Enterprise-grade Trustpilot scraper that extracts 40+ data points per review with built-in analytics and 100% verified reviews coverage. Bypassing the limit of only the first 10 pages. Perfect for business intelligence and market research.

Pricing

from $0.75 / 1,000 results

Rating

4.9

(15)

Developer

Muhamed Didovic

Muhamed Didovic

Maintained by Community

Actor stats

22

Bookmarked

623

Total users

307

Monthly active users

18 hours

Issues response

3 days ago

Last modified

Share

Trustpilot Reviews Scraper

There are two versions of the Trustpilot Reviews Scraper available:

Disclaimer: This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Trustpilot A/S or any of its subsidiaries. All trademarks mentioned are the property of their respective owners.

Overview

This scraper extracts reviews from Trustpilot.com for any business, domain, search term, or user profile. You get detailed review records including text, rating, verification metadata, consumer info, company replies, and optional company-level data (alerts, BasicLink rate, transparency stats). Designed for sentiment analysis, competitive monitoring, fraud-detection workflows, and brand reputation tracking.

What's new

  • Trustpilot /search?query=… URLs are now accepted as start URLs β€” paste the URL directly from Trustpilot's own search bar and the actor extracts the query and resolves it via autosuggest.
  • Authoritative basicLinkRate opt-in (includeCompanyAdditionalFields: true). The exact percentage Trustpilot shows on the transparency page, not a sample-derived approximation. See Optional company enrichment below.
  • consumerAlert / hasCollectedIncentivisedReviews flags in the company block (also gated on includeCompanyAdditionalFields).
  • Brand-name search via the searchTerms input β€” pass ["nike", "adidas"] instead of URLs.
  • Regional domain expansion β€” set expandRegionalDomains: true and the actor sweeps every regional sibling (nike.com, nike.uk, nike.de, …) under one input.
  • Country-targeted reviewer filter β€” keep only reviews from specific reviewer countries via filterCountries: ["US", "GB"].
  • Multi-axis filters β€” star ratings, languages, date range, verified-only, replies-only β€” all applied server-side at the gateway where possible.
  • Mobile JWT rotation flow β€” paste a fresh Bearer JWT via mobileBearerToken if the bundled one expires (see Token rotation).

Features

  • Three input formats β€” all accepted in the same startUrls list:
    • Business review page: https://www.trustpilot.com/review/example.com
    • User profile: https://www.trustpilot.com/users/53d12345000064000180b423
    • Search URL: https://www.trustpilot.com/search?query=Cialis (extracts the query and resolves via autosuggest)
    • …plus bare slugs (bankfive) and plain domains (example.com).
  • Or use the searchTerms field to look up brands by name without typing URLs (["nike", "noom", "marcovasco"]).
  • Optional company enrichment:
    • includeCompanyDetails: true adds a company block (display name, identifying domain, categories, trust score, …)
    • includeStats: true adds star distribution + total count
    • includeTransparency: true adds collecting-method distribution, reply behavior, monthly trends
    • includeCompanyAdditionalFields: true adds consumerAlert, consumerAlerts, hasCollectedIncentivisedReviews, and the authoritative basicLinkRate (sourced from Trustpilot's transparency page; falls back to a sample-derived approximation when the BU's data isn't reachable, with basicLinkRateSource: "trustpilot" | "derived" distinguishing the two)
  • Filters (all optional, composable):
    • filterStars: ["1", "2"] β€” keep only those star ratings (gateway server-side)
    • filterLanguages: ["en", "de"] β€” restrict to specific languages (gateway server-side)
    • filterDateRange: "last30days" | "last3months" | "last6months" | "last12months" | "all" (gateway server-side)
    • filterCountries: ["US", "GB"] β€” keep only reviews from these reviewer countries (client-side, since the gateway has no country param)
    • filterVerifiedOnly: true, filterRepliesOnly: true (both gateway server-side)
    • startDate: "YYYY-MM-DD" β€” exact chronological cutoff
  • Regional expansion (expandRegionalDomains: true, default) β€” when scraping a brand like nike, also pull from regional siblings (nike.de, nike.uk, …) under one shared maxItems budget.
  • Smart language coverage β€” multi-language sweep automatically fires on huge BUs (>800 reviews) so the gateway's per-stream cap doesn't truncate non-English reviews.
  • Locale-aware default language β€” when scrapeAllReviews: false, the actor derives the language from the BU's country (bancamediolanum.it β†’ it, darty.fr β†’ fr) so non-English BUs return their locale-native reviews by default.
  • Output parity with the major Trustpilot scrapers on the Apify Store β€” same field names, types, and CSV-friendly flattened columns (reviewerName, businessUrl, scrapedAt, …) plus 5+ exclusive fields.
  • Limits: maxItems per input (not global), with budget shared across regional siblings.
  • Proxies: full proxy configuration support. Residential strongly recommended for high-volume runs; required for the WAF-protected basicLinkRate enrichment (which uses Evomi sticky sessions).

How to Use

  1. Set Up: Apify account, access to the actor.
  2. Pick your input style β€” any of the following are accepted in the same run, even mixed together:
    • Business review URL: https://www.trustpilot.com/review/example.com
    • User profile URL: https://www.trustpilot.com/users/53d12345000064000180b423
    • Trustpilot search URL: https://www.trustpilot.com/search?query=Cialis (new β€” the query is extracted and resolved through autosuggest)
    • Just the domain: example.com (with or without https://)
    • Bare slug: bankfive (resolved via autosuggest)
    • Or use the searchTerms field to list brand names directly: ["nike", "noom"]
  3. Apply filters as needed:
    • Star ratings (filterStars), languages (filterLanguages), reviewer countries (filterCountries)
    • Rolling date window (filterDateRange) or hard chronological cutoff (startDate)
    • Verified-only / replies-only toggles
  4. Pick your enrichment level:
    • includeCompanyDetails: true for business info
    • includeStats: true for star distribution
    • includeTransparency: true for collecting-method + reply-behavior stats
    • includeCompanyAdditionalFields: true for consumerAlert + hasCollectedIncentivisedReviews + authoritative basicLinkRate (see Optional company enrichment)
  5. Run the Scraper: monitor progress in the Apify console.
  6. Data Collection: extracted data available as JSON, CSV, Excel, or via the dataset API.

Input Data

Five common input shapes β€” pick whichever fits your workflow:

A. Mixed URLs (single batch)

{
"startUrls": [
{ "url": "https://www.trustpilot.com/review/navimow.segway.com" },
{ "url": "https://www.trustpilot.com/users/53d12345000064000180b423" },
{ "url": "https://www.trustpilot.com/search?query=Nike" },
{ "url": "noom.com" }
],
"maxItems": 200,
"includeCompanyDetails": true,
"includeStats": true
}

B. Brand search by name (no URLs needed)

{
"searchTerms": ["nike", "adidas", "puma"],
"filterCountries": ["US"],
"filterStars": ["1", "2"],
"maxItems": 100,
"includeCompanyDetails": true
}

C. Negative-review monitoring (last 30 days, 1-2β˜… only)

{
"startUrls": [{ "url": "https://www.trustpilot.com/review/yourbusiness.com" }],
"filterStars": ["1", "2"],
"filterDateRange": "last30days",
"sortBy": "recent",
"maxItems": 1000
}

D. Full company snapshot with authoritative basicLinkRate

{
"startUrls": [{ "url": "https://www.trustpilot.com/review/bancamediolanum.it" }],
"includeCompanyDetails": true,
"includeCompanyAdditionalFields": true,
"includeStats": true,
"includeTransparency": true,
"maxItems": 50
}

E. Regional brand expansion

{
"searchTerms": ["nike"],
"expandRegionalDomains": true,
"maxItems": 5000
}

Input Fields Explanation

Input sources

  • startUrls (array): Each entry can be a Trustpilot /review/, /users/, or /search?query=… URL, a bare slug (bankfive), or a domain (noom.com). Localized hosts (fr.trustpilot.com, …) auto-normalize to www.trustpilot.com.
  • searchTerms (array): Brand names to resolve via autosuggest. Composable with startUrls.

Scope & filters

  • scrapeAllReviews (boolean, default true): When true, force language=all for maximum coverage. When false, derive language from the BU's country code (Italian BU β†’ Italian reviews) so non-English BUs return locale-native content. Overridden by an explicit filterLanguages.
  • filterStars (array of "1"-"5"): Server-side star filter.
  • filterLanguages (array of ISO 639-1 codes): ["en", "de"]. Server-side.
  • filterCountries (array of ISO 3166-1 alpha-2): ["US", "GB"]. Reviewer-country, client-side.
  • filterDateRange ("all" | "last30days" | "last3months" | "last6months" | "last12months"): Server-side rolling window.
  • filterVerifiedOnly (boolean): Server-side.
  • filterRepliesOnly (boolean): Server-side.
  • sortBy ("auto" | "relevancy" | "recent"): "auto" picks recent when startDate is set, relevancy otherwise.
  • startDate (YYYY-MM-DD): Hard chronological cutoff. Pagination short-circuits as soon as it crosses this date.
  • expandRegionalDomains (boolean, default true): Auto-fetch regional siblings of each brand.

Enrichment

  • includeCompanyDetails (boolean): Add a company block to every review record.
  • includeStats (boolean): Add stats block (star distribution + total).
  • includeTransparency (boolean): Add transparency block (collecting-method distribution, reply-behavior, monthly trends).
  • includeCompanyAdditionalFields (boolean): Add consumerAlert, consumerAlerts, hasCollectedIncentivisedReviews, and authoritative basicLinkRate to the company block. See Optional company enrichment.

Limits & performance

  • maxItems (integer): Per-input cap. Shared budget across regional siblings.
  • maxConcurrency (integer, default 10): Max parallel inputs.
  • minConcurrency (integer, default 1): Minimum parallelism.
  • maxRequestRetries (integer, default 100): Retry budget for failed mobile-gateway requests.

Mobile gateway auth (advanced β€” only set if the bundled token expires)

  • mobileBearerToken (string): Override the bundled Bearer JWT. See Token rotation.
  • mobileApiKey (string): Override the bundled apikey header.
  • mobileBearerAllRequests (boolean, default false): Attach Bearer on every request instead of just page 1.

Output Structure

The output data includes detailed information about each review. Here's a sample of the structure:

{
"id": "671d4064ff600a8a63bcea11",
"filtered": false,
"pending": false,
"text": "The manager was awesome in helping my brother & me in the loss of our younger brother regarding his accounts. DuGood also came through & helped us with another issue when no one else would. We truly appreciate your knowledge & caring toward your customers. It did not go unnoticed & you now have several family members who are new customers because of it. Thank you again!",
"rating": 5,
"labels": {
"merged": null,
"verification": {
"isVerified": true,
"createdDateTime": "2024-10-26T21:17:56.000Z",
"reviewSourceName": "AFSv2",
"verificationSource": "invitation",
"verificationLevel": "verified",
"hasDachExclusion": false
}
},
"title": "The manager was awesome in helping my…",
"likes": 8,
"dates": {
"experiencedDate": "2024-10-23T00:00:00.000Z",
"publishedDate": "2024-10-26T21:17:56.000Z",
"updatedDate": null
},
"report": null,
"hasUnhandledReports": false,
"consumer": {
"id": "671d4063422e94eeb1028118",
"displayName": "Cheryl",
"imageUrl": "",
"numberOfReviews": 1,
"countryCode": "US",
"hasImage": false,
"isVerified": false
},
"reply": {
"text": "Hi Cheryl,\n\nIt's heartwarming to hear about the support you received during such a difficult time. We are dedicated to our members and we're glad we could help you and your family. Thank you for sharing your touching experience with us.",
"publishedDate": "2024-10-30T17:25:46.000Z",
"updatedDate": null
},
"consumersReviewCountOnSameDomain": 1,
"consumersReviewCountOnSameLocation": null,
"productReviews": [],
"language": "en",
"location": null,
"source": "AFSv2",
"isVerified": true,
"verificationLevel": "verified",
"publishedDate": "2024-10-26T21:17:56.000Z",
"experiencedDate": "2024-10-23T00:00:00.000Z",
"updatedDate": null,
"reviewerName": "Cheryl",
"reviewerCountry": "US",
"reviewerNumberOfReviews": 1,
"url": "https://www.trustpilot.com/reviews/671d4064ff600a8a63bcea11",
"businessUrl": "https://www.trustpilot.com/review/www.dugood.org",
"businessName": "DuGood Credit Union",
"scrapedAt": "2026-05-23T15:30:42.000Z"
}

Output Fields Explanation

Core review fields

  • id: Unique identifier for the review.
  • filtered: Boolean β€” true if Trustpilot has hidden the review (moderation).
  • isPending: Boolean β€” true if the review is awaiting publication.
  • text: Review content.
  • rating: 1–5 stars.
  • title: Short review title.
  • language: ISO 639-1 language code ("en", "de", …).
  • source: Review source channel ("BasicLink", "InvitationApi", "Organic", "BusinessGeneratedLink", …).
  • likes / numberOfLikes: Helpful-vote count.

Dates (also duplicated at top level for CSV-friendly flat columns)

  • dates.publishedDate, dates.experiencedDate, dates.updatedDate, dates.submittedDate
  • Top-level: publishedDate, experiencedDate, updatedDate

Verification & labels

  • isVerified (top-level): authoritative β€” true when the review is verified.
  • verificationLevel: "verified", "invited", "organic", "not-verified", …
  • labels.verification.*: raw verification block (createdDateTime, reviewSourceName, verificationSource, verificationLevel, hasDachExclusion).
  • labels.merged: merge metadata (usually null).

Consumer / reviewer (nested + flattened)

  • consumer.{id, displayName, imageUrl, numberOfReviews, countryCode, hasImage, isVerified, verified}
  • Top-level flattened: reviewerName, reviewerCountry, reviewerNumberOfReviews

Business reply (when present)

  • reply.{text, publishedDate, updatedDate} β€” also aliased as companyReply for legacy consumers.

Reports & moderation

  • report: Report metadata if any (usually null).
  • hasUnhandledReports: Boolean.

Volume signals

  • consumersReviewCountOnSameDomain: How many other reviews this user left for this BU.
  • consumersReviewCountOnSameLocation: Same scoped to BU location.

Product / location

  • productReviews: Linked product reviews (usually []).
  • location: Physical-location info (usually null).

Convenience links

  • url: Direct link to the review page on Trustpilot.
  • businessUrl: Link to the BU's review page.
  • businessName: BU display name.
  • scrapedAt: ISO timestamp when this record was emitted by the actor.

Company Details Output (If includeCompanyDetails is set to true)

"company": {
"id": "592855190000ff0005a33f85",
"displayName": "DuGood Credit Union",
"identifyingName": "www.dugood.org",
"numberOfReviews": 4105,
"trustScore": 4.8,
"websiteUrl": "https://www.dugood.org",
"websiteTitle": "www.dugood.org",
"profileImageUrl": "//s3-eu-west-1.amazonaws.com/tpd/logos/592855190000ff0005a33f85/0x0.png",
"customHeaderUrl": "",
"promotion": null,
"hideCompetitorModule": false,
"stars": 5,
"categories": [
{
"id": "federal_credit_union",
"name": "Federal Credit Union",
"rank": "1",
"cardinality": "3",
"isPrimary": false
},
{
"id": "credit_union",
"name": "Credit Union",
"rank": "1",
"cardinality": "7",
"isPrimary": true
}
],
"breadcrumb": {
"topLevelId": "money_insurance",
"topLevelDisplayName": "Money & Insurance",
"midLevelId": "credit_debt_services",
"midLevelDisplayName": "Credit & Debt Services",
"bottomLevelId": "credit_union",
"bottomLevelDisplayName": "Credit Union"
},
"isClaimed": true,
"isClosed": false,
"isTemporarilyClosed": false,
"locationsCount": 0,
"isCollectingReviews": true,
"verification": {
"verifiedByGoogle": true,
"verifiedBusiness": true,
"verifiedPaymentMethod": true,
"verifiedUserIdentity": false
},
"contactInfo": {
"email": "marketing@dugood.org",
"address": "7505 Eastex Frwy",
"city": "Beaumont",
"country": "US",
"phone": "(409) 899-3430",
"zipCode": "77708"
}
}

Company Fields Explanation

  • id: Unique identifier for the company.
  • displayName: Display name of the company.
  • identifyingName: The identifying name of the company, typically the website URL.
  • numberOfReviews: Total number of reviews for the company.
  • trustScore: Trust score of the company on Trustpilot.
  • websiteUrl: Official website URL of the company.
  • websiteTitle: Title of the company’s website.
  • profileImageUrl: URL of the company’s profile image.
  • customHeaderUrl: URL for any custom header image (if applicable).
  • categories: Array of categories the company belongs to, including rank and primary status.
  • breadcrumb: Hierarchical classification of the company's industry or sector.
  • isClaimed: Boolean indicating if the company profile is claimed on Trustpilot.
  • verification: Object containing verification details about the company.
    • verifiedByGoogle, verifiedBusiness, verifiedPaymentMethod: Various verification types.
  • contactInfo: Contact details of the company, including email, address, city, country, phone, and zip code.

Statistics Output (If includeStats is set to true)

"stats": {
"total": 4105,
"one": 43,
"two": 15,
"three": 46,
"four": 168,
"five": 3833,
"totalNumberOfReviews": 3450
}

Statistics Fields Explanation

  • total: Total number of reviews collected.
  • one: Number of 1-star reviews.
  • two: Number of 2-star reviews.
  • three: Number of 3-star reviews.
  • four: Number of 4-star reviews.
  • five: Number of 5-star reviews.
  • totalNumberOfReviews: Total number of reviews that were actually processed.

Optional company enrichment

When you set includeCompanyDetails: true and includeCompanyAdditionalFields: true, each review's company block gains four extra fields:

"company": {
"displayName": "Banca Mediolanum",
"countryCode": "IT",
"consumerAlert": null,
"consumerAlerts": [],
"hasCollectedIncentivisedReviews": false,
"activity": {
"basiclinkRate": 72,
"basiclinkRateSource": "trustpilot"
}
}
  • consumerAlert / consumerAlerts: Trustpilot's "suspicious activity" alerts (null/empty when a BU has none).
  • hasCollectedIncentivisedReviews: true if the BU has historically collected reviews via incentives.
  • activity.basiclinkRate: percentage of the BU's reviews that came in via the BasicLink channel.
  • activity.basiclinkRateSource:
    • "trustpilot" β€” authoritative value from Trustpilot's own transparency surface.
    • "derived" β€” local approximation computed from the scraped review sample (used when the transparency page can't be reached).

How it works (and why it costs a bit more)

basicLinkRate only lives on Trustpilot's transparency page, which is behind an AWS WAF SDK-mode challenge from datacenter IPs. The actor bundles a NetworkBandwidth-challenge solver that runs through an Evomi sticky-session residential proxy to fetch the page once per business unit. Adds ~3-5 seconds + one residential proxy connection per unique BU (cached for the rest of the run). Free users without an Evomi proxy gracefully fall back to the derived value.

The flag is opt-in. Leave it off if you don't need this field; the rest of the actor's behavior is unchanged.

Token rotation

The actor bundles a Trustpilot iOS Bearer JWT used to authenticate against the mobile gateway. The token has a fixed expiry (currently mid-June 2026) β€” once it lapses, every mobile API call returns 401 and the actor stops working.

The actor will tell you before this becomes a problem. When the bundled JWT is within 30 days of expiry, the run's dashboard status will show:

⚠️ Mobile gateway Bearer JWT expires in N days β€” Rotate via the mobileBearerToken input before then.

When it's actually expired, the message escalates to:

⚠️ Mobile gateway Bearer JWT expired on … β€” Set mobileBearerToken to fix.

To rotate: capture a fresh Authorization: Bearer … header value from any Trustpilot iOS-app request to consumermobile-apigateway.trustpilot.com (using mitmproxy, Charles, or any HTTPS-inspecting iOS debugger), strip the Bearer prefix, and paste it into the mobileBearerToken input field. No code changes required.

Usage Tips

  1. For bulk scraping, use the "Bulk edit" feature to input multiple profile URLs or usernames.
  2. Adjust concurrency settings based on your network capabilities and Trustpilot's rate limits.
  3. Use proxy configuration for large-scale scraping to avoid IP blocks. Residential is recommended; required if you enable includeCompanyAdditionalFields.
  4. To monitor a single brand for negative reviews, combine filterStars: ["1", "2"] + filterDateRange: "last30days" + sortBy: "recent".
  5. For competitive analysis across multiple brands, use searchTerms rather than hunting down each /review/ URL.
  6. If basicLinkRateSource is "derived" in your output, the actor couldn't reach the transparency page for that BU β€” either enable a residential proxy (Evomi recommended) or accept the sample-based approximation.

Explore More Scrapers

If you found this Apify Smartbuyglasses Scraper useful, be sure to check out our other powerful scrapers and actors at memo23's Apify profile. We offer a wide range of tools to enhance your web scraping and automation needs across various platforms and use cases.

Support

Additional Services