Trustpilot Scraper - Company Reviews and Ratings avatar

Trustpilot Scraper - Company Reviews and Ratings

Pricing

from $0.45 / 1,000 review returneds

Go to Apify Store
Trustpilot Scraper - Company Reviews and Ratings

Trustpilot Scraper - Company Reviews and Ratings

Scrape Trustpilot reviews for any company. Copy whatever follows /review/ in the URL. Trustpilot picks the domain, so Amazon is www.amazon.com, not amazon.com. Each review has rating, title, full text, author, country, verification, dates, reply and TrustScore. $0.45 per 1,000 reviews.

Pricing

from $0.45 / 1,000 review returneds

Rating

0.0

(0)

Developer

Dami's Studio

Dami's Studio

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

1

Monthly active users

10 hours ago

Last modified

Share

Trustpilot Scraper: company reviews with ratings, replies and TrustScore

Give it one or more company domains and get one row per review: the star rating, the title, the full text, who wrote it and from which country, whether Trustpilot verified it, when it was posted, when the experience actually happened, and the company's reply if there is one. Every row also carries the company's TrustScore and total review count, so you do not need a second lookup.

One thing trips people up on the first run. Trustpilot decides the exact domain string, and you have to match it. Amazon lives at www.amazon.com, not amazon.com. Copy whatever sits after /review/ in the Trustpilot address bar and paste that.

InputCompany domains, exactly as Trustpilot writes them
OutputOne row per review
CeilingAbout 200 reviews per company per run, the 10 pages Trustpilot lists without an account
Account neededNone
Price$0.45 per 1,000 reviews, flat on every plan

๐Ÿ” What Trustpilot Scraper does

It walks a company's review pages in order, about twenty reviews to a page, and turns each one into a row. Several domains in one run are handled one after another, and the per-company cap applies to each of them separately, so three domains at maxReviews: 100 is up to 300 rows.

Alongside the review itself you get the company context repeated on every row: companyName, trustScore, starRating, totalReviews, whether the profile is claimed, and the website Trustpilot has on file. That makes a single dataset enough to rank companies and read their reviews without joining anything.

experiencedAt is the date the reviewer says the thing happened, which is often days before publishedAt. It is the field to use when you are trying to tie a run of complaints to a bad week.

Three optional filters narrow the list: star ratings, a date range and the order. Trustpilot applies them itself, so a run for one-star reviews reads one-star pages and nothing else.

๐Ÿ“ฅ What you give it

{
"companyDomains": ["www.amazon.com", "nike.com"],
"maxReviews": 200
}
FieldDefaultWhat it is
companyDomainsnoneThe list version. Domains as Trustpilot writes them: www.amazon.com, nike.com, booking.com. The Console shows www.amazon.com as an example, but that is a prefill, so an API call has to send its own.
companyDomainnoneOne box instead of the list, if that suits you better. Only read when companyDomains is empty.
maxReviews100Per company, 1 to 5,000. Trustpilot serves about twenty per page, so this sets how many pages get loaded.
starRatingsnoneOnly reviews with these ratings, as a list from "1" to "5": ["1", "2"] for the complaints. Empty means every rating.
dateRangeanylast30days, last3months, last6months or last12months. Counts from the day the review went up (publishedAt).
sortByrecencyrecency is newest first, Trustpilot's own default. relevance is Trustpilot's relevance ranking.
notionConnectornoneOptional. Writes every delivered review into your Notion. Authorise a connector once under Settings, API and Integrations, MCP connectors, then pick it here.
notionParentIdnoneOptional. The Notion data source id to write into. Leave it empty and the pages are created privately in your workspace.
proxyConfigurationonOptional network setting. Leave it alone unless you want the run to leave through a network of your own, which is used exactly as you give it.

You can also paste the company's Trustpilot link, https://www.trustpilot.com/review/www.amazon.com, and the domain is read from it. That is the safest way, because the link already has Trustpilot's exact domain, www. and all. A link with filters in it, such as ?stars=1, is refused with a BAD_INPUT row rather than run without them. Paste the plain link and use the fields above instead.

๐Ÿ“ค What you get back

A real row from a recent run, with the review body cut short here for length:

{
"ok": true,
"companyName": "Amazon",
"companyDomain": "www.amazon.com",
"trustScore": 1.6,
"starRating": 1.5,
"totalReviews": 49297,
"categories": [],
"isClaimed": true,
"websiteUrl": "https://www.amazon.com",
"reviewId": "6aaf168f35c963635c9f54b2",
"rating": 1,
"title": "My item was delivered damage and open",
"text": "My item was delivered damage and open. It was not resolved. ...",
"author": "Octavian Augustus",
"authorCountry": "US",
"authorReviewCount": 2,
"verified": false,
"likes": 1,
"publishedAt": "2026-09-20T01:11:11.000Z",
"experiencedAt": "2026-09-19T00:00:00.000Z",
"language": "en",
"replyText": null,
"replyAt": null,
"reviewUrl": "https://www.trustpilot.com/reviews/6aaf168f35c963635c9f54b2"
}
FieldWhat it is
trustScore, starRatingThe company's weighted score and its rounded star value. Repeated on every row from that company.
ratingThis one review's stars, 1 to 5.
verifiedTrustpilot's own verification label, not a judgement about the reviewer.
experiencedAtWhen the reviewer says it happened, as opposed to when they wrote it.
replyText, replyAtThe company's public reply, or null when there is none.
authorReviewCountHow many reviews that account has written in total. A 1 is worth noticing.
categoriesTrustpilot's category ids, and an empty list on plenty of profiles.

