Trustpilot Reviews Scraper: Coverage Per Company
Pricing
from $0.40 / 1,000 reviews
Trustpilot Reviews Scraper: Coverage Per Company
Scrape Trustpilot reviews and company profiles for any domain, no login. Rating, title, text, dates, verification, reviewer country, company reply. Splits filters by star, language, date and topic to get past the 200 review wall and reports coverage per company. Pay per review.
Pricing
from $0.40 / 1,000 reviews
Rating
0.0
(0)
Developer
Automation Craft
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
9 days ago
Last modified
Categories
Share
Trustpilot Reviews Scraper: Coverage Per Company
Scrape Trustpilot reviews for any company domain with no login, and know exactly what you got. Every review row carries the rating, title, full text, published and experience dates, language, verification status, reviewer country, likes and the company's reply. Trustpilot shows the public at most 200 reviews per filter combination; this Actor splits your filters by star rating, language, date window and topic to collect past that wall, and writes one coverage row per company that says how many reviews exist on Trustpilot for your filters, how many you received, and why it stopped. A second mode finds companies by search keyword or Trustpilot category and returns one row per company with TrustScore, review count, categories, website, email, phone and address as listed.
You pay per review delivered. Duplicates, reviews already in your dedup memory, coverage rows, status rows, blocked pages, companies Trustpilot does not know and empty runs cost nothing.
Quick start
- Open the Actor and paste one company per line into Companies: a domain as Trustpilot writes it (
www.amazon.com,wise.com) or any Trustpilot review page URL. Non canonical domains are followed to the canonical page. - Set Max reviews per company (0 means everything the public pages serve) and, if you want them, star ratings, languages, a date window, verified only, with reply only, topics or a text search.
- Leave Full coverage on to collect past the 200 review wall, and tick Include a company profile row for TrustScore, rating distribution, categories, contact details, claim status, reply behaviour and Trustpilot's AI summary.
- Run it. Download the Reviews, Companies or Coverage view as JSON, CSV or Excel, or read the dataset through the API.
- For a weekly monitor, give the run a Dedup memory name and schedule it: every later run returns only reviews published since, free of charge for the ones it already delivered.
What you get
Review rows (type: "review")
Measured on 1,013 reviews from 6 companies (Amazon, Wise, eBay, Flodesk, Focusmate, Zara) in platform runs on 2026-09-16.
| Field | What it is | Filled |
|---|---|---|
reviewId, reviewUrl | Trustpilot's id and the public review page | 100% |
companyDomain, companyName | the canonical Trustpilot slug and display name | 100% |
rating | 1 to 5 stars | 100% |
title, text | headline and full review body | 100% |
language | ISO code of the review | 100% |
publishedDate, experiencedDate, updatedDate | ISO 8601 timestamps; updatedDate only when edited | 100%, 100%, about 5% |
isVerified, verificationLevel, verificationSource, reviewSource | Trustpilot's verification labels (invited, organic, verified); 16% of sampled reviews were verified | 100% |
reviewer.name, reviewer.countryCode, reviewer.reviewCount, reviewer.id | reviewer display name (optional), two letter country, how many reviews they wrote | 100% |
hasReply, reply.text, reply.publishedDate | whether the company answered, and what it said | flag 100%; a reply existed on 26% of the sampled reviews |
likes | useful votes | 100% |
shard | the filter combination that surfaced the review (for audit) | 100% |
location and productReviews exist for the few businesses that use Trustpilot locations and product reviews and are empty otherwise.
Coverage rows (type: "coverage"), one per company, free
| Field | Meaning |
|---|---|
reviewsAvailable, reviewsAvailableExact | reviews matching your filters on Trustpilot (the site's own count). Trustpilot counts star, language and date selections exactly; with a topic, verified, reply or text filter the count is unknown and reviewsAvailable is null |
reviewsAvailableAllFilters | the company's total review count in every language |
reviewsReturned, coveragePercent | what this run delivered |
capReason | complete, max-reviews-reached (your per company cap), max-total-reviews-reached and charge-limit-reached (run wide stops), public-wall (200 per filter, full coverage off), public-wall-after-sharding (splitting could not reach everything), page-budget-reached (the request budget for one company), fetch-errors (a page could not be loaded or stored after retries; the rows delivered before it are kept and billed once) |
shardsFetched, pagesFetched | how much work it took |
Measured 2026-09-16: a 356 review company reached 89 percent (317 reviews, 28 shards, 64 pages); a company under 200 reviews per star and language reaches 100 percent; Amazon (46,256 reviews) cannot be completed by any public scraper and the coverage row says so.
Company rows (type: "company")
In reviews mode (when Include a company profile row is on) and in companies mode: domain, name, trustpilotUrl, websiteUrl, trustScore, stars, numberOfReviews, numberOfReviewsLast12Months, ratingDistribution (one to five star counts), reviewLanguages (count per language), categories, primaryCategory, categoryPath, isClaimed, claimedDate, isClosed, isUsingPaidFeatures, countryCode, contact (email, phone, address, city, zipCode, country as listed on Trustpilot), replyBehavior (reply percentage, average days to reply), aiSummary, topicSummaries, similarCompanies (Trustpilot's own list of eight, with TrustScore and review count), logoUrl. Company search and category rows carry the listing fields; turn on Enrich each company from its profile page for the full set. In category and search listings the contact fields were filled for 71% (email), 51% (phone) and 57% (address) of 70 sampled companies; Trustpilot lists them only where the business provided them.
The run summary (type: "summary"), free
Counters for companies, reviews delivered and charged, duplicates and known reviews skipped, pages and shards fetched, login walls met, HTTP statistics, token refreshes, and billing counters that report attempted and platform confirmed charges separately.
How much does it cost to scrape Trustpilot?
Live prices at the BRONZE tier; Silver 10 percent and Gold 20 percent off the result events, no discount on the Actor start event.
| Event | Price | When it is charged |
|---|---|---|
| Review | $0.0005 ($0.50 per 1,000 reviews) | once per unique review row delivered |
| Company profile | $0.002 ($2.00 per 1,000 companies) | once per company row delivered |
| Actor start | $0.001 per GB of memory, once per run | the headless browser hop that clears Trustpilot's access challenge |
Worked examples: 1,000 reviews of one company with its profile row cost $0.50 + $0.002 + $0.001 = $0.503. A weekly monitor that finds 12 new reviews costs $0.006 + $0.001 = $0.007. A category export of 500 companies costs $1.00 + $0.001. The Store pricing card shows the same prices per 1,000 events: "$2.00 / 1,000" on the Company profile row means one company costs 0.2 cents.
Nothing is charged for duplicates, reviews your dedup memory already holds, coverage rows, status rows, the summary, blocked pages, companies that do not exist on Trustpilot or invalid input.
Input
| Field | Type | Notes |
|---|---|---|
mode | reviews or companies | default reviews; companies is picked automatically when only search queries or categories are given |
companies | list | domains or Trustpilot URLs, up to 200; two aliases of one profile are delivered once. An empty {} input runs the Console default (www.amazon.com, 200 reviews) |
maxReviewsPerCompany | integer | default 200, 0 = unlimited |
maxTotalReviews | integer | run wide stop, 0 = unlimited |
fullCoverage | boolean | default true |
stars | list of "1" to "5" | empty = all; with several values the reviews are collected per star rating |
languages | list of ISO codes | empty = every language (not Trustpilot's English only default) |
dateRange | all, last30days, last3months, last6months, last12months | Trustpilot's own windows |
verifiedOnly, withRepliesOnly | boolean | server side filters |
topics | list of topic ids | e.g. customer_service, delivery_service, refund |
searchText | string | Trustpilot's search inside reviews |
sort | recency or relevance | |
includeCompanyProfile | boolean | one paid company row per company |
includeReviewerDetails | boolean | default true; false drops reviewer names |
dedupMemoryName, resetDedupMemory | string, boolean | cross run memory for monitors |
searchQueries, categories, country, minTrustScore, claimedOnly, maxCompanies, enrichCompanyProfiles | companies mode | category ids or category URLs; country as a two letter code |
maxConcurrency | 1 to 5 | companies scraped in parallel |
proxyConfiguration | proxy | Apify's automatic datacenter pool is enough |
API example:
curl -X POST "https://api.apify.com/v2/acts/automation_craft~trustpilot-reviews-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \-H "Content-Type: application/json" \-d '{"companies": ["wise.com"], "stars": ["1", "2"], "maxReviewsPerCompany": 100, "includeCompanyProfile": true}'
from apify_client import ApifyClientclient = ApifyClient("APIFY_TOKEN")run = client.actor("automation_craft/trustpilot-reviews-scraper").call(run_input={"companies": ["www.booking.com"], "dateRange": "last30days", "dedupMemoryName": "booking-weekly"})for item in client.dataset(run["defaultDatasetId"]).iterate_items():if item["type"] == "review":print(item["rating"], item["publishedDate"], item["title"])
What this Actor does NOT do
- It does not log in, use cookies or borrowed tokens. The public wall is 200 reviews per filter combination; splitting reaches more, and the coverage row tells you how much. A company with tens of thousands of reviews in one language and star rating cannot be completed by any public scraper.
- It does not translate reviews, download review images, or write to Trustpilot.
- It does not return the Trustpilot Business API's private fields (invitation data, tags, private notes).
- Trustpilot's
robots.txtdisallows automated access and its Terms of Use restrict scraping; you are responsible for how you use the data.
FAQ
Why do most Trustpilot scrapers stop at 200 reviews, and what does this Actor do about it?
Trustpilot serves pages 1 to 10 of any review list to the public and redirects page 11 to a login page. That is 200 reviews per filter combination. This Actor never asks for page 11; with Full coverage on it splits your filter by star rating, then by language (using Trustpilot's own per language counts), then by date window and topic, and adds the relevance ordering, verified only and with reply views, each of which opens another 200. Every company gets a coverage row so you can see the result.
Can I get more than 200 reviews by splitting the run across star ratings, languages or date windows?
Yes, and you do not have to do it by hand: Full coverage does the splitting, deduplicates by review id and charges each review once. You can still narrow a run yourself with stars, languages, dateRange or topics; the Actor then splits only the remaining dimensions.
Can I scrape only the 1 and 2 star reviews?
Set stars to ["1", "2"]. The filter is applied on Trustpilot's side, so you pay only for the low rated reviews you receive.
Does the output include the company's reply, and can I find reviews the business never answered?
Every review row has hasReply and, where present, reply.text and reply.publishedDate. Filter the export on hasReply false for unanswered reviews, or set withRepliesOnly to true for the opposite.
Can I scrape several companies in one run, or discover companies from a category instead of listing domains?
Give up to 200 domains in one run, each with its own coverage row. Switch to companies mode with a category id or URL (up to 10,000 companies per category, filtered by country, TrustScore and claimed status) or a search keyword to get company rows, then feed the domains back into a reviews run.
Can I schedule this weekly and get only the reviews that are new since the last run?
Set a dedupMemoryName. The Actor keeps a named key-value store of delivered review ids per memory name; later runs skip those reviews free of charge and deliver only new ones. Combine with dateRange: "last30days" so each run reads only recent pages.
Why does this Actor run with limited permissions?
It needs only its own storages and the named dedup memory it creates itself. Limited permissions mean it cannot touch anything else in your account, which is the least privilege the platform offers.
Changelog
- 0.1 (2026-09-16): first release. Reviews mode with full coverage sharding and coverage rows, companies mode (search and categories), dedup memory, company profile rows.