Trustpilot Reviews & TrustScore Scraper
Pricing
from $0.18 / 1,000 reviews
Trustpilot Reviews & TrustScore Scraper
Give it domains such as monzo.com or Trustpilot URLs, in bulk. Get each review's rating, text, date and company reply, plus a free TrustScore summary. Filter by stars, language, date, keyword, topic or reviewer country. Reads past the 200-review limit without logging in. $0.25 per 1,000 reviews.
Pricing
from $0.18 / 1,000 reviews
Rating
0.0
(0)
Developer
Gautham Krishna
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 hours ago
Last modified
Categories
Share
Get Trustpilot reviews and each company's TrustScore as clean rows, for competitor analysis, customer research and reputation monitoring.
Use cases, each with a ready-to-run example:
- Pull a company's 1-star reviews
- Compare the TrustScores of competitors
- Get reviews together with the company's replies
- Find reviews that mention a word such as refund
- Monitor the reviews from the last 30 days
- Compare the reviews of competing online shops
It works for any business on any Trustpilot country site. Paste review page URLs or plain domains, set filters, and get one row per review plus one summary row per business.
You pay $0.25 per 1,000 reviews ($0.00025 each), and less on Apify Store discount tiers (Bronze, Silver, Gold), down to $0.175 per 1,000 on Gold. Company summary rows are free, and businesses that fail or have no Trustpilot page are never charged.
At a glance
| Topic | Details |
|---|---|
| Input | Many businesses per run, as Trustpilot review URLs from any country site or plain domains such as monzo.com. Filters: any mix of star ratings, language, date period (last 30 days up to last 12 months), verified only, replied only, keyword search, Trustpilot topics and reviewer countries. Newest first by default |
| Output | One JSON row per review: rating, title, text, language, dates, verified flag and the company's reply. Plus one free company row per business with TrustScore and star distribution |
| Price | $0.00025 per review ($0.25 per 1,000), or $0.225 per 1,000 on Bronze, $0.20 on Silver and $0.175 on Gold. No start fee. Company rows, unknown domains and failed fetches are free |
| Depth | Past Trustpilot's 200-review page limit without logging in. Above 200 reviews per business the scraper reads narrower filters, and on small and mid-size companies it returns most of the history, back to 2007 on Amazon. See "Past the 200-review limit" for what to expect by company size |
| Tested | 56 real businesses with up to 100,000 reviews each: all 56 returned reviews, 95,165 in total, in one 58-minute run. 112 businesses at 100 reviews each: 110 returned reviews, the other 2 have no Trustpilot page, in 58 seconds |
What you get
One company summary per business (free):
| Field | What it holds |
|---|---|
domain, name, url | Trustpilot's domain key, display name and review page |
trustScore, stars | TrustScore (for example 4.3) and the rounded star rating |
totalReviews, reviewsLast12Months | Review counts Trustpilot shows on the page |
starDistribution | Reviews per star rating, {"1": 547, "2": 52, ...} |
categories, primaryCategory | Trustpilot categories |
isClaimed, claimedDate | Whether the business claimed its profile, and when |
country, websiteUrl, isClosed | Business country, website, closed flag |
replyPercentage, averageDaysToReply | How the business answers negative reviews |
reviewLanguages | Review count per language |
matchingReviews, reviewsReturned, moreBehindLogin | How many reviews match your filters, how many you got, and whether Trustpilot hid the rest behind its login |
One row per review (charged):
| Field | What it holds |
|---|---|
businessDomain, businessName | Which business the review is about |
reviewId, reviewUrl | Trustpilot review ID and link |
rating, title, text, language | The review itself |
reviewDate, experienceDate, updatedDate | When it was published, the date of the experience, and the last edit |
isVerified, source, likes | Verified label, review source (for example Organic) and useful votes |
replyText, replyDate | The company's reply, when there is one |
reviewerCountry, reviewerReviewCount | Reviewer's country and how many reviews they have written |
The scraper does not collect reviewer names, emails, phone numbers or business contact details.
Input
{"businesses": ["https://www.trustpilot.com/review/www.booking.com","https://de.trustpilot.com/review/www.zalando.de","monzo.com"],"maxReviewsPerBusiness": 500,"stars": ["1", "2"],"language": "all","datePeriod": "last12months","verifiedOnly": false,"withRepliesOnly": false,"keyword": "refund","topics": ["customer_service"],"reviewerCountries": ["US", "GB"],"sort": "recency"}
| Input | What it does |
|---|---|
businesses | Trustpilot review URLs from any country site, website URLs or plain domains. booking.com finds www.booking.com on its own |
maxReviewsPerBusiness | Stop after this many reviews per business |
stars | Only these star ratings. Empty means all |
language | all (default) or a code such as en, de, fr. Trustpilot's own site shows only English unless you change it |
datePeriod | any, last30days, last3months, last6months or last12months |
verifiedOnly | Only reviews with Trustpilot's verified label |
withRepliesOnly | Only reviews the company answered |
keyword | Only reviews containing this word, through Trustpilot's own search. See below |
topics | Only reviews Trustpilot tagged with these topics. See below |
reviewerCountries | Only reviews from reviewers in these countries, as two-letter codes. See below |
sort | recency (newest first) or relevance |
splitToGetMore | Go past the 200-review page limit, see below. On by default |
onlyNewSinceLastRun | Off by default. See Monitoring below |
publishedAfter | Empty by default. See Monitoring below |
Monitoring: only new reviews and a date cutoff
Two optional inputs turn a scheduled run into a feed of new reviews. Both are off by default, and a run without them works exactly as before.
| Option | What it does |
|---|---|
onlyNewSinceLastRun | Returns only reviews this scraper has not returned to you before for the same business and filters, and nothing older than the newest one it returned last time. The first run returns the usual results and remembers them |
publishedAfter | Only reviews published on or after a date: 2026-10-01, 2026-10-01T12:00:00Z (UTC), or a relative value such as 7 days |
With sort: "recency" the run stops at the first page that holds nothing new, so a daily run reads only the pages it needs.
With other orders it still skips old reviews, but it reads further to find new ones.
You pay only for the reviews returned.
publishedAfter takes an exact date, where datePeriod only offers Trustpilot's fixed periods.
The memory is a key-value store named trustpilot-reviews-scraper-monitor in your own Apify account, one record per business and filter set.
Delete that store to start over.
The free company row still comes back on every run, and its reviewsReturned counts only the new reviews.
Run it on a schedule
A daily run with onlyNewSinceLastRun: true turns the scraper into a review alert for the businesses you follow.
The default sort: "recency" lets each run stop at the first page with nothing new.
We ran the same 112 businesses on 15 Oct and again on 20 Oct.
The 20 Oct run returned 3,564 reviews, and a script found none that the 15 Oct run had returned and none older than its newest review per business.
- Set your input with
onlyNewSinceLastRun: trueand click Save as a new task. - On the task page, click Actions, then Schedule, and pick how often it runs. Apify's schedules guide covers cron times and time zones.
- On the task's Integrations tab, choose where each run's results go.
| Integration | What it does |
|---|---|
| Slack | Posts a message to your channel when a run finishes |
| Google Drive | Saves each run's results as a file in your Drive |
| Webhook | Sends the finished run, with its dataset ID, to your own URL |
| Make, Zapier, n8n | Adds each new row to a Google Sheet, a CRM or a database |
Each review has a stable reviewId, so a sheet or database can skip rows it already holds.
Keyword, topics and reviewer countries
| Filter | How it works |
|---|---|
keyword | Trustpilot's own search. Whole words, not case-sensitive, and accents count (rücksendung is not rucksendung). Several words match any of them, and a phrase in double quotes matches exactly. Trustpilot marks matches with <em> tags, which the scraper removes, so title and text read as written |
topics | Trustpilot's topic tags. Several topics match reviews that have all of them. IDs Trustpilot accepts: customer_service, delivery_service, product, order, refund, value_for_money, staff, price, quality, app, website, contact, payment, booking_process, location, delivery. Trustpilot silently ignores an ID it does not know, so the scraper checks, and a business where an ID was ignored returns a free invalid_input row naming it instead of unfiltered reviews |
reviewerCountries | Trustpilot has no country filter, so the scraper reads reviews and keeps the ones from the countries you list, such as ["US", "GB"]. You pay only for the reviews kept. A business stops after 50 pages plus 10 pages for every 20 matching reviews, so a country with few reviewers ends quickly |
In our tests, "keyword": "refund" on Amazon and Booking.com returned 80 reviews that all contain the word.
"topics": ["refund", "payment"] matched 4,203 Booking.com reviews.
"reviewerCountries": ["DE", "US"] on four companies returned 307 reviews, every one from Germany or the US.
Past the 200-review limit
Trustpilot shows visitors who are not logged in 10 pages of 20 reviews for each filter combination. Page 11 sends you to the login page. This scraper never logs in, and needs no account or cookie of yours.
Each narrower filter combination gets its own 200, so the scraper reads a business in stages.
- The plain list, then each star rating in each language. This runs whenever
splitToGetMoreis on, as before. - When
maxReviewsPerBusinessis above 200, it goes deeper inside each star and language: verified reviews, replied reviews, each of Trustpilot's 16 topics, then searches for words taken from the reviews it has already read.
A slice stops when it finds under 1 new review per request.
With maxReviewsPerBusiness at 200 or less, nothing changes from before.
Only-new monitoring runs stay on the fast newest-first path and never start stage 2.
How much of the history comes back depends on the company's size and on how many businesses share the run.
Trustpilot answers Apify's servers at about 4 to 5 requests per second, so a run's timeout sets the budget.
These are measured, as a share of the reviews Trustpilot lists for the company (matchingReviews):
| Company, three in one run with the default 1-hour timeout | Listed reviews | Returned | Share | Oldest returned |
|---|---|---|---|---|
| Allbirds (10 languages) | 2,646 | 2,597 | 98.1% | 2018-09-19 |
| Chewy (English only, three quarters 5 stars) | 13,208 | 11,644 | 88.2% | 2011-09-14 |
| Amazon (39 languages) | 46,850 | 36,668 | 78.3% | 2007-08-09 |
Amazon stopped at the cap of 6,000 page reads per business for the deeper stages, and Chewy where new reviews ran out at under 1 per request. The run took 51 minutes.
| Company size, 56 businesses in one run with the default 1-hour timeout | Businesses | Share returned, median (range) |
|---|---|---|
| Up to 200 reviews | 10 | 100% (100 to 100%) |
| 200 to 1,000 | 12 | 99.6% (78 to 100%) |
| 1,000 to 5,000 | 11 | 58% (20 to 99%) |
| 5,000 to 20,000 | 14 | 20% (5 to 54%) |
| Over 20,000 | 9 | 11% (2 to 24%) |
A business whose first page keeps failing against Trustpilot's rate limit gets one more try after the others, and only then becomes a free error row.
A few small companies returned slightly more than their listed count, because new reviews arrived after Trustpilot counted. They show as 100%.
So for full history of a big company, run it alone or with a few others, and raise the run timeout if you need more.
On big companies expect part of the history, not all of it.
The company row says how far it got.
Compare reviewsReturned with matchingReviews, and moreBehindLogin: true means Trustpilot held more back.
A message appears when the run's time, the business's share of it or the page cap ran out.
Two limits keep a run healthy. Every business gets its plain pages and star and language slices first, and only then do the deeper stages share the time that is left, equally, so one huge company cannot keep the others from starting. The run also watches its own timeout and stops reading shortly before it, so it ends as succeeded with the reviews it fetched saved, never as timed out. The status message then says "Time cap reached".
Reviews come grouped by filter rather than in one date order.
Sort by reviewDate afterwards if you need a timeline.
Output example
This is real output from a test run.
A review row:
{"type": "review","status": "ok","businessDomain": "wise.com","businessName": "Wise","reviewId": "6ac90d55aa6da2e8b4600dbe","rating": 5,"title": "Easy banking with the App","text": "Easy banking with the App and on my PC/Laptop. No matter where you are, always very fast transaction times. I am very satisfied with Wise until now.","language": "en","reviewDate": "2026-10-09T17:50:45.000Z","experienceDate": "2026-10-01","updatedDate": null,"isVerified": true,"source": "BusinessGeneratedLink","likes": 0,"replyText": "Hey there! \n\nKeeping your transfers quick and smooth across all your devices is what we're here for! Thanks for choosing us to handle your international payments.\n\nWise","replyDate": "2026-10-09T20:26:52.000Z","reviewerCountry": "BE","reviewerReviewCount": 6,"reviewUrl": "https://www.trustpilot.com/reviews/6ac90d55aa6da2e8b4600dbe"}
A review row from "keyword": "refund", with Trustpilot's <em> marks already removed:
{"type": "review","status": "ok","businessDomain": "www.amazon.com","businessName": "Amazon","reviewId": "6ad11c24ce0460b5c09749f4","rating": 1,"title": "Amazon is getting worse and worse","text": "Amazon is getting worse and worse. I can't get my refund I'm due, their deliveries are never here the day they're supposed to be, and their customer service is a joke. This is what I pay $145.00 a year for?????\nAmazon needs investigating.","language": "en","reviewDate": "2026-10-15T20:32:04.000Z","experienceDate": "2026-10-13","updatedDate": null,"isVerified": false,"source": "Organic","likes": 1,"replyText": null,"replyDate": null,"reviewerCountry": "US","reviewerReviewCount": 9,"reviewUrl": "https://www.trustpilot.com/reviews/6ad11c24ce0460b5c09749f4"}
The company summary row for monzo.com (reviewLanguages shortened here, the real row lists all 39 languages):
{"input": "monzo.com","type": "company","status": "ok","domain": "www.monzo.com","name": "Monzo","trustScore": 4.6,"stars": 4.5,"totalReviews": 73247,"reviewsLast12Months": 14037,"starDistribution": {"1": 7379,"2": 843,"3": 1057,"4": 4305,"5": 59663},"categories": ["Bank"],"primaryCategory": "Bank","isClaimed": true,"claimedDate": "2016-09-16T09:28:12.000Z","isClosed": false,"country": "GB","websiteUrl": "https://www.monzo.com","replyPercentage": 49.948927477017364,"averageDaysToReply": 3.06,"reviewLanguages": {"en": 71954,"pl": 55,"es": 38,"ro": 19},"businessUnitId": "57da77be0000ff000594bcdb","url": "https://www.trustpilot.com/review/www.monzo.com","matchingReviews": 72160,"reviewsReturned": 100,"moreBehindLogin": false}
The company row for www.allegro.pl from a 56-business deep run, where it got 2,447 of its 2,488 listed reviews (reviewLanguages shortened here, the real row lists 17 languages):
{"input": "www.allegro.pl","type": "company","status": "ok","domain": "www.allegro.pl","name": "Allegro","trustScore": 1.4,"stars": 1.5,"totalReviews": 2924,"reviewsLast12Months": 403,"starDistribution": {"1": 2546,"2": 112,"3": 50,"4": 45,"5": 171},"categories": ["Home & Garden"],"primaryCategory": null,"isClaimed": true,"claimedDate": "2019-12-10T09:06:54.000Z","isClosed": false,"country": "PL","websiteUrl": "https://www.allegro.pl","replyPercentage": 94.18282548476455,"averageDaysToReply": 0.3,"reviewLanguages": {"pl": 2213,"en": 205,"de": 20,"it": 12},"businessUnitId": "46d40693000064000500b7ad","url": "https://www.trustpilot.com/review/www.allegro.pl","matchingReviews": 2488,"reviewsReturned": 2447,"moreBehindLogin": true,"message": "Stopped when its share of the run's time ran out, so the other businesses get their turn. Run fewer businesses at once, or raise the run timeout, to get more"}
Pricing
Prices are per 1,000 reviews.
| Event | No discount | Bronze | Silver | Gold |
|---|---|---|---|---|
| Review returned | $0.25 | $0.225 | $0.20 | $0.175 |
| Company summary row | Free | Free | Free | Free |
| Business not found, invalid input or failed fetch | Free | Free | Free | Free |
Bronze, Silver and Gold are Apify Store discount tiers, and Apify's Pricing tab shows them as Starter, Scale and Business. Apify decides which tier an account is on.
Set a maximum cost per run in the run options. The scraper stops once that limit is reached.
Use it from AI agents and code
The scraper works as a tool through the Apify MCP server in Claude, Cursor, VS Code and other MCP clients. You can also call it through the Apify API or the Python and JavaScript clients, schedule it, or connect it to Make, Zapier and n8n.
More from heyitsgautham
Other actors from the same account.
- Hotel Reviews Scraper (Booking.com + Agoda) for guest reviews from Booking.com and Agoda, by hotel URL or hotel name.
- Tripadvisor Reviews Scraper: Hotels, Restaurants, Tours for Tripadvisor reviews of hotels, restaurants, attractions and tours, with sub-ratings and owner responses.
- Capterra Reviews Scraper for Capterra software reviews, by product URL or product name.
- YouTube Video & Shorts Comments Scraper with Replies for the comments and replies on a video or Short, for sentiment analysis and audience research.
- Google Trends Scraper: Related Queries & Trending Searches for Google Trends interest over time, related queries and Trending Now.
FAQ
Do I need a proxy? No. Trustpilot runs a browser check on every visitor. The scraper passes it once with a real headless browser, then reads the review data directly, which keeps runs fast and cheap. The proxy setting is there only in case Trustpilot starts blocking Apify's servers.
Why do I get fewer reviews than totalReviews?
Three reasons, in order of how often they happen.
Your filters exclude some reviews, and matchingReviews shows how many match.
Trustpilot hides reviews past the 200-per-filter limit, and moreBehindLogin shows when. Set maxReviewsPerBusiness above 200 to read deeper, as described above.
Trustpilot also counts some reviews it no longer shows.
What happens with a domain that has no Trustpilot page?
You get a free company row with "status": "not_found".
The scraper tries the domain with and without www. before giving up.
How fast is it? At 200 reviews or fewer per business, fast: 112 businesses with 100 reviews each (8,207 reviews) finished in 58 seconds. Deep runs take longer, because Trustpilot answers Apify's servers at about 4 to 5 requests per second. 56 businesses with up to 100,000 reviews each used the whole hour and returned 95,165 reviews.
Will the run time out?
No.
The scraper reads the run's own timeout and stops reading shortly before it, keeping everything it fetched.
A business it had no time to start gets a free error row that says so.
The default timeout is 1 hour. Raise it in the run options to get more of a big company's history.
Limitations
- Logged-out page limit of 200 reviews per filter combination. The deeper stages get past it for most small and mid-size companies, but on companies with tens of thousands of reviews a run returns part of the history, as the tables above show.
- Trustpilot rate-limits heavy reading from Apify's servers. The scraper slows down when that happens, and a page that still fails after 10 tries is skipped and counted in the company row's
message. - Trustpilot's
last7daysfilter is not offered, because Trustpilot ignores it. - Review text is what Trustpilot shows publicly. Reviews Trustpilot removed or hid are not available.
- Only use the data in ways that respect Trustpilot's terms and the privacy of reviewers.