title, text, author, authorCountry, likes, experiencedAt and replyText all come back null when Trustpilot does not publish them. That is normal, not a fault.

๐Ÿงพ Reading the output

Real reviews carry ok: true. Everything else carries ok: false and an errorCode, and none of those rows are charged.

CodeWhat it means
BAD_INPUTNo domain was sent, a filter value Trustpilot does not know, or a pasted link with its own filters. Nothing was loaded.
NO_RESULTSThe page loaded but there was no company there. Nine times out of ten the domain is missing its www., or has an extra one. With filters set it can also mean no review matched them, and the row's note says so.
EMPTY_REVIEWA review with no rating and no text. Kept so your count reconciles, never billed.
BLOCKEDTrustpilot refused the page after the run kept trying. Nothing was delivered for that domain.

The Console's Overview table hides text, trustScore, verified, replyText and experiencedAt, and shows diagnostic rows as mostly blank lines. Download the dataset as JSON, CSV or Excel, or switch the table to all fields.

โ–ถ๏ธ How to run it

  1. Find the company on Trustpilot and copy whatever follows /review/ in the address bar.
  2. Open Trustpilot Scraper and click Try for free.
  3. Paste the domain into Company domains. Add more lines for more companies.
  4. Set Max reviews per company. Try 20 first to check the shape.
  5. Click Start, then download the dataset.

๐Ÿ’ฐ How much does it cost?

$0.45 per 1,000 reviews. Flat on every Apify plan, no volume tiers.

You are billed per genuine review row. Empty review shells, repeated reviews inside a run and every diagnostic row are not charged. With filters set, a review that does not match them is never delivered, so it is never charged either.

๐Ÿ’ก What people use it for

  • Watching a competitor's rating and reading what changed, on a schedule.
  • Grouping complaints by experiencedAt to find the week something went wrong.
  • Checking how often a company replies, and how quickly, across a list of rivals.
  • Pulling one-star text into a summariser to get the recurring objection in the customer's own words.

๐Ÿšง What it does not do

  • Date ranges are fixed windows. The last 30 days, or the last 3, 6 or 12 months, counted from the day a review went up. For any other window, filter on publishedAt or experiencedAt afterwards.
  • No reviewer profiles. You get the display name, country and their total review count, nothing more.
  • Not the whole history for a big company. Trustpilot lists 10 pages, about 200 reviews, of any one view to a visitor without an account, so that is what one run gets per company. Filters are how you reach further: the newest 200 one-star reviews and the newest 200 five-star reviews are two different sets.
  • A stopped walk does not always explain itself. If a run was serving reviews and then stopped early, you get the shorter set without a diagnostic row telling you why.
  • The domain must be Trustpilot's exact one. Getting it wrong gives you an empty result, not a helpful correction.
  • Null is common. Several fields depend on what the reviewer filled in and what Trustpilot chooses to publish.
  • Rows are a snapshot. Reviews get edited and removed, and TrustScore moves.

๐Ÿงญ Which reviews scraper do you need?

If you wantUse
Trustpilot reviews and TrustScoreThis one
Software reviews from G2G2 Reviews Scraper
Software reviews from CapterraCapterra Reviews Scraper
Reviews of a physical placeGoogle Maps Reviews Scraper
Employee reviews instead of customer onesGlassdoor Reviews Scraper

โ“ Questions people ask

Which domain do I type? The one in Trustpilot's own URL, after /review/. If their page says www.amazon.com, then amazon.com will find nothing.

Can I get reviews from a date range? Within fixed windows, yes: set dateRange to the last 30 days or the last 3, 6 or 12 months. For any other range, filter on publishedAt or experiencedAt afterwards.

Can I run several companies at once? Yes. Put each on its own line, and remember the cap is per company.

Why is text empty on some rows? Star-only reviews exist. If there is no rating either, the row comes back as EMPTY_REVIEW and is not billed.

How do I avoid paying for the same review twice? Dedupe on reviewId, which is stable across runs.

Is this legal? These are public reviews on public company pages. They are written by identifiable people, so GDPR and similar laws apply and you want a reason for collecting them. Apify's write-up on scraping and the law is a good starting point, and we are not lawyers.

๐Ÿ†˜ If something breaks

Open the Issues tab on the actor page. Send the exact domain string you used and the run id. The errorCode on the diagnostic row usually names the problem by itself.