Trustpilot Reviews Scraper | Includes Company Replies avatar

Trustpilot Reviews Scraper | Includes Company Replies

Pricing

from $0.45 / 1,000 reviews

Go to Apify Store
Trustpilot Reviews Scraper | Includes Company Replies

Trustpilot Reviews Scraper | Includes Company Replies

Scrape Trustpilot business reviews by domain: reviewer, star rating, title, text, date, company reply, trust score & total count. No login, beats the AWS WAF via residential proxies. Works in Claude, ChatGPT & any MCP agent.

Pricing

from $0.45 / 1,000 reviews

Rating

0.0

(0)

Developer

The Mine Works

The Mine Works

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

a day ago

Last modified

Share

⭐ Trustpilot Reviews Scraper: Ratings & Replies

Part of the Company Diligence MCP. This actor's data is also available to AI agents through our Company Diligence MCP server — ten official-registry tools behind one endpoint. No result, no charge.

⚡ 16 of 17 runs succeeded in the last 30 days · no login, no API key — residential proxy included to clear Trustpilot's AWS WAF.

💸 You're only charged for delivered results. Empty searches, failed pages and duplicate listings are never billed.

Overview

Trustpilot Reviews Scraper pulls the full public review history for any business on Trustpilot. Give it a domain like amazon.com, booking.com, or nike.com and get back every review as structured JSON: reviewer name, star rating, title, body text, publish date, company reply, plus the business's overall TrustScore and total review count. Optionally filter to just 1-star and 2-star reviews to focus on complaints.

It beats Trustpilot's AWS WAF (which blocks almost every data-centre IP) using a residential proxy pool, so runs return actual data instead of a challenge page. No login, no API key, priced pay per review. Blocked pages, missing domains, and failed runs are never charged. You only pay for a review that was actually delivered.

✅ No login required | ✅ Residential proxy included | ✅ Pay per review returned | ✅ MCP-ready for AI agents

Features

Full review scrape. Every public review on the business page paginated to the end. Star filter. Return only 1-star and 2-star reviews for churn or complaint analysis. Company replies. Reply text and reply date included on every review that has one. Business summary. Overall TrustScore and total review count included per business. Ban-resistant. Residential proxy pool clears the AWS WAF that stops data-centre scrapers.

How it works

The actor takes a business domain (amazon.com), normalises it to the Trustpilot slug (https://www.trustpilot.com/review/amazon.com), and requests the review pages through Apify's residential proxy pool. Trustpilot fronts every page with an AWS WAF challenge that blocks almost every data-centre IP: residential IPs clear the challenge and get the real page.

Each page is parsed for reviews (reviewer, rating, title, text, date, reply) and paginated until the maxResults budget is hit or the business runs out of reviews. Star-rating filters are applied client-side, so you can pull only the 1-star and 2-star reviews for churn work without paying for the rest.

🧾 Input configuration

Pass a list of companies in one run. That is materially cheaper per review than one run each, and it is the same number of reviews (see Batching below).

{
"companyDomains": ["amazon.com", "booking.com", "etsy.com"],
"maxResults": 200,
"starsFilter": ["1", "2"],
"includeReviewInsights": true,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "US"
}
}

💡 Batching: why one run with many companies is cheaper

Trustpilot fronts every page with an AWS WAF bot check. Clearing it requires one real browser page load, which is by far the most expensive thing this actor does. The clearance token it produces is scoped to trustpilot.com, not to the one company page it was minted on, so a single solve covers every company in the same run and all their pagination.

Verified live: a token minted on amazon.com then fetched booking.com, etsy.com and ryanair.com over plain HTTP, plus cross-company page 2, all returning full data. The same requests without the token are rejected.

Companies in one runApprox. cost per 1,000 reviews
1$0.16
20$0.07
50$0.07

So twenty companies in one run costs roughly a third per review of twenty separate runs. Each run's summary reports browser_pages — it should stay at about 1 however many companies you pass. If it climbs, the WAF is rejecting our token and the actor says so rather than quietly costing more.

maxResults applies per company, and with includeReviewInsights on you get one insights row per company. Multi-company runs also emit a _type: "run_summary" row with the totals and the realised cost per 1,000.

📤 Output format

Each run pushes two kinds of records: one business summary record (once per run) and one record per review. Here is a real review record captured from a live run against amazon.com:

