Trustpilot Review Analyzer
Scrape Trustpilot reviews with sentiment analysis. Returns TrustScore, ratings, response rates, and keyword trends for any business. Ideal for competitor research and brand monitoring.
Maintenance Pulse
96/100Cost Estimate
How many results do you need?
Pricing
Pay Per Event model. You only pay for what you use.
| Event | Description | Price |
|---|---|---|
| business-analyzed | Charged per business analyzed. Includes multi-page Trustpilot crawling, review extraction, sentiment analysis, and rating distribution. | $0.15 |
Example: 100 events = $15.00 · 1,000 events = $150.00
Documentation
Scrape and analyze Trustpilot reviews for any business — no API key needed. Get TrustScores, star ratings, sentiment analysis, response rates, keyword trends, and full review text. Trustpilot has no public API for review data, making this the easiest way to extract review intelligence at scale.
Why use Trustpilot Review Analyzer?
Trustpilot hosts over 200 million reviews for 900,000+ businesses, but offers no public API for accessing this data. Manually reading through reviews is impractical. This actor scrapes publicly visible review pages, extracts structured data from Trustpilot's embedded JSON, and runs keyword-based sentiment analysis — all in one automated pipeline. Feed in domain names and get back a complete analysis with individual review records, aggregate statistics, and actionable sentiment breakdowns.
Features
- Scrape reviews from any business listed on Trustpilot by domain name or Trustpilot URL
- Extract TrustScore, star ratings, total review count, and business categories
- Full review details: rating, title, text, author, date, country, verification status
- Built-in sentiment analysis with positive/negative keyword extraction
- Calculate response rates (how often the company replies to reviews)
- Rating distribution breakdown (percentage of 1-5 star reviews)
- Analyze multiple businesses in a single run with domain deduplication
- Export to JSON, CSV, Excel, or HTML
Use Cases
Competitor benchmarking
Compare TrustScores, response rates, and sentiment across 5-10 competitors in one run. Export to a spreadsheet and chart rating distributions side-by-side.
Brand monitoring
Schedule weekly runs to track how your company's reviews and ratings change over time. Pipe results to Google Sheets via the Apify integration for a live dashboard.
Market research
Analyze customer pain points and satisfaction drivers across an entire industry vertical. Use the top negative keywords to identify unmet needs.
Due diligence
Assess a company's reputation before partnerships, investments, or acquisitions. Look at verified review rate, response rate, and sentiment trends.
Lead generation
Identify businesses with poor TrustScores (under 3.0) as prospects for your reputation management, customer service, or review platform product.
Content strategy
Mine the top positive and negative keywords from reviews to inform SEO content, FAQ pages, and marketing copy that mirrors real customer language.
How to Use
- Click Try for free on this actor's page
- Enter one or more business domains (e.g.,
amazon.com,shopify.com) or Trustpilot URLs - Set the maximum number of reviews to scrape per business (default: 100)
- Click Start and wait for the run to complete
- Download your results from the Dataset tab in JSON, CSV, or Excel format
You can enter domains in any format — the actor automatically normalizes them:
amazon.comwww.amazon.comhttps://www.trustpilot.com/review/amazon.com
Input Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
businesses | string[] | Yes | — | Business domains or Trustpilot URLs to analyze (e.g., apify.com, zapier.com) |
maxReviewsPerBusiness | integer | No | 100 | Maximum reviews to scrape per business (1–5,000). Each page has ~20 reviews |
includeReviewText | boolean | No | true | Include full review text in output. Disable to reduce dataset size |
proxyConfiguration | object | No | — | Proxy settings for requests. Recommended for large scrapes to avoid rate limiting |
Input Examples
Compare two SaaS competitors:
{
"businesses": ["hubspot.com", "salesforce.com"],
"maxReviewsPerBusiness": 200,
"includeReviewText": true
}
Quick score check for many businesses (minimal data):
{
"businesses": ["amazon.com", "ebay.com", "etsy.com", "walmart.com", "target.com"],
"maxReviewsPerBusiness": 20,
"includeReviewText": false
}
Deep analysis with proxy:
{
"businesses": ["apify.com"],
"maxReviewsPerBusiness": 2000,
"includeReviewText": true,
"proxyConfiguration": { "useApifyProxy": true }
}
Input Tips
- Start with 20-50 reviews to validate the output format works for your pipeline before scaling up.
- Disable review text if you only need aggregate scores and sentiment — cuts dataset size by ~80%.
- Enable proxy for runs over 500 reviews to avoid Trustpilot rate limiting.
- Batch competitors together — domain deduplication ensures each domain is crawled only once even if entered multiple times.
Output Example
Each business produces one result object containing the business summary, aggregate statistics, sentiment analysis, and all scraped reviews:
{
"domain": "apify.com",
"url": "https://www.trustpilot.com/review/apify.com",
"found": true,
"businessName": "Apify",
"trustScore": 4.7,
"stars": 5,
"totalReviews": 184,
"categories": ["Software Company"],
"websiteUrl": "https://apify.com",
"ratingDistribution": { "star5": 78, "star4": 12, "star3": 4, "star2": 2, "star1": 4 },
"ratingDistributionPercent": { "star5": 78.0, "star4": 12.0, "star3": 4.0, "star2": 2.0, "star1": 4.0 },
"averageRating": 4.58,
"responseRate": 65.0,
"verifiedRate": 42.0,
"sentiment": {
"positive": 85,
"negative": 10,
"neutral": 5,
"positivePercent": 85.0,
"negativePercent": 10.0,
"neutralPercent": 5.0,
"topPositiveKeywords": [{"keyword": "easy", "count": 12}, {"keyword": "support", "count": 8}],
"topNegativeKeywords": [{"keyword": "expensive", "count": 3}]
},
"reviewsScraped": 100,
"reviews": [
{
"id": "abc123",
"rating": 5,
"title": "Great scraping platform",
"text": "Easy to use and well documented...",
"publishedDate": "2024-11-15T10:30:00Z",
"experiencedDate": "2024-11-10T00:00:00Z",
"author": "John D.",
"authorCountry": "US",
"authorReviewCount": 3,
"isVerified": true,
"hasCompanyReply": true,
"companyReplyText": "Thanks for the review!",
"language": "en"
}
],
"analyzedAt": "2024-12-01T14:00:00Z"
}
Output Fields
Business-Level Fields
| Field | Type | Description |
|---|---|---|
domain | string | Normalized business domain |
url | string | Full Trustpilot profile URL |
found | boolean | Whether the business exists on Trustpilot |
businessName | string | Display name from Trustpilot |
trustScore | number | Trustpilot's official TrustScore (0–5) |
stars | number | Star rating (1–5) |
totalReviews | number | Total review count on Trustpilot |
categories | string[] | Business categories assigned by Trustpilot |
websiteUrl | string | Business website URL from their Trustpilot profile |
ratingDistribution | object | Count of 1–5 star reviews in scraped sample |
ratingDistributionPercent | object | Percentage breakdown of star ratings |
averageRating | number | Mean rating calculated from scraped reviews |
responseRate | number | Percentage of reviews with company replies |
verifiedRate | number | Percentage of verified reviews |
reviewsScraped | number | Number of reviews actually collected |
analyzedAt | string | ISO 8601 timestamp of analysis |
Sentiment Fields
| Field | Type | Description |
|---|---|---|
sentiment.positive | number | Count of positive reviews |
sentiment.negative | number | Count of negative reviews |
sentiment.neutral | number | Count of neutral reviews |
sentiment.positivePercent | number | Positive review percentage |
sentiment.negativePercent | number | Negative review percentage |
sentiment.neutralPercent | number | Neutral review percentage |
sentiment.topPositiveKeywords | array | Top 10 positive keywords with frequency counts |
sentiment.topNegativeKeywords | array | Top 10 negative keywords with frequency counts |
Review-Level Fields
| Field | Type | Description |
|---|---|---|
id | string | Trustpilot review ID |
rating | number | Star rating (1–5) |
title | string | Review headline |
text | string/null | Full review body (null if includeReviewText is false) |
publishedDate | string | When the review was posted (ISO 8601) |
experiencedDate | string/null | When the customer's experience occurred |
author | string | Reviewer's display name |
authorCountry | string/null | Reviewer's country code (e.g., "US", "GB") |
authorReviewCount | number/null | Total reviews written by this author |
isVerified | boolean | Whether the review is verified by Trustpilot |
hasCompanyReply | boolean | Whether the company replied to this review |
companyReplyText | string/null | The company's reply text |
language | string/null | Review language code |
Programmatic Access (API)
Python
from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("ryanclinton/trustpilot-review-analyzer").call(run_input={
"businesses": ["hubspot.com", "salesforce.com"],
"maxReviewsPerBusiness": 200,
"includeReviewText": True,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(f"{item['businessName']}: TrustScore {item['trustScore']}, "
f"{item['sentiment']['positivePercent']}% positive, "
f"response rate {item['responseRate']}%")
JavaScript
import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: "YOUR_API_TOKEN" });
const run = await client.actor("ryanclinton/trustpilot-review-analyzer").call({
businesses: ["hubspot.com", "salesforce.com"],
maxReviewsPerBusiness: 200,
includeReviewText: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
console.log(`${item.businessName}: TrustScore ${item.trustScore}`);
console.log(` Sentiment: ${item.sentiment?.positivePercent}% positive`);
console.log(` Response rate: ${item.responseRate}%`);
});
cURL
# Start the actor run
curl -X POST "https://api.apify.com/v2/acts/ryanclinton~trustpilot-review-analyzer/runs?token=YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"businesses": ["hubspot.com", "salesforce.com"],
"maxReviewsPerBusiness": 200,
"includeReviewText": true
}'
# Fetch results (replace DATASET_ID from the run response)
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?token=YOUR_API_TOKEN&format=json"
How It Works
The actor uses a three-phase approach:
Phase 1: Page Crawling
A CheerioCrawler fetches Trustpilot review pages. For each business, the actor:
- Normalizes the input (strips
www., protocol, or extracts domain from a Trustpilot URL) - Constructs the Trustpilot URL:
https://www.trustpilot.com/review/{domain} - Crawls page 1, then enqueues additional pages based on
maxReviewsPerBusiness(20 reviews per page)
Phase 2: Data Extraction
Each page's HTML contains a <script id="__NEXT_DATA__"> tag with Trustpilot's server-side rendered JSON. The actor parses this to extract:
- Business metadata: display name, TrustScore, stars, total reviews, categories, website URL
- Pagination info: total pages available from
filters.pagination.totalPages - Review records: rating, title, text, dates, consumer info, verification status, company reply
This approach is more reliable than DOM scraping because the __NEXT_DATA__ JSON contains the complete structured data that Trustpilot's React frontend uses to render the page.
Phase 3: Analysis
After all pages are crawled, the actor computes aggregate statistics for each business:
- Rating distribution: counts and percentages of 1–5 star reviews from the scraped sample
- Average rating: mean rating from scraped reviews (may differ from TrustScore for small samples)
- Response rate: percentage of reviews that received a company reply
- Verified rate: percentage of reviews with Trustpilot verification
- Sentiment analysis: reviews are classified as positive (4–5 stars), negative (1–2 stars), or neutral (3 stars with keyword tiebreaker). The top 10 positive and negative keywords are extracted by frequency.
Sentiment Classification
| Rating | Classification | Method |
|---|---|---|
| 4–5 stars | Positive | Rating-based (automatic) |
| 1–2 stars | Negative | Rating-based (automatic) |
| 3 stars | Depends | Keyword analysis of review text — counts positive vs. negative keyword matches, falls back to neutral on tie |
The actor uses ~40 positive keywords (excellent, amazing, easy, recommend, etc.) and ~40 negative keywords (terrible, scam, slow, expensive, etc.) for the keyword-based analysis.
How Much Does It Cost?
The Apify Free plan gives you $5 in monthly credits. This actor uses approximately:
| Scenario | Reviews | Estimated Cost |
|---|---|---|
| 1 business, 100 reviews | 100 | ~$0.05 |
| 1 business, 500 reviews | 500 | ~$0.10 |
| 10 businesses, 100 reviews each | 1,000 | ~$0.50 |
| 50 businesses, 200 reviews each | 10,000 | ~$3.00 |
| Plan | Monthly Credits | Approximate Businesses (at 100 reviews) |
|---|---|---|
| Free | $5 | ~100 businesses |
| Starter ($49/mo) | $49 | ~1,000 businesses |
Cost depends on the number of review pages crawled and proxy usage. Disabling review text has no impact on cost (it only reduces dataset storage).
Tips
- Start small: Test with 1-2 businesses and 20-50 reviews to verify the output format works for your workflow.
- Use proxies for large scrapes: Trustpilot may rate-limit requests. Enable proxy configuration for runs over 500 reviews.
- Domain format is flexible: Enter
amazon.com,www.amazon.com, or the full Trustpilot URL — all work. - Reduce dataset size: Disable "Include Full Review Text" if you only need ratings and metadata.
- Batch multiple businesses: Analyze competitors side-by-side by entering multiple domains in a single run. Duplicate domains are automatically deduplicated.
- Schedule regular runs: Use Apify Schedules to track reputation changes over time. Compare TrustScores week-over-week.
- Filter by country: The
authorCountryfield lets you segment reviews by geography for market-specific insights.
Combine with Other Actors
| Actor | How to combine |
|---|---|
| Multi-Platform Review Analyzer | Aggregate reviews from Trustpilot alongside G2, Capterra, and other platforms for a complete reputation picture |
| Brand Protection Monitor | Monitor brand mentions across the web alongside Trustpilot review sentiment |
| SaaS Competitive Intelligence | Combine review data with pricing, tech stack, and traffic data for full competitive analysis |
| Website Contact Scraper | Find contact information for businesses with poor reviews — potential leads for your service |
| Company Deep Research | Deep-dive into a company's full online presence including but beyond reviews |
| HubSpot Lead Pusher | Push businesses with low TrustScores to HubSpot as leads for outreach |
Limitations
- No API key needed — but Trustpilot may change their page structure at any time, which could temporarily break extraction until the actor is updated.
- 20 reviews per page — Trustpilot paginates at 20 reviews. Scraping 5,000 reviews requires 250 page loads.
- Sentiment is keyword-based — not AI/NLP-powered. It's fast and reliable for aggregate trends but won't catch sarcasm, nuance, or non-English sentiment.
- No historical data — only reviews currently visible on Trustpilot. Deleted or hidden reviews are not accessible.
- Rate limiting — large scrapes (1,000+ pages) may be throttled by Trustpilot. Use proxy configuration to mitigate.
- English-optimized sentiment — the keyword lists are English. Reviews in other languages are classified by rating only.
Responsible Use
- This actor only accesses publicly visible review data on Trustpilot.
- Reviewer names and countries are public on Trustpilot but may be considered personal data under GDPR and similar regulations.
- Do not use scraped reviews for purposes that violate Trustpilot's Terms of Service.
- For guidance on data protection compliance, consult legal counsel regarding your jurisdiction and use case.
- See Apify's guide on web scraping legality for general information.
FAQ
Q: Does this actor need a Trustpilot API key? A: No. Trustpilot does not offer a public API for review data. This actor scrapes the publicly visible review pages and extracts structured data from embedded JSON.
Q: How many reviews can I scrape per business? A: Up to 5,000 per business. The default is 100. Trustpilot shows 20 reviews per page, so 5,000 reviews requires 250 page loads.
Q: Can I analyze businesses not on Trustpilot?
A: If a business has no Trustpilot page, the result will show "found": false with null values for all business fields.
Q: What sentiment analysis method is used? A: The actor uses a dual approach. Reviews rated 4-5 stars are automatically classified as positive; 1-2 stars as negative. For 3-star reviews, keyword frequency analysis determines the classification using ~80 sentiment keywords.
Q: How is TrustScore different from average rating?
A: TrustScore is Trustpilot's proprietary score (displayed on their site). The averageRating is the arithmetic mean of the reviews you actually scraped — they may differ since TrustScore uses Trustpilot's own weighting algorithm across all reviews.
Q: Is it legal to scrape Trustpilot reviews? A: This actor only accesses publicly visible review data. For personal data considerations, consult legal counsel regarding GDPR and local regulations. See Apify's guide on web scraping legality.
Integrations
Connect this actor to your workflow:
- Zapier — trigger automated actions when reviews change
- Make — build multi-step pipelines with review data
- Google Sheets — export directly for team analysis
- Slack — get notified when competitor scores change
- Apify API — programmatic access for custom integrations
- Webhooks — POST results to your endpoint on completion
How it works
Configure
Set your parameters in the Apify Console or pass them via API.
Run
Click Start, trigger via API, webhook, or set up a schedule.
Get results
Download as JSON, CSV, or Excel. Integrate with 1,000+ apps.
Use cases
Sales Teams
Build targeted lead lists with verified contact data.
Marketing
Research competitors and identify outreach opportunities.
Data Teams
Automate data collection pipelines with scheduled runs.
Developers
Integrate via REST API or use as an MCP tool in AI workflows.
Related actors
Website Contact Scraper
Extract emails, phone numbers, team members, and social media links from any business website. Feed it URLs from Google Maps or your CRM and get structured contact data back. Fast HTTP requests, no browser — scrapes 1,000 sites for ~$0.50.
Email Pattern Finder
Discover the email format used by any company. Enter a domain like stripe.com and detect patterns like [email protected]. Then generate email addresses for any name. Combine with Website Contact Scraper to turn company websites into complete email lists.
Waterfall Contact Enrichment
Find business emails, phones, and social profiles from a name + company domain. Cascades through MX validation, website scraping, pattern detection, and SMTP verification. Free Clay alternative.
B2B Lead Qualifier - Score & Rank Company Leads
Score and rank B2B leads 0-100 by crawling company websites. Analyzes 30+ signals across contact reachability, business legitimacy, online presence, website quality, and team transparency. No AI keys needed.
Ready to try Trustpilot Review Analyzer?
Start for free on Apify. No credit card required.
Open on Apify Store