Trustpilot Reviews Scraper
Pricing
from $0.45 / 1,000 results
Trustpilot Reviews Scraper
Scrape Trustpilot company profiles, customer reviews, keyword search results, and category listings. Filter by stars, date, language, topics, verified reviews, and replies. Bulk domains and queries. Structured JSON for reputation monitoring, VoC, lead generation, and AI agents.
Pricing
from $0.45 / 1,000 results
Rating
0.0
(0)
Developer
DataFusionX
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
19 hours ago
Last modified
Categories
Share
Trustpilot Reviews Scraper & Sentiment Analytics – Reviews, TrustScore, Company Data
Trustpilot Reviews Scraper & Sentiment Analytics extracts public Trustpilot data without a Trustpilot account or API key: customer reviews, company profiles (TrustScore, contacts, categories), keyword search results, and category listings as clean JSON, CSV, or Excel. Turn on review sentiment analysis to get an investor-grade insight report per company: rating confidence interval, 90-day trend, complaint and praise themes with evidence quotes, reply behaviour, and review-integrity flags. No LLM and no extra API keys.
In one sentence: give it a company domain (
apify.com), a keyword (insurance agency in United States), or a category (car_dealer) and get structured rows taggedbusiness,review,search_result,insight, orbenchmark.
Quick start (60 seconds)
- Open the Actor and choose a Mode.
- Add
companyUrls,searchQueries, orcategories. - (Optional) Tick Analyze reviews for sentiment and insight rows.
- Click Start and download the dataset as JSON, CSV, Excel, or XML, or read it through the API.
{"mode": "companyReviews","companyUrls": ["apify.com"],"maxReviews": 100,"languages": "en","sort": "recency"}
Add sentiment and insight analysis:
{"mode": "companyReviews","companyUrls": ["apify.com"],"maxReviews": 0,"sort": "recency","analyzeReviews": true}
What can I scrape from Trustpilot?
| Mode | Best for | Input | Output row types |
|---|---|---|---|
companyReviews | Reviews and TrustScore for known companies | companyUrls | business (profile) + review (+ insight with analysis) |
search | Finding companies by keyword or niche | searchQueries, country | search_result (+ review and insight if scrapeReviews is on) |
category | Listing companies in a Trustpilot category | categories | search_result (+ review and insight if scrapeReviews is on) |
Data you get
- Reviews: title, full text, 1–5 star rating, published and experience dates, language, helpful votes, verification level and source, reviewer name/country/review count, company reply text and date. With analysis on, each review also gets
sentiment,sentimentScore, andtextSentimentScore. - Company profiles: TrustScore, total reviews, reviews in the last 12 months, claimed/closed status, website, categories and breadcrumbs, address, city, country, and email/phone/websites when Trustpilot publishes them.
- Search & category hits: name, slug, TrustScore, review count, categories, location, contacts when shown, and profile URL.
- Insight rows (analysis on): one per company with ratings, trend, themes, responsiveness, integrity flags, red/green signals, and a plain-English executive summary.
- Benchmark row (analysis on, 2+ companies): companies ranked against each other on shared metrics.
Why use this Trustpilot scraper?
- No Trustpilot login or API key: works from public profile, search, and category pages.
- Three modes in one Actor: reviews, discovery, and category mining without juggling tools.
- Built-in sentiment and insight analytics: statistics, not just a score. Every theme links back to real review quotes, so analysts can audit it.
- Honest about sample limits: trend verdicts say
insufficient_datawhen the sample cannot support them, and filtered runs are flagged automatically. - Review-integrity signals: invited-vs-organic rating gap, rating bursts, duplicate text, and first-time reviewer share.
- Server-side review filters: stars, date range, language, topics, verified only, with replies only, in-review keyword, and sort order.
- Discovery to insight in one run:
scrapeReviews: trueplusanalyzeReviews: trueanalyzes every company found by search or category. - Typed, flat rows: every item has a
typefield, so there are no nested surprises for BI tools or agents. - Automation-ready: Apify API, schedules, webhooks, and integrations (Make, n8n, Zapier, Google Sheets), plus MCP for AI agents.
Use cases
- Investor and VC due diligence: check whether a company's headline rating is organic, stable, and well managed before you rely on it.
- Reputation and brand monitoring: track new reviews, TrustScore, and rising complaint themes on a schedule.
- Voice of Customer (VoC) and sentiment analysis: feed review text and sentiment fields to dashboards or NLP pipelines.
- Competitor benchmarking: compare rating, net star score, reply behaviour, and integrity signals across rivals in one run.
- Review authenticity checks: spot invitation-driven rating inflation, one-day 5-star bursts, and duplicated text.
- Churn and support insights: find churn language, refund friction, and slow-support themes in negative reviews.
- Lead generation: find companies in a niche or country and capture published contact details.
- AI agents and RAG: give an agent live, structured customer-sentiment data on demand.
How do I scrape Trustpilot reviews for a company?
Use companyReviews mode and pass a domain or a Trustpilot profile URL. All of these are valid:
apify.comwww.adorama.comhttps://www.trustpilot.com/review/webuyanycarusa.com
Set maxReviews to the number of reviews you want per company. Use 0 for as many as public pages allow (Trustpilot limits how deep pagination goes, so very large review sets may be only partly available).
How do I find companies on Trustpilot by keyword?
Use search mode with searchQueries (for example "Travel agency in New York") and a 2-letter country. Add scrapeReviews: true to also collect reviews for each company found.
How do I scrape a whole Trustpilot category?
Use category mode with category slugs (car_dealer, technical_service, insurance_agency) or full URLs such as https://www.trustpilot.com/categories/car_dealer.
How does Trustpilot review sentiment analysis work?
Set analyzeReviews: true. The Actor then does two things:
- Enriches every review row with
sentiment(positive,neutral,negative),sentimentScore(−1 to 1), andtextSentimentScore. - Pushes one
type: "insight"row per company, summarizing the whole review sample. With 2+ companies it also pushes onetype: "benchmark"row.
How sentiment is scored
- The star rating is mapped to −1…+1 (1★ = −1, 3★ = 0, 5★ = +1).
- English review text is scored with VADER, a rule-based sentiment model. It is not an LLM.
- The final
sentimentScoreblends both 50/50. Labels: at or above +0.10 is positive, at or below −0.10 is negative, otherwise neutral. - If the text is not English,
textSentimentScoreisnulland the score uses the star rating alone.
What an insight row tells you
| Section | What it answers |
|---|---|
sample | How many reviews were analyzed, coverage of the profile, confidence (low / medium / high), and warnings you should read first |
ratings | Average rating with 95% confidence interval, star distribution, net star score, polarization, TrustScore |
sentimentSummary | Share of positive / neutral / negative reviews and average sentiment |
momentum | 90-day rating trend and review-volume trend, plus monthly and quarterly series |
responsiveness | Reply rate, reply rate to 1–2 star reviews, median and 90th-percentile reply time |
themes | Complaint, praise, and latent friction themes with prevalence, trend status, and evidence quotes |
distinctiveTerms | Words and phrases that statistically separate negative from positive reviews |
integrity | Invited share, invited-vs-organic rating gap, bursts, duplicate text, first-time reviewers |
audience | Reviewer countries, languages, and business/team/developer usage signals |
signals | Red and green signals, each with a code, severity, and detail |
keyTakeaways, executiveSummary | Plain-English summary for people who won't read the JSON |
Key metrics explained
- Net star score: share of 4–5 star reviews minus share of 1–2 star reviews, from −100 to +100.
- Polarization: share of reviews that are exactly 1 or 5 stars. High values mean a split customer base that an average hides.
- Rating trend (
momentum.ratingTrend): compares the last 90 days with the prior 90. A verdict ofimprovingordecliningneeds at least 20 reviews in each window, a change of at least 0.15 stars, and statistical significance (Welch t-test). Otherwise you getstableorinsufficient_data, with areason. - Volume trend (
momentum.volume):accelerating,stable, orslowing. Burst days are excluded when they fall in the windows, because invitation campaigns and brigading would otherwise distort the ratio. The raw counts stay visible. - Themes: matched on whole words and phrases (so "no bugs" or "never had an outage" are not counted as complaints). Each theme shows its share of the group, a trend status (
rising,stable,fading, orinsufficient_data), and up to two evidence quotes withreviewId, rating, date, and snippet. Reviewer names are not included in quotes. - Latent friction: complaint themes found inside 4–5 star reviews. Even happy customers can flag pricing, setup, or limits, and this is where it shows up.
- Small samples: each theme reports
groupSizeandlowSample. High-severity flags use a confidence bound, so 13 fraud mentions among 18 negative reviews can raise a flag while 1 mention among 18 cannot.
Review-integrity signals
These are heuristics for a human to investigate, not proof of manipulation.
| Signal | What triggers it |
|---|---|
reviews_mostly_invited | 80% or more of reviews were collected through company invitations |
invited_rating_inflation | Invitations make up at least half the sample and invited reviews rate at least 0.5 stars higher than organic ones |
coordinated_praise_burst / coordinated_attack_burst | A day with an unusual spike of reviews that are 80% or more 5-star (or 1-star) |
duplicate_review_text | 3% or more of reviews share identical text |
mostly_first_time_reviewers | 60% or more of reviewers have only ever written one review (common with invitations) |
many_contentless_5_star | 30% or more of 5-star reviews are four words or fewer |
rating_text_mismatch | 5% or more of reviews have a star rating contradicting their text |
Other red signals: rating_declining, rising_complaint, fraud_allegations, churn_or_warning_language, ignores_negative_reviews, slow_replies_to_negatives, polarized_ratings. Green signals: rating_improving, strong_net_star_score, responsive_to_negatives, review_volume_accelerating.
Get reliable results
- Set
maxReviewsto0, or at least 500 for large companies. A small sample cannot support trend claims. - Sort by
recencyand do not usestars,topics,verifiedOnly,withReplies, orreviewSearch. These filters change which reviews exist in the sample. When any is set, the insight row is markedfiltered, confidence drops tolow, trend verdicts are disabled, and only integrity signals are kept. - Read
sample.warningsandsample.confidencefirst. They list the limits of that run, such as low coverage, few negative reviews, or sentiment running on ratings only. - Use English reviews for text sentiment. Other languages are scored from the star rating alone.
Input parameters
| Parameter | Type | Default | Applies to | Description |
|---|---|---|---|---|
mode | string | companyReviews | all (required) | companyReviews, search, or category |
companyUrls | string[] | – | company | Domains or profile URLs |
searchQueries | string[] | – | search | Keywords or business descriptions |
categories | string[] | – | category | Category slugs or URLs |
maxReviews | integer | 100 | company; search/category with scrapeReviews | Max reviews per company (0–50,000). 0 = all available public pages. Use 0 or 500+ with analyzeReviews |
maxResults | integer | 50 | search, category | Max business rows (0–10,000). 0 = unlimited within maxPages |
maxPages | integer | 5 | search, category | Pagination depth (1–50) |
country | string | US | search | 2-letter country code for search ranking (US, GB, DE) |
scrapeReviews | boolean | false | search, category | Also scrape reviews for each discovered company |
analyzeReviews | boolean | false | all modes that scrape reviews | Add sentiment fields to reviews, push one insight row per company, and a benchmark row for 2+ companies |
stars | string[] | all | reviews | Only these ratings: "1" to "5" |
date | string | all | reviews | all, last30days, last3months, last6months, last12months |
languages | string | en | reviews | ISO language code (en, es, de) |
topics | string[] | – | reviews | Trustpilot topic IDs (see below) |
verifiedOnly | boolean | false | reviews | Keep only verified reviews |
withReplies | boolean | false | reviews | Keep only reviews with a company reply |
reviewSearch | string | "" | reviews | Keyword filter inside review text |
sort | string | recency | reviews | recency, relevance, or rating |
includeBusinessProfile | boolean | true | reviews | Emit one business row before each company's reviews |
Note:
scrapeReviewsdefaults tofalse, so search and category runs return company listings only. Set it totrueto also collect reviews for every company found (usesmaxReviewsand the review filters).
Topic IDs: price, service, staff, value_for_money, customer_service, recommendation, location, ethics, booking_process, payment, credibility, website, user_experience, delivery_service
Input examples
Recent verified 1–2 star reviews for several companies
{"mode": "companyReviews","companyUrls": ["www.adorama.com","https://www.trustpilot.com/review/webuyanycarusa.com"],"maxReviews": 200,"stars": ["1", "2"],"date": "last12months","languages": "en","verifiedOnly": true,"sort": "recency"}
Reviews mentioning a keyword, with company replies only
{"mode": "companyReviews","companyUrls": ["apify.com"],"reviewSearch": "support","withReplies": true,"maxReviews": 50}
Investor-style insight on one company
{"mode": "companyReviews","companyUrls": ["apify.com"],"maxReviews": 0,"sort": "recency","languages": "en","analyzeReviews": true}
Competitor benchmark (insight rows plus a benchmark row)
{"mode": "companyReviews","companyUrls": ["www.adorama.com", "webuyanycarusa.com", "apify.com"],"maxReviews": 0,"sort": "recency","analyzeReviews": true}
Company discovery only (no reviews)
{"mode": "search","searchQueries": ["Insurance agency in United States"],"country": "US","maxResults": 40,"maxPages": 2,"scrapeReviews": false}
Discovery plus reviews and insight in one run
{"mode": "search","searchQueries": ["Travel agency in New York"],"country": "US","maxResults": 10,"maxPages": 1,"scrapeReviews": true,"maxReviews": 200,"sort": "recency","analyzeReviews": true}
Category listings
{"mode": "category","categories": ["technical_service", "car_dealer"],"maxResults": 50,"maxPages": 3,"scrapeReviews": false}
Output
Every dataset item has a type field. Filter on it in the Apify console, API, or your code.
type | Meaning | Produced by |
|---|---|---|
business | Full company profile | companyReviews (when includeBusinessProfile is true) |
review | One customer review | all modes (company reviews, or discovery with scrapeReviews) |
search_result | Lighter company card from a listing | search, category |
insight | Per-company sentiment and investor analytics | any run with analyzeReviews: true |
benchmark | Peer ranking across companies | analyzeReviews: true with 2+ companies |
Example: business row
{"type": "business","businessUnitId": "62ac9c3177fbadc00785d7fe","displayName": "Apify","identifyingName": "apify.com","trustScore": 4.8,"stars": 5,"numberOfReviews": 811,"numberOfReviewsLast12Months": 536,"websiteUrl": "https://apify.com","profileUrl": "https://www.trustpilot.com/review/apify.com","countryCode": "CZ","isClaimed": true,"isClosed": false,"isTemporarilyClosed": false,"isCollectingReviews": false,"categoryId": "software_company","categoryName": "Software Company","categories": [{ "id": "software_company", "name": "Software Company", "isPrimary": true, "rank": null },{ "id": "software_vendor", "name": "Software Vendor", "isPrimary": false, "rank": null }],"breadcrumbTop": "Electronics & Technology","breadcrumbMid": "Internet & Software","breadcrumbBottom": "Software Company","address": "Vodičkova 704/36, Nové Město","city": "Prague","zipCode": "110 00","country": "CZ","email": "hello@apify.com","emails": ["hello@apify.com"],"phone": "","phones": [],"websites": ["https://apify.com"],"verifiedPaymentMethod": false,"verifiedByGoogle": false,"verifiedUserIdentity": false,"scrapedAt": "2026-10-23T08:56:10.853755+00:00"}
(Category list shortened for readability.)
Example: review row (with analysis on)
{"type": "review","reviewId": "6a4e86e661133d86dacdfa28","businessUnitId": "62ac9c3177fbadc00785d7fe","businessName": "Apify","identifyingName": "apify.com","profileUrl": "https://www.trustpilot.com/review/apify.com","title": "Helped me a lot with scraping data…","text": "Helped me a lot with scraping data reliably with ai for my market intelligence dashboards.","rating": 5,"likes": 0,"language": "en","source": "BasicLink","isVerified": false,"verificationLevel": "invited","verificationSource": "invitation","publishedDate": "2026-07-08T19:20:38.000Z","experiencedDate": "2026-07-08T00:00:00.000Z","consumerName": "Example Reviewer","consumerCountry": "HU","consumerReviewsCount": 2,"hasReply": false,"replyMessage": "","replyPublishedDate": "","isPending": false,"filtered": false,"scrapedAt": "2026-10-23T08:57:04.821191+00:00","textSentimentScore": 0.4767,"sentimentScore": 0.7384,"sentiment": "positive"}
(Reviewer name replaced and text lightly edited for privacy. The three sentiment fields appear only when analyzeReviews is on.)
Example: insight row
An illustrative insight row for an anonymized company, trimmed for readability. Values are rounded.
{"type": "insight","schemaVersion": 3,"identifyingName": "example.com","displayName": "Example Co","asOf": "2026-10-23T09:36:01+00:00","sample": {"reviewCountAnalyzed": 100,"profileReviewCount": 108,"coverage": 0.9259,"oldestReview": "2025-11-14T11:48:04+00:00","newestReview": "2026-10-22T09:52:44+00:00","reachesPriorWindow": true,"englishTextShare": 1,"confidence": "medium","filtered": false,"scope": { "filtersApplied": [], "date": "all", "language": "all", "sort": "recency" },"sentimentEngine": "vader","warnings": ["Only 18 negative reviews in the sample; complaint themes are anecdotal."]},"ratings": {"avgRating": 4.23,"ci95": [3.93, 4.53],"distribution": { "5": 0.78, "4": 0.02, "3": 0.02, "2": 0.01, "1": 0.17 },"netStarScore": 62,"polarization": 0.95,"trustScore": 4.2},"sentimentSummary": {"distribution": { "positive": 0.8, "neutral": 0.03, "negative": 0.17 },"avgScore": 0.5389},"momentum": {"ratingTrend": {"recent90d": { "reviews": 19, "avgRating": 4.316 },"prior90d": { "reviews": 56, "avgRating": 4.286 },"delta": null,"tStat": null,"verdict": "insufficient_data","reason": "fewer_than_20_reviews_in_a_window"},"volume": {"recent90d": 19,"prior90d": 56,"recent90dExBursts": 19,"prior90dExBursts": 28,"burstAdjusted": true,"ratio": 0.68,"verdict": "slowing"},"monthly": [{ "month": "2026-09", "reviews": 2, "avgRating": 3.5 },{ "month": "2026-10", "reviews": 17, "avgRating": 4.412 }]},"responsiveness": {"replyRate": 0.17,"negativeReviews": 18,"negativeReplyRate": 0.3333,"medianReplyHours": 111.8,"p90ReplyHours": 977,"negativeMedianReplyHours": 476},"themes": {"complaints": [{"theme": "refund / money-back friction","mentions": 4,"groupSize": 18,"lowSample": false,"shareOfGroup": 0.2222,"status": "insufficient_data","evidence": [{"reviewId": "6a00000000000000000000aa","rating": 1,"publishedDate": "2026-08-14T10:02:11+00:00","quote": "…asked for a refund three times and nobody answered…"}]}],"praise": [{ "theme": "easy to use", "mentions": 23, "groupSize": 80, "shareOfGroup": 0.2875, "status": "stable" }],"latentFriction": []},"integrity": {"invitedShare": 0.54,"sourceMix": [{ "value": "BasicLink", "share": 0.54 },{ "value": "Organic", "share": 0.46 }],"invitedVsOrganicRatingGap": 1.513,"firstTimeReviewerShare": 0.79,"duplicateTextShare": 0,"burstDays": [{ "date": "2026-06-18", "reviews": 18, "avgRating": 4.94, "share5Star": 0.944, "share1Star": 0 }]},"signals": {"red": [{ "code": "coordinated_praise_burst", "severity": "high", "detail": "18 reviews on 2026-06-18, overwhelmingly 5-star." },{ "code": "invited_rating_inflation", "severity": "medium", "detail": "Invited reviews average +1.51 stars vs organic; headline rating may be flattered." }],"green": [{ "code": "strong_net_star_score", "severity": "medium", "detail": "Net star score +62 (share 4-5 star minus share 1-2 star)." }]},"executiveSummary": "Example Co: 100 reviews analyzed (93% of 108 on profile), confidence medium. Average rating 4.23/5 (95% CI 3.93-4.53), net star score +62. Profile TrustScore 4.2. Rating trend: insufficient data; review volume: slowing. Replies to 33% of negative reviews. 4 red flag(s), 1 positive signal(s). Caveat: Only 18 negative reviews in the sample; complaint themes are anecdotal. Main concern: 18 reviews on 2026-06-18, overwhelmingly 5-star."}
The real row also contains distinctiveTerms, topicShares, audience, keyTakeaways, quarterly, and a few legacy summary fields (reviewCountAnalyzed, sentimentDistribution, avgSentimentScore, ratingDistribution, verifiedShare, replyRate, avgReplyHours, topTopics, risingComplaints, topPraise, trendLast90Days) kept for backward compatibility.
Example: benchmark row (shape)
{"type": "benchmark","schemaVersion": 3,"peerCount": 3,"note": "Percentiles are relative to this peer set only (100 = best). Low-confidence companies are ranked but should be read cautiously.","companies": [{"identifyingName": "example-a.com","displayName": "Example A","reviewCountAnalyzed": 480,"confidence": "high","metrics": { "avgRating": 4.41, "netStarScore": 74, "negativeReplyRate": 0.82, "invitedShare": 0.12 },"percentiles": { "avgRating": 100, "netStarScore": 100, "negativeReplyRate": 100, "invitedShare": 100 },"overallPercentile": 91.7}]}
(Trimmed to one company and four metrics. Benchmarked metrics: avgRating, netStarScore, ratingDelta90d, negativeReplyRate, negativeMedianReplyHours, invitedShare, duplicateTextShare, redFlagCount.)
Field reference
Dataset views in the Apify console
- All rows: mixed
business,review,search_result, andinsightrows - Reviews: review columns including sentiment
- Businesses & search hits: profiles and discovery results
- Insights: one line per company with rating, trend, reply rate, integrity and signals
- Insight details: themes with evidence, distinctive terms, momentum series, audience
- Benchmark: peer ranking when 2+ companies are analyzed
Run it with the API, Python, or JavaScript
cURL
curl "https://api.apify.com/v2/acts/devil_port369-owner~trustpilot-reviews/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \-X POST \-H "Content-Type: application/json" \-d '{"mode": "companyReviews", "companyUrls": ["apify.com"], "maxReviews": 50}'
Python
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("devil_port369-owner/trustpilot-reviews").call(run_input={"mode": "companyReviews","companyUrls": ["apify.com"],"maxReviews": 0,"sort": "recency","analyzeReviews": True,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():if item["type"] == "insight":print(item["executiveSummary"])for s in item["signals"]["red"]:print(s["severity"], s["code"], s["detail"])
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('devil_port369-owner/trustpilot-reviews').call({mode: 'companyReviews',companyUrls: ['apify.com'],maxReviews: 0,sort: 'recency',analyzeReviews: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();const insight = items.find((i) => i.type === 'insight');const reviews = items.filter((i) => i.type === 'review');
Schedule recurring runs under Schedules and connect results to Google Sheets, Slack, Make, n8n, Zapier, or webhooks for continuous reputation tracking.
Use with AI agents and MCP
This Actor is built to be called by LLM agents: flat typed output, a small set of enumerated inputs, predictable defaults, and an insight row that already carries the caveats an agent needs to avoid over-claiming.
Connect through the Apify MCP server
Add this Actor to your MCP client (Claude, Cursor, VS Code, and others) through the Apify MCP server:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com/?tools=devil_port369-owner/trustpilot-reviews","headers": { "Authorization": "Bearer YOUR_API_TOKEN" }}}}
Agent decision guide
| User intent | Set | Required field |
|---|---|---|
| "What do customers say about company X?" | mode: companyReviews | companyUrls |
| "What's the TrustScore of company X?" | companyReviews, maxReviews: 1 | companyUrls |
| "Is company X's rating trustworthy?" / "Reputation risk?" | companyReviews, analyzeReviews: true, maxReviews: 0, sort: recency | companyUrls |
| "Compare A, B, C" | as above with several companyUrls | companyUrls (read the benchmark row) |
| "Find companies that do Y in country Z" | mode: search | searchQueries, country |
| "List companies in category C" | mode: category | categories |
| "Find companies and analyze their reviews" | search, scrapeReviews: true, analyzeReviews: true | searchQueries |
| "Only complaints" | add stars: ["1","2"] (analysis is then disabled for trends) | – |
| "Only recent" | add date: "last30days" | – |
Agent rules of thumb
- Always set
modefirst, then the matching array. Each array is a list of strings, even for a single value. - Start small, then expand:
maxReviewsof 20–50 for exploration; use0or 500+ for any trend or risk claim. - Branch on
item.type:businessfor profile facts,reviewfor review text,insightfor analysis,benchmarkfor rankings,search_resultfor lead lists. - Read
sample.confidenceandsample.warningsbefore quoting any insight number. Do not state a trend whenmomentum.ratingTrend.verdictisinsufficient_data. - Do not combine
analyzeReviewswith review filters if you want company-level conclusions. Filtered runs are markedsample.filtered: trueand trend verdicts are disabled. - Treat
integrityflags as leads to investigate, not accusations. Say "flagged for" rather than "fake". - Cite evidence: theme
evidenceentries carryreviewId, date, and a snippet. Every row hasprofileUrlandscrapedAtfor attribution and freshness. starstakes strings (["1","2"]), not integers.- Empty
email/phoneis normal. It means Trustpilot does not publish them for that company.
Minimal agent payloads
{ "mode": "companyReviews", "companyUrls": ["apify.com"], "maxReviews": 50, "includeBusinessProfile": true }
{ "mode": "companyReviews", "companyUrls": ["apify.com"], "maxReviews": 0, "sort": "recency", "analyzeReviews": true }
{ "mode": "search", "searchQueries": ["software company Czech Republic"], "country": "CZ", "maxResults": 25, "scrapeReviews": false }
Frequently asked questions
Is scraping Trustpilot legal?
This Actor collects publicly visible data. Legality depends on your use case, jurisdiction, and Trustpilot's terms. Review the Compliance section, avoid using personal data beyond what the law allows, and consult a legal professional for your situation.
Do I need a Trustpilot account or API key?
No. The Actor reads public profile, search, and category pages.
Is this a Trustpilot API alternative?
Yes. It gives you structured review and company data without a Trustpilot business account or API approval process.
How does the Trustpilot sentiment analysis work?
Each review gets a score that blends its star rating with the sentiment of its English text (scored with VADER). The Actor then summarizes the whole sample into an insight row with ratings, trends, themes, reply behaviour, and integrity signals. See How does Trustpilot review sentiment analysis work?.
Does the analysis use an LLM or send my data to an AI service?
No. The analysis runs inside the Actor using rule-based sentiment and statistics. No review text is sent to an external AI service, and no extra API keys are needed.
Which languages does sentiment analysis support?
Text sentiment is English-only. Reviews in other languages are scored from the star rating alone (textSentimentScore is null), and sample.englishTextShare shows how much of the sample had text scored.
What does insufficient_data mean?
The sample cannot support a reliable trend, for example it does not reach back 180 days, has fewer than 20 reviews in a 90-day window, or was filtered. The reason field says which. Raise maxReviews (use 0 for large companies) and remove review filters to get a verdict.
Why were trend verdicts disabled on my run?
Either you used review filters (stars, topics, verifiedOnly, withReplies, reviewSearch), sorted by something other than recency, or the sample was too short. The insight row says which in sample.warnings.
What is the "net star score"?
The share of 4–5 star reviews minus the share of 1–2 star reviews, from −100 to +100. It is more sensitive than the average because it shows how many customers are clearly unhappy.
What is the difference between invited and organic reviews?
Invited reviews are requested by the company (for example via an email link, shown as source: BasicLink and verificationLevel: invited). Organic reviews are written without an invitation. Invited reviews tend to be more positive, so a large gap between them is worth investigating.
Does a red flag mean the reviews are fake?
No. Integrity signals are heuristics, such as an unusual one-day spike or many first-time reviewers. They show where a human should look, and they can have innocent causes like a marketing campaign.
How many reviews do I need for a good analysis?
At least a few hundred for trends, and the more the better. For small companies, the whole profile may be only 100 reviews, and sample.coverage shows how much of the profile you captured. Confidence is low below 100 reviews, medium from 100, and high from 400.
How many reviews can I get per company?
Up to what Trustpilot exposes publicly. Set maxReviews to 0 for the maximum, or use stars, date, and topics filters to cover different slices of a large review set (note that filters disable company-level analysis).
Can I get only negative reviews?
Yes. Use "stars": ["1", "2"]. Combine with date, verifiedOnly, or topics to narrow further.
Can I scrape reviews in other languages?
Yes. Set languages to an ISO code such as es, de, or fr. The default is en.
Why are email and phone empty on some rows?
They are returned only when Trustpilot publishes them for that company. Many businesses hide them.
Why did my search return companies from other countries?
Search follows Trustpilot's index and your country value. Use a more specific query and set country to the market you care about.
What is identifyingName?
The company slug in https://www.trustpilot.com/review/{identifyingName}, usually the domain (apify.com, www.adorama.com).
What is the difference between business and search_result?
business is a full profile from a company's review page. search_result is a lighter card from a search or category listing.
Does scrapeReviews work in company mode?
No. Company mode always scrapes reviews for the URLs you give. scrapeReviews only extends search and category runs.
Can I run it on a schedule and send results to my tools?
Yes. Use Apify Schedules, webhooks, and integrations (Google Sheets, Slack, Make, n8n, Zapier) or pull data through the API.
I found a bug or need extra fields. What should I do?
Open an issue from the Actor's Issues tab. Custom fields, modifications, and private versions are available on request via the DataFusionX contact page.
Compliance
- This Actor collects publicly available data. You are responsible for using it in line with Trustpilot's terms and applicable laws such as GDPR and CCPA.
- Review rows include public reviewer names and countries, which can be personal data. Minimize, secure, and retain them only as needed, and honor deletion requests. Insight rows contain no reviewer names; evidence quotes carry only a review ID.
- Insight and benchmark rows are statistical summaries of a review sample for research purposes. They are not investment, legal, or financial advice, and integrity signals are not findings of fraud.
- Not affiliated with, endorsed by, or sponsored by Trustpilot A/S. "Trustpilot" and "TrustScore" are trademarks of their owner.
- This section is general information, not legal advice.
More Actors by DataFusionX
Looking for more production-grade scrapers and data pipelines? Browse the full portfolio: apify.com/devil_port369-owner
Need a custom Actor, maintenance, or integrations with Make, n8n, Zapier, CRMs, or Google Sheets? Submit a project request.
Keywords: Trustpilot scraper, Trustpilot reviews scraper, Trustpilot sentiment analysis, Trustpilot review analytics, scrape Trustpilot reviews, Trustpilot API alternative, Trustpilot company data, Trustpilot category scraper, Trustpilot search scraper, TrustScore extractor, review sentiment analysis, review authenticity check, reputation monitoring, competitor benchmarking, investor due diligence, voice of customer, customer sentiment data, Trustpilot MCP, AI agent review data