{
"business_domain": "amazon.com",
"reviewer_name": "John",
"rating": 1,
"title": "Amazon lost my package and then updated…",
"text": "Amazon lost my package and then updated the package as undeliverable, then Amazon tried to blame Intelcom for losing the package, but Intelcom didn't even have the package ever in their possession. Amazon lied to me about who's fault it was. Then Amazon says I have to wait a week or more before they can return my money, because they say that's the waiting period to see if the package gets delivered, but the package tracking on the Amazon site clearly says the package is undeliverable. Amazon makes you wait for your refund when it's clearly their lies and fault the package was lost.",
"review_date": "2026-07-15T00:30:31.000Z",
"review_url": "https://www.trustpilot.com/reviews/6a56b8878caf7c42b6979634",
"review_id": "6a56b8878caf7c42b6979634",
"scraped_at": "2026-07-15T04:17:40.059Z"
}

And the business summary record from the same run:

{
"_type": "business",
"business_domain": "amazon.com",
"business_name": "Amazon",
"overall_rating": 1.6,
"total_reviews": 47501,
"trustpilot_url": "https://www.trustpilot.com/review/amazon.com",
"scraped_at": "2026-07-15T04:17:39.772Z"
}

Fields on the business summary record:

FieldDescription
🌐 business_domainCompany domain scraped (e.g. amazon.com)
🏢 business_nameBusiness name as displayed on Trustpilot
overall_ratingOverall TrustScore for the business
🔢 total_reviewsTotal number of reviews on the business page
🔗 trustpilot_urlThe Trustpilot review page scraped
🕒 scraped_atISO timestamp of the scrape

Fields on each review record:

FieldDescription
🌐 business_domainCompany domain scraped (e.g. amazon.com)
🙋 reviewer_nameDisplay name of the reviewer
ratingStar rating (1 to 5)
✍️ titleReview headline
📝 textFull review body text
📅 review_dateISO date the review was published
🔗 review_urlDirect link to the review on Trustpilot
🆔 review_idTrustpilot's internal review ID
💬 reply_textCompany reply text, present only when the business replied
🕒 scraped_atISO timestamp of the scrape

Review insights (optional, includeReviewInsights: true)

One extra record per run, computed entirely from the reviews already collected in that same run — no extra fetch, no AI, nothing non-deterministic. Real output from a live run against amazon.com:

{
"_type": "review_insights",
"business_domain": "amazon.com",
"rating_distribution": {
"1_star": { "count": 44, "pct": 73.3 },
"2_star": { "count": 8, "pct": 13.3 },
"3_star": { "count": 4, "pct": 6.7 },
"4_star": { "count": 1, "pct": 1.7 },
"5_star": { "count": 3, "pct": 5.0 }
},
"reply_rate_negative_pct": 0,
"top_complaint_terms": [
{ "term": "delivery", "count": 29 },
{ "term": "customer service", "count": 22 },
{ "term": "prime", "count": 15 },
{ "term": "order", "count": 15 }
],
"rating_trend": [
{ "month": "2026-06", "review_count": 18, "avg_rating": 1.4 },
{ "month": "2026-07", "review_count": 42, "avg_rating": 1.6 }
],
"based_on_reviews": 60,
"based_on_negative_reviews": 52,
"computed_at": "2026-08-14T10:06:24.325Z"
}
FieldDescription
rating_distributionCount and percentage of reviews at each star level
💬 reply_rate_negative_pctShare of 1 and 2 star reviews that got a business reply
🔎 top_complaint_termsThe most frequent words and two-word phrases in negative review text, ranked by count. This is word and phrase frequency, not an AI reading the reviews for you — a real signal, computed instantly, at no AI cost
📈 rating_trendAverage rating by month, only included when reviews span 2 or more months (a single month is a snapshot, not a trend, so it is left out rather than shown as fake)
🔢 based_on_reviews / based_on_negative_reviewsHow many reviews the insights were computed from

Only computed and charged when at least one review was delivered — an empty or blocked run never produces or charges for this record.

💼 Common use cases

Customer & churn insight Pull every 1-star and 2-star review for your product or a competitor and cluster the complaints. Feed reviews into an LLM to surface recurring themes and priority fixes.

Competitor teardown Compare TrustScores and review volume across a competitor set. Read the top complaints and top praise for a competitor to sharpen positioning.

Reputation monitoring Watch your own business page for new negative reviews on a daily cadence. Track how quickly and consistently the company responds to reviews.

Due diligence & investing Pull every review for a target acquisition to gauge product and support quality. Spot patterns of fraud, delivery issues, or refund refusals before buying in.

🚀 Getting started

  1. Open the actor and enter one or more domains in companyDomains (e.g. ["booking.com", "etsy.com"]). Batching is cheaper per review than separate runs. The older single companyDomain field still works if you are already using it.
  2. Set maxResults — this is the cap per company.
  3. Optionally set starsFilter (e.g. ["1", "2"]) to focus on negative reviews.
  4. Leave the residential proxy on (required to clear the AWS WAF).
  5. Click Start. Download as JSON, CSV, or Excel, or pull the dataset via API or MCP.

