Back to Trustpilot
ApifyΒ·Trustpilot

Trustpilot All Reviews Scraper πŸ’°$0.5+ Β· No Cap Β· Incremental

/memo23/trustpilot-scraper-ppeasync$0.003 / result

[From πŸ’°$0.50/1K] Export every Trustpilot review β€” past the ~200-review web cap. Incremental mode: pull only reviews newer than a date, so daily syncs stay cheap. 40+ fields, company replies, ratings, reviewer country. Filter by star, language, date, verified. Brand search, regional domains. Runs as an Apify actor (20–120 s); results are dataset rows.

Charged per returned row plus the flat fee.

Input
  • startUrlsarray

    Enter one item per row. Each value can be a Trustpilot `/review/` or `/users/` URL, a Trustpilot `/search?query=…` URL (the query is extracted and resolved via autosuggest, same as the Search filters field), a company URL, or a bare slug such as `bankfive`. Wrong `/review/` slugs trigger a Trustpilo

  • searchTermsarray

    One brand name per row, e.g. `nike`, `noom`, `marcovasco`. The scraper resolves each to its canonical business unit and (when 'Expand regional domains' is on) also sweeps every regional sibling on Trustpilot's index.

  • reviewInsightsboolean

    Adds one `review_insights` row per company: rating breakdown & sentiment split, the recurring consumer complaint themes (delivery, refunds, support, billing, trust…), top negative-review terms, and request snippets. Deterministic β€” instant, no AI credits or keys required. Billed per company analyzed (default false)

  • painPointAnalysisboolean

    Adds a single `painPointAnalysis` row per company alongside the reviews: the top complaint themes (each with a severity score and how often it recurs), the missing features users keep asking for, quick wins, overall sentiment, and a short summary β€” the 'what should we fix / build next' teardown, str (default false)

  • enrichEmailsboolean

    If enabled, finds a contact email for each result from its own website (or by discovering it from the name). Adds contactEmail + contactWebsite columns plus a detailed emailEnrichment object. Best-effort. (default false)

  • qualifyByPaymentboolean

    Requires "Enrich with contact emails". Scans each business's website β€” reusing the pages already fetched for email discovery, so no extra cost or time β€” for payment processors and e-commerce platforms (Stripe, Shopify, PayPal, Paddle, Lemon Squeezy, WooCommerce, Square, Chargebee and more). Adds tak (default false)

  • scrapeAllReviewsboolean

    Controls the language scope requested from Trustpilot. **Enabled (default)**: requests every language available on the BU β€” maximizes coverage but mixes locales (e.g. a `.com` URL returns Italian, French, German reviews alongside English). **Disabled**: the scraper derives a single language from the (default true)

  • filterStarsarray

    Limit reviews to specific star ratings. Leave empty to include all ratings (1–5). (default [])

  • samplingstring

    Only matters when **Limit** is smaller than the brand's review count. **Balanced** (default) gives each star rating an equal share of the budget, so you see plenty of rare 1β˜… and 2β˜… reviews. **Representative** splits the budget to match the brand's actual rating mix β€” if a brand is 80% five-star, so (default "balanced")

    balanced, proportional

  • filterLanguagesarray

    ISO 639-1 codes (e.g. `en`, `de`, `fr`, or `unknown` for reviews Trustpilot couldn't classify). Leave empty to auto-discover and sweep all languages found on each business unit. **This is the right knob to use if you want to restrict results to one language** β€” locale subdomains in start URLs (e.g.

  • filterDateRangestring

    Server-side rolling date window. Equivalent to Trustpilot's own 'Date posted' filter. Only these values are accepted; anything else is rejected. For an exact cutoff, use the 'Only scrape reviews newer than' field below β€” they compose (the more restrictive one wins). (default "all")

    all, last30days, last3months, last6months, last12months

  • filterVerifiedOnlyboolean

    Equivalent to Trustpilot's own 'Verified reviews' toggle. Applied server-side, so non-verified reviews are filtered out before they reach you β€” no wasted requests. The canonical output's `isVerified` reflects truth (derived from `verificationLabel.type === 'verified'`; the raw response boolean is mi (default false)

  • filterRepliesOnlyboolean

    Equivalent to Trustpilot's own 'Reviews with replies' toggle. Applied server-side, so reviews without replies are filtered out before they reach you. (default false)

  • filterCountriesarray

    ISO 3166-1 alpha-2 country codes to keep, e.g. `US`, `GB`, `DE`. Matched against the reviewer's profile country (`consumer.countryCode`). Leave empty to keep all countries. Trustpilot has no server-side country filter, so this is applied client-side β€” non-matching reviews still cost a request and th

  • sortBystring

    How each review stream is ordered. `auto` uses `recent` (`createdAt:desc`), which pages to the end of a business's review history. `Most relevant` is capped by Trustpilot at 200 reviews per rating bucket, so pick it only when you specifically want their relevance ranking and are happy with a 200-ite (default "auto")

    auto, relevancy, recent

  • expandRegionalDomainsboolean

    After resolving each input, also fetch every regional sibling on Trustpilot's index that matches the same brand (e.g. `nike` β†’ `nike.com`, `nike.uk`, `nike.de`, `nike.dk`, …). Strict displayName matching keeps unrelated brands out. Shared `maxItems` budget across siblings. (default true)

  • strictNameMatchboolean

    When ON, reject autosuggest hits whose business name doesn't look like your query (e.g. `FACTORHY Avocats` β†’ `Omega Avocats` is rejected because the only shared word is the generic `avocats`). Useful when you'd rather see `BU not found` than reviews from an adjacent-but-wrong company. When OFF (defa (default false)

  • splitDatasetsboolean

    When ON, reviews go to the default dataset (clean, one row per review, no embedded `company`/`stats`/`transparency`) and BU metadata goes to a per-run sibling dataset named `businessUnits-` (one row per unique BU). Each review carries a `businessUnitId` you can JOIN on. The exact dataset id is writt (default false)

  • flattenCompanyDataboolean

    When ON, each review gets flat top-level company columns β€” `companyName`, `companyDomain`, `companyWebsite`, `companyTrustScore`, `companyStars`, `companyTotalReviews`, `companyCountryCode`, `companyUrl` β€” instead of (or alongside) the nested `company` object. Ideal for CSV/Excel exports where neste (default false)

  • emitInputStatusboolean

    When ON (default), any input that returns no reviews (brand not found on Trustpilot, empty business unit, or everything excluded by your filters) gets one diagnostic row in a per-run dataset named `inputStatus-` β€” with a machine-readable `reason` and a human-readable `detail`. The exact dataset id i (default true)

  • lastDaysinteger

    Scrape only reviews published in the last N days β€” e.g. **7** for a weekly run, **1** for daily. The window is recalculated every run, so a scheduled task always picks up exactly what's new without you editing a date. Ideal for keeping a database in sync. Leave empty to ignore. If you also set an ex

  • startDatestring

    Format YYYY-MM-DD, e.g., 2022-02-20. Used as a hard chronological cutoff: when set, the scraper switches to `sort=createdAt:desc` and short-circuits pagination as soon as it crosses the date.

  • includeCompanyDetailsboolean

    When enabled, each review item is enriched with the `company` block (display name, identifying domain, country, total review count, …). (default false)

  • includeStatsboolean

    When enabled, each review item is enriched with the `stats` block (total review count, per-star rating distribution, …). (default false)

  • includeTransparencyboolean

    When enabled, each review item is enriched with the `transparency` block (collecting method distribution, stars breakdown by method, monthly data, etc.). (default false)

  • includeCompanyAdditionalFieldsboolean

    On-demand enrichment. When enabled, each review's `company` block is augmented with `subscription` β€” Trustpilot's own published plan flags for that company (`isPayingCustomer`, `hasSubscription`, `isClaimed`, `claimedDate`, `isAskingForReviews`, `isUsingAIResponses` and more) β€” plus `consumerAlert`, (default false)

  • maxItemsinteger

    Per-input cap. With 3 inputs and `maxItems=30`, you can collect up to 90 reviews total (30 per input). When 'Expand regional domains' is on, this budget is shared across the primary BU and all its regional siblings. (default 10000)

  • maxConcurrencyinteger

    Maximum number of inputs being processed in parallel (each input runs many sequential page fetches). (default 10)

  • minConcurrencyinteger

    Minimum number of inputs that will be processed at the same time. (default 1)

  • maxRequestRetriesinteger

    Number of times the scraper will retry a failed request before giving up. (default 3)

  • proxyobject

    Leave empty β€” the actor already routes all traffic through its own built-in residential proxy at no extra cost to you. Only set this if you want to use your own proxies.

Run it

curl -s https://sooma.dev/v1/run \ -H "Authorization: Bearer $SOOMA_API_KEY" \ -H "Content-Type: application/json" \ -d '{"provider":"apify","endpoint":"/memo23/trustpilot-scraper-ppe","input":{}}'

Or ask your agent: it will call inspect for this schema and run it over MCP.