Trustpilot Reviews Scraper avatar

Trustpilot Reviews Scraper

Pricing

$2.00 / 1,000 reviews

Go to Apify Store
Trustpilot Reviews Scraper

Trustpilot Reviews Scraper

Scrape Trustpilot reviews for any company: rating, title, text, dates, reviewer and company replies, plus the company profile and its star breakdown. Filter by stars, date, language, keyword or topic.

Pricing

$2.00 / 1,000 reviews

Rating

5.0

(1)

Developer

Zyra

Zyra

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Get every review for a company on Trustpilot — rating, title, text, dates, reviewer, company replies — plus the company's own profile and its star breakdown, as clean structured JSON.

One company per run. Filter by star rating, date, language, keyword or topic before anything is collected, so you pay for the reviews you actually want.

What you get

One dataset item per review, with the company it belongs to attached to each one. That means a CSV export is a spreadsheet of reviews, one per row, with no unpacking to do.

{
"id": "6a9fd4ce9b47cd282c8b408c",
"url": "https://www.trustpilot.com/reviews/6a9fd4ce...",
"title": "Geweldige acteurs/zangers",
"content": "Geweldige acteurs/zangers. Een prachtig verhaal...",
"rating": 5,
"verified": false,
"dates": {
"written": "2026-09-08T11:26:38.000Z",
"experience": "2026-09-07T00:00:00.000Z",
"posted_raw": null
},
"engagement": { "useful_count": 0, "reply_count": 0 },
"replies": [ { "content": "We're sorry to hear this...",
"date": "2026-09-09T10:00:00.000Z", "author": null } ],
"reviewer": { "name": "M. K.", "country": "NL", "reviews_posted_overall": 2 },
"company": {
"id": "59935d1d0000ff0005a8efd0",
"name": "Headout",
"url": "https://www.trustpilot.com/review/headout.com",
"website": "https://www.headout.com",
"logo": "https://...",
"about": "Headout is home to the world's best real-life experiences...",
"verified": false,
"contact": { "email": "support@headout.com", "phone": "+1 347 897 0100" },
"location": { "address": "...", "country": "US" },
"categories": { "primary": "travel_agency", "other": [],
"activity": [...], "breadcrumbs": [...] },
"rating": {
"score": 4.4,
"label": "Excellent",
"total_reviews": 62859,
"distribution": [ { "star": 5, "count": 46343, "percentage": 74.0 }, ... ]
}
}
}

Field reference

Review — the item itself

FieldTypeNotes
id · urlstringurl links straight to the review on Trustpilot
ratinginteger1–5
title · contentstringcontent may be null — a rating with no text
verifiedbooleanVerified purchase/experience
dates.writtenISO 8601When the review was posted. Use this one
dates.experienceISO 8601When the reviewer used the service
dates.posted_rawstringTrustpilot's own wording, often a bucket like Last 6 months. null whenever Trustpilot showed an exact date
engagement.useful_countinteger"Useful" votes from other readers
engagement.reply_countintegerHow many company replies
replies[]object[]content, date, author
reviewer.namestringDisplay name
reviewer.countrystringISO 3166-1 alpha-2
reviewer.reviews_posted_overallintegerTheir lifetime Trustpilot review count

Company — under company, identical on every row of a run

FieldTypeNotes
company.id · name · urlstringurl is the Trustpilot page, with your filters on it
company.websitestringThe company's own site
company.logo · aboutstringMay be null; about may contain HTML
company.verifiedbooleanWhether Trustpilot has verified the business
company.contact.email · phonestringMay be null
company.location.address · countrystringCountry is ISO 3166-1 alpha-2
company.categories.primarystringMain Trustpilot category
company.categories.other · activity · breadcrumbsstring[]
company.rating.scorenumberTrustScore, 1–5
company.rating.labelstringExcellent, Great, Average
company.rating.total_reviewsintegerEvery review the company has, not just those collected
company.rating.distribution[]object[]star, count, percentage, always ordered 5 → 1

Timestamps are ISO 8601 UTC with milliseconds (2026-09-08T11:26:38.000Z). Any field can be null when Trustpilot does not show it.

Input

The only required field is the company.

{
"companyDomain": "headout.com",
"date": "last3months",
"stars": ["1", "2"],
"limit": 100
}
FieldTypeDefaultWhat it does
companyDomainstringRequired. headout.com, or a Trustpilot URL like https://www.trustpilot.com/review/headout.com (any regional domain works)
limitinteger100How many reviews to keep
dateselectall timelast30days · last3months · last6months · last12months
starsmulti-selectallAny of 15, combined as OR
languagesstringallall, or an ISO 639-1 code such as en
searchstringOnly reviews containing this text
topicsstring[]Trustpilot topic slugs; the list differs per company
verifiedany/yes/noanyVerified reviews only, or unverified only
repliesany/yes/noanyOnly reviews the company has replied to, or only those without a reply
sortselectrelevancerelevance or recency
datePostedselectA second date filter — see the note below
pageinteger1Start from a later page of the review list

Pricing

Pay per review actually delivered — you are never charged for a run that returns nothing. The current rates are on this actor's Pricing section above; there are two, and a paid Apify plan pays the lower one.

A free Apify plan gets 5 runs of this actor in total, and each of them keeps at most 10 reviews. Upgrading your Apify plan lifts both limits and moves you to the lower rate.

A run refused for being past the free limit finishes with an empty dataset and a status message saying so. It is not charged, and it does not count as a failure.

Billing is issued in increments of 100 reviews, so the charge always matches what was delivered.

Things worth knowing

limit caps what you keep, filters cap what gets collected. Both reduce cost, but the filters are the ones that make a run finish sooner. Leaving every filter empty on a company with 60,000 reviews means collecting all of them.

limit is a ceiling, not a promise. A narrow filter — or Trustpilot simply having fewer matching reviews — returns less. Asking for 250 might return 206, and you are billed for the 206.

verified and replies have three states, not two. any applies no filter at all. yes and no are two different filters — no gives you unverified reviews only, which is not the same as "don't filter".

date and datePosted are separate filters. date is Trustpilot's own and the one to use. Setting both applies both, and you get only the reviews matching each — usually fewer than you expected.

One row per review, and the company repeats on every row. That is what makes a CSV export usable directly. The dataset's Company view shows the profile on its own if that is what you came for.

A company with no matching reviews is a success, not an error. You get an empty dataset and a run that says so. A domain that has no Trustpilot page at all fails the run and tells you so — the two are never confused.

Examples

Recent complaints, for support triage

{ "companyDomain": "headout.com", "stars": ["1", "2"],
"date": "last30days", "sort": "recency", "limit": 200 }

English reviews mentioning refunds

{ "companyDomain": "headout.com", "search": "refund",
"languages": "en", "limit": 100 }

Reviews the company has already answered

{ "companyDomain": "headout.com", "replies": "yes", "limit": 50 }

Support

Runs are asynchronous and typically finish in under a minute; a large unfiltered collection takes longer. Every run writes an OUTPUT record to the key-value store with what was requested, what arrived, and what was charged.

If a run fails, its status message says why in plain language — a malformed company domain, a company with no Trustpilot page, or a temporary problem worth retrying.