💵 Pricing

Reviews now cost from $0.45 per 1,000 — an 80%+ cut, passed straight through from a rebuilt fetch path (see How it works) that made runs about 8x cheaper to operate.

How many reviews you can actually get: Trustpilot's public site stops serving after 10 pages — about 200 reviews per business — and asks for a login beyond that. Measured live 2026-08-14: a run asking for 400 returned exactly 200 and stopped cleanly. maxResults above ~200 will simply return everything available and finish; you are never charged for reviews that do not exist. To go deeper, run again with a different starsFilter — each filtered view opens its own 10-page window.

Three pay-per-event charges:

  • apify-actor-start — charged once when a run starts. This covers the single real-browser page load that clears Trustpilot's bot check for the entire run. Charging it separately is exactly what lets the per-review price be this low, instead of burying that fixed cost in every review.
  • review-scraped — charged when a review record lands in your dataset.
  • review-insights-computed — charged once per business analyzed, only when includeReviewInsights is true and at least one review was delivered.

Apify applies a discount tier to your account. Price at each tier:

Apify tierPer 1,000 reviewsActor startreview-insights-computed
FREE$0.65$0.05$0.02
BRONZE$0.58$0.04$0.02
SILVER$0.52$0.03$0.02
GOLD$0.45$0.025$0.02
PLATINUM$0.45$0.025$0.02
DIAMOND$0.45$0.025$0.02

Worked example, FREE tier: 200 reviews from one business, with insights, is $0.05 start + 200 × $0.00065 + $0.02 = $0.20. Your tier is shown on your Apify billing page.

review-insights-computed is flat across every tier — it is a per-run analysis charge, not a per-record discount.

Pay-per-event, no subscription and no monthly minimum. WAF-blocked pages, unknown domains, and failed or empty runs are never billed — the charge fires only when a review is actually delivered to your dataset.

⏰ Run it on a schedule

Monitoring your own Trustpilot profile — or a competitor's — for new reviews is the natural recurring use. Every run also re-emits the business summary record, so the dataset builds into a time series of TrustScore and review count.

  1. On this actor's page, click ⋯ → Schedule actor (or Console → Schedules → Create new).
  2. Pick a frequency — @daily catches new reviews within a day; @weekly is plenty for lower-volume profiles.
  3. Your saved input is reused on every run; each run appends to a named dataset.
  4. Wire the dataset to Google Sheets, Slack, or a webhook via the actor's Integrations tab so new records reach you automatically.

FAQ

Why do I need a residential proxy? Trustpilot fronts every page with an AWS WAF challenge that blocks almost every data-centre IP. Residential IPs from real consumer ISPs clear the challenge and return the real page. Data-centre proxies will just return a challenge page.

How many reviews can I pull for one business? As many as the business has publicly, up to Trustpilot's ~200-per-company public ceiling. The actor paginates to the end within your maxResults budget, which applies per company.

How much does it cost? Pay per review returned, pay as you go. No subscription, no monthly minimum.

Can I use it in an AI agent? Yes. It's exposed as an MCP tool. See below.

Does Trustpilot have a public API? Trustpilot does publish APIs, but they require a Trustpilot for Business account and an API key (Client ID) — that applies even to the public Business Units endpoints. There is no open, keyless endpoint for pulling any company's reviews. This actor reads the public review pages a logged-out visitor already sees, so it needs no Trustpilot account, key, or OAuth flow.

Can I pull only the negative reviews? Yes. Set starsFilter to ["1", "2"] and only those ratings are kept, so you can build a complaint corpus without paying for the 4- and 5-star reviews you don't need.

What can I legitimately use scraped Trustpilot reviews for? Reputation monitoring, competitor and market research, customer-complaint analysis, and pre-acquisition due diligence on reviews that are already public. This actor is read-only — it cannot post, edit, flag, or remove reviews, and it is not a tool for influencing ratings. Treat reviewer names as personal data: analyse reviews in aggregate rather than using them to identify or target individual reviewers.

Use in Claude, ChatGPT & any MCP agent

https://mcp.apify.com/?tools=themineworks/trustpilot-reviews

Or call it programmatically with the Apify client:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('themineworks/trustpilot-reviews').call({
companyDomains: ['amazon.com', 'booking.com'],
maxResults: 100, // per company
starsFilter: ['1', '2'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

🛠️ Complete your competitor & reputation pipeline

Got the reviews. Now build the wider picture:

Typical flow: trustpilot-reviews reveals what customers actually think, google-trends shows demand, meta-ad-library shows the creative response.

Questions or need a custom field set? Reach out through the Apify profile.