Trustpilot Scraper
Pricing
from $0.35 / 1,000 results
Trustpilot Scraper
Request-first Trustpilot scraper for reviews, company profiles, ratings, logos, contacts, sentiment, topics, replies, delta monitoring, and clean analytics-ready datasets
Pricing
from $0.35 / 1,000 results
Rating
0.0
(0)
Developer
Blynx
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
9 days ago
Last modified
Categories
Share
Trustpilot Review Intelligence Scraper
Scrape Trustpilot company reviews, company profiles, contact details, logos, and review intelligence in one Apify Actor.
The Actor is built for reputation monitoring, competitor research, ecommerce due diligence, agency reports, customer experience analysis, and lead intelligence. It extracts review data, company metadata, phone/email contacts when Trustpilot exposes them, TrustScore fields, reviewer metadata, company replies, sentiment, topics, risk signals, delta monitoring, and run quality metrics.
The scraper is HTTP-first. It tries lightweight requests first, then uses an optimized Playwright browser fallback when Trustpilot serves a WAF verification page. For blocked Trustpilot pages, enable fastBrowserMode to skip the HTTP preflight and use the optimized browser path directly.
Features
- Scrape reviews by company domain, for example
discountfilters.com, or by full Trustpilot review URL. - Search Trustpilot companies by keyword, then scrape matched company review pages.
- Extract review title, text, rating, dates, language, reviewer name, country, review count, likes, source type, verification status, and company replies.
- Extract company name, domain, website, TrustScore, star rating, review count, categories, claim status, logo, rating image, phone, email, address, country, and rating distribution when available.
- Generate
reviewImageUrl, a Trustpilot share-card image URL for each review when the review ID and business unit ID are known. - Add deterministic intelligence fields: sentiment, sentiment score, topics, risk signals, issue severity, reply rate, verified rate, and company-level summaries.
- Track review changes between runs with delta monitoring.
- Keep a stable dataset table: missing optional fields stay as
null,[], or{}instead of disappearing. - Write alias datasets for
companies,changes, andsummary.
Recommended Input
Fast mode for normal Store-style testing:
{"mode": "REVIEWS","companyDomains": ["lineaverdegiardino.it","discountfilters.com","madeinparadis.nl","shift.com","www.edplace.com","aimlapi.com","playeurolotto.com","flightdelayrefunds.com","giftexpress.com","accointing.com"],"maxResults": 50,"maxReviewsPerCompany": 5,"maxPagesPerCompany": 1,"sort": "recency","stars": [],"verified": "","includeCompanyProfile": true,"includeSearchResults": false,"enableDeltaMonitoring": false,"rawOutput": false,"browserFallback": true,"fastBrowserMode": true,"maxConcurrency": 3,"maxRetries": 0,"proxyConfiguration": {"useApifyProxy": false}}
For Store runs, use 2048 MB memory. The Actor can run on 512 MB, but browser fallback is forced into a one-page-at-a-time stability mode, which is much slower on Trustpilot. With 2048 MB, the Actor can safely fetch two browser pages in parallel and the recommended input above is much faster.
For larger runs, keep browserFallback enabled and start with maxConcurrency between 3 and 5. Higher concurrency can be slower if Trustpilot's WAF starts throttling browser pages.
Input Modes
Use REVIEWS when you already know the company domains:
{"mode": "REVIEWS","companyDomains": ["www.amazon.com", "www.apple.com"],"maxResults": 100,"maxReviewsPerCompany": 50,"maxPagesPerCompany": 3,"sort": "recency","includeCompanyProfile": true,"browserFallback": true,"fastBrowserMode": true}
Use SEARCH when you want to discover companies first:
{"mode": "SEARCH","searchQueries": ["amazon", "shopify"],"maxResults": 100,"maxReviewsPerCompany": 25,"maxPagesPerCompany": 2,"includeSearchResults": true,"includeCompanyProfile": true,"browserFallback": true,"fastBrowserMode": true}
Filter reviews by star rating or verification state:
{"mode": "REVIEWS","companyDomains": ["www.example.com"],"stars": ["1", "2"],"verified": "true","maxResults": 100}
Main Settings
mode:AUTO,REVIEWS, orSEARCH.companyDomains: Trustpilot business domains or full Trustpilot review URLs.businessUnitIds: optional Trustpilot business unit IDs, either plain IDs orid:domainpairs.startUrls: Trustpilot review URLs or Trustpilot search URLs.searchQueries: company search keywords forSEARCHmode.maxResults: maximum output items in the default dataset.maxReviewsPerCompany: maximum reviews collected per company.maxPagesPerCompany: pagination safety limit per company.sort: Trustpilot review sort order,recencyorrelevance.stars: optional star filters from1to5.verified: optional verification filter,true,false, or empty.includeCompanyProfile: attach company profile and reputation fields to every review.includeSearchResults: inSEARCHmode, also output matched company items.enableDeltaMonitoring: compare current reviews with the previous run.rawOutput: include selected parser debug fields.browserFallback: use a real browser when HTTP requests hit Trustpilot's WAF.fastBrowserMode: skip the HTTP preflight for Trustpilot HTML pages and use the optimized browser fetcher directly.maxConcurrency: maximum parallel fetches. For fast browser mode,3to5is usually the best speed/stability range.maxRetries: retry budget for HTTP 429/5xx/parse errors. Block and proxy errors have separate handling.proxyConfiguration: Apify proxy settings.
Output
The default dataset contains one item per review. If includeSearchResults is enabled in SEARCH mode, matched company records are also written to the default dataset. Failed pages are written as diagnostic error items, so a run does not silently return an empty dataset.
Review rows use a stable schema. A null value usually means Trustpilot did not expose that field for that review or company.
Example review item:
{"type": "review","reviewId": "rev_001","reviewUrl": "https://www.trustpilot.com/reviews/rev_001","sourceUrl": "https://www.trustpilot.com/review/www.example.com","companyId": "46d6a890000064000500e0c3","companyName": "Example Store","companyDomain": "www.example.com","companyUrl": "https://www.trustpilot.com/review/www.example.com","companyWebsite": "https://www.example.com","companyEmail": "support@example.com","companyEmails": ["support@example.com"],"companyPhone": "+1 555 0100","companyPhones": ["+1 555 0100"],"companyAddress": "1 Market Street","companyCountry": "US","companyLogo": "https://consumersiteimages.trustpilot.net/business-units/46d6a890000064000500e0c3-198x149-1x.jpg","companyProfileImageUrl": "https://consumersiteimages.trustpilot.net/business-units/46d6a890000064000500e0c3-198x149-2x.jpg","companyRatingImageUrl": "https://share.trustpilot.com/images/company-rating?locale=en-US&businessUnitId=46d6a890000064000500e0c3&preset=consumersite","reviewImageUrl": "https://share.trustpilot.com/images/review?locale=en-US&reviewId=rev_001&businessUnitId=46d6a890000064000500e0c3","trustScore": 4.3,"companyRating": 4.5,"companyReviewCount": 1234,"companyCategories": ["Electronics Store"],"companyClaimed": true,"rating": 1,"title": "Refund never arrived","text": "Customer service promised a refund, but billing charged me again.","language": "en","datePublished": "2026-05-17T08:00:00.000Z","dateExperienced": "2026-05-14T00:00:00.000Z","dateUpdated": null,"isVerified": true,"reviewSource": "invited","consumerName": "Alex Buyer","consumerId": "user_001","consumerCountry": "US","consumerReviewCount": 7,"consumerImageUrl": "https://user-images.trustpilot.com/user_001/73x73.png","companyReplyText": "We are sorry and have escalated your refund.","companyReplyDate": "2026-05-18T12:30:00.000Z","hasCompanyReply": true,"likes": 5,"reviewTags": ["Verified", "Invited"],"sentiment": "negative","sentimentScore": -1.0,"topics": ["customer_service", "refund_billing"],"issueSeverity": "high","riskSignals": ["low_rating", "strong_negative_language", "unanswered_negative_review"],"reviewLength": 68,"changeStatus": "new","changedFields": [],"scrapedAt": "2026-05-25T12:00:00.000000+00:00"}
Company summary items are written to the companies dataset:
{"type": "company","companyId": "46d6a890000064000500e0c3","companyName": "Example Store","companyDomain": "www.example.com","companyUrl": "https://www.trustpilot.com/review/www.example.com","companyWebsite": "https://www.example.com","companyEmail": "support@example.com","companyPhone": "+1 555 0100","companyAddress": "1 Market Street","companyCountry": "US","companyLogo": "https://consumersiteimages.trustpilot.net/business-units/46d6a890000064000500e0c3-198x149-1x.jpg","companyRatingImageUrl": "https://share.trustpilot.com/images/company-rating?locale=en-US&businessUnitId=46d6a890000064000500e0c3&preset=consumersite","trustScore": 4.3,"companyRating": 4.5,"companyReviewCount": 1234,"ratingDistribution": {},"companyCategories": ["Electronics Store"],"companyClaimed": true,"companyVerified": null,"companyDescription": null,"reviewsScraped": 100,"averageScrapedRating": 3.72,"positiveReviews": 61,"neutralReviews": 12,"negativeReviews": 27,"replyRate": 0.44,"verifiedRate": 0.78,"topTopics": [{ "topic": "customer_service", "count": 31 },{ "topic": "delivery_shipping", "count": 19 }],"scrapedAt": "2026-05-25T12:00:00.000000+00:00"}
Error item example:
{"type": "error","errorType": "reviewPageError","sourceUrl": "https://www.trustpilot.com/review/missing.example","companyDomain": "missing.example","page": 1,"error": "Blocked by target site, status=403","detectedAt": "2026-05-25T12:00:00.000000+00:00"}
Understanding Null Values
null is not automatically a parsing error. Common cases:
companyPhone: Trustpilot often exposes email and address but no phone.consumerImageUrl: many reviewers use initials instead of a profile photo.companyReplyTextandcompanyReplyDate: the business did not reply to that review.dateUpdated: the review was never edited.dateExperienced: older reviews may not expose a separate experience date.companyHeroImage: many Trustpilot company profiles do not expose a hero/banner image in page data.changeStatusandchangedFields: populated only whenenableDeltaMonitoringis enabled.topicsandriskSignals: empty arrays mean the deterministic enrichment did not detect a matching topic or risk signal.
Phone and email are extracted from Trustpilot company/contact data, not from arbitrary review text. This avoids collecting customer phone numbers or unrelated emails mentioned inside reviews.
Review Source Values
reviewSource can be:
invited: Trustpilot indicates the review came from an invitation flow.verified: Trustpilot indicates the review is verified.unprompted: Trustpilot shows Organic, Unprompted, Not verified, or similar source markers.null: Trustpilot did not expose a usable source marker.
Performance
For arbitrary companies, the fastest stable configuration is usually:
{"browserFallback": true,"fastBrowserMode": true,"maxConcurrency": 3,"maxRetries": 0,"maxPagesPerCompany": 1}
Recommended Apify run memory: 2048 MB.
Memory behavior:
512 MB: stable fallback mode, one browser page at a time, lower cost but slower.2048 MB: recommended default, two browser pages at a time, best speed/stability balance.4096 MB+: useful only for larger batches; do not raisemaxConcurrencytoo aggressively.
The optimized browser fetcher:
- Reuses one browser context.
- Warms the context with the first Trustpilot page.
- Opens later pages in parallel.
- Blocks non-essential images, media, fonts, and analytics requests.
- Reads embedded Trustpilot page data as soon as
__NEXT_DATA__appears.
For larger workloads, increase maxConcurrency carefully from 3 to 4 or 5. Very high concurrency can trigger WAF slowdowns and become slower overall.
Proxy Recommendation
Trustpilot can return WAF verification pages to low-trust or datacenter IPs. The Actor includes browser fallback for those cases. For larger or long-running Apify jobs, residential proxies may improve stability:
{"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "US"}
If you target a specific market, match the proxy country to that market when possible.
Technical Notes
- HTTP requests use Chrome-like TLS/HTTP2 impersonation through
curl_cffi. - Browser fallback uses Playwright only when needed, or directly when
fastBrowserModeis enabled. - The parser supports embedded Next.js data, DOM fallbacks, and JSON-LD fallbacks.
- Company logo and profile image URLs are generated from Trustpilot business unit IDs when possible.
reviewImageUrlis a Trustpilot share image URL, not the review text. The review text is intext, and the review title is intitle.- Apify quality-test runs Actors from the prefilled input schema. The schema prefill is intentionally tiny: one company, one page, one review, no residential proxy, and delta monitoring disabled.
Local Development
Run local validation:
python -m json.tool .actor/input_schema.jsonpython -m compileall src scriptspython scripts/smoke_test.py
The smoke test uses local Trustpilot-like fixtures, so it validates parsing and output shape without depending on live Trustpilot access.
Deploy manually when ready:
$deploy.bat
Limitations
- Available fields depend on what Trustpilot exposes for each company and review.
- Some companies do not expose phone, email, logos, categories, replies, reviewer profile images, or reviewer profile details.
- Local direct HTTP requests may hit Trustpilot's WAF; use browser fallback or residential proxies for real runs.
- Sentiment, topics, and risk signals are deterministic rule-based enrichments, not paid AI inference.
- Delta monitoring compares reviews collected by this Actor across runs. If a run collects no reviews, previous state is not overwritten.