Trustpilot Reviews Scraper — Ratings, Reviews & Replies
Pricing
from $0.14 / 1,000 trustpilot reviews
Trustpilot Reviews Scraper — Ratings, Reviews & Replies
Collect accessible Trustpilot reviews, ratings and company replies with filters and source diagnostics. Bulk export: JSON, CSV, Excel and API. Pay per result: from $0.1/1K reviews; start fee, usage extra.
Pricing
from $0.14 / 1,000 trustpilot reviews
Rating
0.0
(0)
Developer
Apivault Labs
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
7 days ago
Last modified
Categories
Share
Trustpilot Scraper — Reviews, Ratings & Replies
Fast Trustpilot scraper for collecting Trustpilot reviews, ratings, business replies, TrustScore, and company-profile data. Explore recent results or configure deeper collection, with every review exported as a separate row.
Run bulk company and competitor monitoring, track brand reputation and complaints, analyze ratings and replies, and export clean results to CSV, JSON, or Excel from Apify.
First run: one company, three reviews
- Paste an exact company profile, for example
https://www.trustpilot.com/review/canva.com, into Start URLs. - Set Maximum reviews per company to
3and Maximum source pages per company to1. - Click Start, then open Reviews. Company information is in the separate Companies dataset.
{"startUrls":["https://www.trustpilot.com/review/canva.com"],"maxReviews":3,"maxPages":1,"contentMode":"companyInformationAndReviews","includeCompanyResponseMetrics":true,"includeReviewInsights":true}
On the Free plan, three returned reviews cost $0.008 in Actor events ($0.005 start + 3 × $0.001), plus platform usage. This is an estimate for one run with three reviews; check the current Pricing tab and your tier. Set an overall run/spend cap in your client when available. Fewer results can reflect filters or source access. Read SUMMARY and INPUT_STATUS before treating the collection as complete.
The fresh Console example uses 3 reviews and 1 page. The API/schema defaults remain 20 reviews and 3 pages; existing saved inputs can retain their own values. Optional settings are grouped below the first-run controls. No Trustpilot credential is required. See the complete input reference for every parameter and its dependencies.
MCP and AI agents
Use this Actor for public Trustpilot review research, company reputation summaries and reply analysis. Start with one company and a small review sample.
Select apivault_labs/trustpilot-scraper-reviews-ratings-api in the Actor's API → MCP tab, or connect an authenticated
MCP client to:
https://mcp.apify.com/?tools=apivault_labs/trustpilot-scraper-reviews-ratings-api
The direct tool is apivault_labs--trustpilot-scraper-reviews-ratings-api. Keep the Apify token in the client's secure
authentication configuration. Public source data does not remove the requirement
for Apify authentication and applicable run charges. Read tools/list before
calling: wrapper fields can differ from the Actor input schema.
Small Actor input:
{"startUrls": ["canva.com"],"contentMode": "reviews","maxReviews": 3,"maxPages": 1,"incremental": false,"expandRegionalDomains": false}
Send this object as the direct tool's arguments. Its current wrapper also accepts
waitSecs: 45. waitSecs controls how long the tool waits; it is not the Actor
run timeout. If the run is still active, poll its returned run ID with
get-actor-run; do not start a duplicate. Once terminal, use
get-dataset-items with the returned dataset ID and a small limit/field selection,
then get-key-value-store-record with the returned store ID and required record
key. Missing IDs/records must be reported, not replaced with another run's storage.
Retrieve the default Reviews dataset. Company information is a separate named dataset; use the returned storage links, not a guessed name or a new dataset. Read SUMMARY and INPUT_STATUS: failedCompanies, partialCompanies and writeErrors indicate incomplete collection. A company-only run can have zero Reviews while Companies is populated. Public login walls and configured page limits can truncate history; never infer full coverage from a short sample.
Agent request: “Collect up to three accessible public Canva reviews from one page, then return the review URLs and explain any failures or incomplete coverage.”
Keep the first run small. Increase limits only for the requested scope, check current Pricing and cap runtime/spend using controls actually supported by your run client. Distinguish source errors, filtered emptiness and partial delivery; a completed tool call alone does not establish successful data collection.
Get your first 20 reviews
- Enter a company domain such as
canva.comin Start URLs. - Keep Maximum reviews per company at
20and click Start. - Open Reviews for review rows or Companies for TrustScore and company summaries. Export the chosen dataset as CSV, JSON, or Excel.
{"startUrls":["canva.com"],"maxReviews":20,"maxPages":3,"contentMode":"companyInformationAndReviews"}
Review rows include reviewId, companyDomain, rating, title, text, publishedAt, hasReply, replyText, and reviewUrl. Company rows are in a separate dataset, so a company-only run can have an empty Reviews dataset and a populated Companies dataset.
On the Free plan, 20 reviews cost $0.025 in Actor events ($0.005 start + 20 × $0.001), plus Apify platform usage. No Trustpilot credential is required; programmatic Apify calls use your Apify credential.
Public-page limits and incomplete results
The Actor collects accessible public pages and does not guarantee a complete review archive. In our October 4 check, Canva page 10 returned reviews and page 11 required Trustpilot login. Availability can differ across companies, filters, and time.
maxReviews: 0 removes the requested review-count limit; maxPages still caps collection and upstream access restrictions still apply. A larger limit does not bypass a login wall. Source failures appear in Input errors and SUMMARY.partialCompanies; collected rows remain available. Requested limits can also intentionally produce a sample without a source error.
For incremental monitoring, reuse the same persistent state store. The next run excludes timestamps already collected. Run often enough and use sufficient page/review limits: reviews outside the collected sample are not recovered automatically. Company insights and reply-rate metrics describe the collected sample.
Why use this Trustpilot scraper?
- Configurable review history — start with a fast recent sample or increase the limits for deeper collection.
- Reviews, ratings, and replies — full review text, star rating, dates, verification, reviewer details, and responses from the business.
- TrustScore and company profiles — company rating, review totals, star distribution, country, website, and response metrics.
- Fast bulk scraping — process multiple companies in one run with bounded concurrency.
- CSV, JSON, and Excel export — every review is a separate dataset item, ready for analysis or automation.
- Competitor and complaint monitoring — filter low ratings, identify recurring complaint themes, and compare brand reputation.
- Incremental updates — collect only reviews published since the previous saved state.
No Trustpilot login or user-supplied Trustpilot credential is required for normal runs. Version 1.7 preserves full publication timestamps, review text, and business replies. Failures and partial results are recorded in Input errors and SUMMARY.
Pricing
Pay per review written to the Reviews dataset. Company summaries and input-status records are not billed as review results. Apify platform usage costs (compute, storage, and network) are charged separately to the user.
| Apify plan | Per review | Per 1,000 reviews | Run start |
|---|---|---|---|
| FREE | $0.00100 | $1.00 | $0.00500 |
| Bronze | $0.00025 | $0.25 | $0.00005 |
| Silver | $0.00018 | $0.18 | $0.00005 |
| Gold | $0.00014 | $0.14 | $0.00005 |
| Platinum | $0.00012 | $0.12 | $0.00005 |
| Diamond | $0.00010 | $0.10 | $0.00005 |
Company-only runs have no review-result charge; the run-start event and platform usage still apply.
Flexible start input
Use startUrls for any mix of bare brands/domains, normal websites, Trustpilot company profiles (/review/), individual reviews (/reviews/), consumer profiles (/users/), and Trustpilot search URLs (/search?query=). The legacy companyUrls field remains accepted. searchTerms can be combined with all URL inputs.
The prefilled example uses canva.com. Recent sampling is the default; balanced sampling is available when you want a wider rating distribution. maxPages caps native page requests even with filters.
Use lastDays for rolling windows, or enable incremental to collect only reviews newer than the saved timestamp. Supply incrementalStateStoreId for automatic state reuse between runs. Enable expandRegionalDomains to discover exact-name regional profiles, with maxRegionalDomains as a safety cap. maxConcurrency controls how many companies are processed in parallel.
Enable includeReviewInsights for a deterministic company digest with average rating, sentiment split, rating distribution, verified/reply percentages, languages, complaint themes, frequent negative terms, and feature-request snippets. It does not use AI or require another API key.
Content modes
companyInformationAndReviews— company profile followed by reviews.reviews— review rows only.companyInformation— one company-information row, without review requests.bulkCompanyInformation— company-information rows for every supplied domain.
Repeat runs and regional brands
For a first incremental run, enable incremental. The Actor writes the newest timestamp per company to INCREMENTAL_STATE. To make later runs reuse it automatically, point incrementalStateStoreId to a persistent Apify key-value store; the Actor reads and updates that record without exposing authentication data.
Regional discovery resolves the supplied company, searches Trustpilot for profiles with the exact normalized display name, removes duplicates, and respects maxRegionalDomains. It is disabled by default to avoid unexpected requests.
Filters and output
The Actor supports multiple companies, start page, maximum pages/reviews, star ratings, languages, reviewer countries, verified reviews, reviews with replies, an exact startDate, and presets for the last 30 days or 3/6/12 months.
Full review rows include complete text, dates, verification and source metadata, reviewer profile/avatar, company reply and response time, TrustScore, star distribution, and company metadata. compact returns essential fields, while includeRaw preserves the complete API object. Company items can include sampled reply rate, average response time, and review insights.
Local run
Copy INPUT.example.json to INPUT.json, then run:
go test ./...go run .
Local results are written to OUTPUT.json. On Apify, output is separated into Reviews, Companies, and Input errors datasets. SUMMARY, INPUT_STATUS, and INCREMENTAL_STATE are also stored in the default key-value store.
Automate it in n8n
Install n8n-nodes-apivault-trustpilot and import the ready-to-use reputation workflow. Add your Apify API credential, replace the sample company, and run it.
Build a repeatable Trustpilot review research workflow
Use this Trustpilot reviews API when you already know the company or can review a resolved brand match. Customer-support teams can inspect complaint themes and responses; researchers can export a bounded competitor sample; analysts can maintain their own dated review observations. A rating is a source observation, not independent proof that a business is trustworthy. This tool does not verify a reviewer's identity, purchases or the truth of a complaint.
| Task | Useful fields | Interpretation to preserve |
|---|---|---|
| Review a complaint sample | rating, title, text, reviewUrl | A filtered sample is not the company's overall sentiment |
| Examine company responses | hasReply, replyText, replyResponseHours | Missing replies and dates remain unknown where unavailable |
| Compare companies | companyDomain, companyTrustScore, publishedAt | Match brands and collect comparable windows before comparing |
| Export feedback to a spreadsheet | reviewId, companyDomain, reviewUrl | Retain source identity and collection time for deduplication |
| Summarize observed themes | deterministic insights and sample counts | Keyword heuristics are not a language model or audited survey |
The company dataset and Reviews dataset serve different questions. A company summary may be populated without any review rows. For analysis of individual experiences, inspect Reviews and its source links; do not count a company summary as another review. Preserve both the requested company and the resolved domain when reviewing search-based matches.
Small review-only export
{"startUrls": ["canva.com"],"contentMode": "reviews","maxReviews": 3,"maxPages": 1,"compact": true,"expandRegionalDomains": false}
Use a small first sample to check identity, dates and review URLs. compact changes the output shape; it does not remove source restrictions or reduce the per-review rate.
Company context without review collection
{"startUrls": ["canva.com"],"contentMode": "companyInformation","includeCompanyDetails": true,"includeCompanyResponseMetrics": true}
Read the named Companies output. A zero-row Reviews dataset can be expected for this mode. Company-only work still has startup and resource costs; it is not a free API request.
Bounded low-star feedback research
{"startUrls": ["canva.com"],"contentMode": "reviews","maxReviews": 5,"maxPages": 2,"filterStars": ["1","2"],"dateRange": "last30days","includeReviewInsights": true}
This is a targeted complaint sample. Fewer than five matching reviews can be correct. Report the rating/date filters, pages attempted and any source errors alongside a digest.
Review available company replies
{"startUrls": ["canva.com"],"contentMode": "reviews","maxReviews": 5,"maxPages": 2,"repliesOnly": true,"sortBy": "recency"}
Useful for examining visible response wording. A response-time estimate depends on valid review/reply timestamps; do not invent a delay for records without them.
Coverage, sampling and reliable exports
The maximum review count is a cap per company, not a promise that every requested review exists or is accessible. Native page limits, star/date/language/country filters and login walls can all reduce delivered rows. A source error after earlier pages does not invalidate the collected reviews, but it makes the run incomplete. Distinguish intentional sampling from partial source access by reading INPUT_STATUS and SUMMARY.
For repeat monitoring, keep your own reviewId-based ledger and the exact company scope. Incremental mode uses timestamps and optional saved state; it is not a full change-data-capture system. A review edited later or returned out of order may require an independent reconciliation policy. Do not enable a shared persistent state store just to try an example: it changes the next run's baseline. Regional expansion can resolve additional profiles with the same normalized brand name; it does not prove common legal ownership.
Before importing CSV into a dashboard, retain numeric ratings, original date fields, review URLs and missing-value distinctions. A reply percentage or average response time computed over the returned sample should be labelled as sampled. Do not compare two businesses using different windows as if their populations were identical. Download the selected named dataset rather than assuming the default dataset contains all record types.
Trustpilot API questions
Can I get the entire review history? A high maxReviews value does not grant access to inaccessible pages. Use the configured caps and source diagnostics to state what was actually collected.
Does company-only output consume review events? Company summaries are not paid review results in this contract. Startup and platform costs still apply; inspect current Pricing and the run's event counts.
Is the analysis an unbiased reputation score? No. Source ratings, available samples, deterministic themes and filter choices must be disclosed. The Actor does not determine fraud, authenticity or future customer satisfaction.
Can an agent run this safely? Give it one company and small limits, read the returned dataset/storage IDs, and have it report partial coverage. A successful MCP call is not proof of a complete archive. Existing n8n and Python integrations below provide alternative delivery paths; their presence is not evidence of additional source access.
n8n and developer integrations
Use this Actor in your automation or application with the existing community integrations below. An Apify account and API token are required; Actor and platform charges follow the current pricing.
- n8n community node: n8n-nodes-apivault-trustpilot. Install package name
n8n-nodes-apivault-trustpilotin a self-hosted n8n instance that permits community packages. - Python client and examples: GitHub.
- n8n source and usage: GitHub.
- n8n source and usage: GitHub.
These are community packages. Publication on npm does not establish n8n verification or availability in n8n Cloud. Review the linked package README for supported inputs and setup.
Complete input reference
All 31 published input fields are listed below. Defaults are the schema defaults used by the input interface; explicitly send important options in API/MCP calls rather than assuming every client fills them. Console prefill is an example, not an API default. Limits apply per target unless stated otherwise.
First run — company and limits
| Parameter | Type / allowed values | Schema default | Behavior and dependencies |
|---|---|---|---|
startUrls | array | not declared | Company domains, website URLs, Trustpilot company/review/user/search URLs, or brand names. At least one item here or in searchTerms is needed. Prefer an exact company profile to avoid brand ambiguity. The Console example is Canva; API calls without a target do not automatically select Canva. |
maxReviews | integer (0–1000000) | 20 | Matching reviews per target, not per run; 0 removes only the review-count cap. maxPages, filters and public access still limit results. More targets or higher limits can increase review events and resource use. |
maxPages | integer (1–10000) | 3 | Source pages per target, starting at startPage. Collection can stop earlier at the count limit or end of accessible results. Raising this value cannot bypass a login wall. Company-only mode returns after profile collection. |
contentMode | string: companyInformationAndReviews, reviews, companyInformation, bulkCompanyInformation | "companyInformationAndReviews" | companyInformationAndReviews collects both datasets; reviews suppresses company rows; companyInformation and bulkCompanyInformation collect company profiles without review rows. Bulk mode still uses the supplied targets. Company summaries use a separate dataset. |
Company-name search (optional)
| Parameter | Type / allowed values | Schema default | Behavior and dependencies |
|---|---|---|---|
searchTerms | array | [] | Additional brand/company-name targets, merged with startUrls and deduplicated after normalization. Each search resolves a matching company rather than returning every search result. Prefer exact URLs when the brand name is ambiguous. |
strictNameMatch | boolean | false | For company-name resolution, reject results without a normalized name match. Matching is heuristic, not legal-entity verification. Does not restrict a supplied exact domain. |
Review filters and sampling (optional)
| Parameter | Type / allowed values | Schema default | Behavior and dependencies |
|---|---|---|---|
dateRange | string: all, last30days, last3months, last6months, last12months | "all" | all, last30days, last3months, last6months, or last12months. Filters review publication time. Combined date filters use the latest cutoff, not an override hierarchy. |
lastDays | integer (0–36500) | 0 | Rolling publication cutoff in days, recalculated at run time. 0 disables this filter. Combined with dateRange, startDate and active incremental state using the latest cutoff. |
startDate | string | "" | YYYY-MM-DD publication cutoff at UTC midnight; empty disables it. A malformed date is ignored by the runtime, so validate dates before calling. A later rolling or saved-state cutoff still applies. |
filterStars | array | [] | String values 1, 2, 3, 4, 5; empty includes all ratings. Applied together with other filters. Filtering can return fewer than maxReviews within maxPages. |
sampling | string: balanced, proportional | "proportional" | proportional keeps the collected source selection; it does not guarantee a statistically representative sample. balanced round-robins available ratings in order 1,5,2,4,3 before final date sorting. With no star filter it may collect up to max(100, maxReviews × 5) candidates within maxPages. It cannot produce absent ratings. |
filterLanguages | array | [] | Language codes such as en or de; empty allows all languages. Filters the review language, not the reviewer country. All selected filter categories must match. |
filterCountries | array | [] | Reviewer country codes such as US or DE; empty allows all. This filters reviewer location, not company country. Missing country information cannot satisfy a selected country filter. |
verifiedOnly | boolean | false | Keep only reviews carrying a verified marker from Trustpilot. This is a source label, not independent verification by this Actor. |
repliesOnly | boolean | false | Keep only reviews containing a company reply. This can reduce the sample and require more accessible pages to reach the requested limit. |
Output and sample insights (optional)
| Parameter | Type / allowed values | Schema default | Behavior and dependencies |
|---|---|---|---|
includeCompanyDetails | boolean | true | Controls separate Companies rows when collecting reviews. Omitted is treated as enabled; false suppresses them in combined mode. reviews mode suppresses them regardless; company-only modes force a company row. |
includeCompanyResponseMetrics | boolean | true | Adds responseMetrics to company rows. Computed over the collected review sample, not the entire company history. No effect when no company row is written. The schema default is true; raw runtime input that omits this boolean leaves it false. Send true explicitly when needed. |
includeReviewInsights | boolean | true | Adds deterministic reviewInsights to company rows: rating/sentiment mix, languages and text heuristics. No AI call or separate insight event. No effect without company output. The schema/Console default is true; a raw runtime input omitting this boolean leaves it false, so agents should send true explicitly when needed. |
emitInputStatus | boolean | true | Writes invalid, failed, partial and no-review diagnostics to Input errors and INPUT_STATUS. Omitted is treated as true. false suppresses those records; SUMMARY remains essential for checking delivery. |
compact | boolean | false | Keep essential review columns. It does not change review count or per-review event rates. includeRaw can still append raw data. |
includeRaw | boolean | false | Append the normalized source review object under raw. Its shape depends on the available source; do not rely on a fixed mobile-API payload. Increases row size, not the review-event count. |
Pagination and performance (advanced)
| Parameter | Type / allowed values | Schema default | Behavior and dependencies |
|---|---|---|---|
startPage | integer (1–10000) | 1 | First requested source page. Use 1 for a first run. Together with maxPages this defines a bounded page window, not a durable resume cursor. |
sortBy | string: auto, recency, relevance | "auto" | auto and recency request newest reviews; relevance requests source relevance where supported. Compatibility paths may fall back to recency. Exported review rows are finally sorted by publication time, so this is source selection rather than a promised output ordering. |
maxRetries | integer (0–8) | 3 | Retries for retryable requests. Although the schema allows 0, the current runtime normalizes 0 to 3; use 1–8 for an explicit nonzero count. Retries can increase time and resource use; they do not bypass access restrictions. |
timeout | integer (10–180) | 45 | Per-request timeout in seconds, not the total Actor run timeout. Set the overall run timeout and spend cap separately in your client or Console. |
maxConcurrency | integer (1–20) | 3 | Parallel target workers, 1–20. Higher concurrency can increase rate limiting and resource use; it does not increase review/page caps. |
Repeat runs and regional profiles (advanced)
| Parameter | Type / allowed values | Schema default | Behavior and dependencies |
|---|---|---|---|
incremental | boolean | false | When true, exclude reviews at or before the saved publication timestamp for each domain (consumer profiles use consumer:USER_ID). Without prior state, the first run is a baseline. Timestamp tracking is not an exact review-ID ledger and can miss backdated or same-timestamp reviews; use sufficient limits. |
incrementalStateStoreId | string | not declared | Existing persistent Apify key-value store with READ/WRITE permission, used only when incremental is true. Reads and updates INCREMENTAL_STATE. Missing/unreadable state stops the run rather than silently rebilling history. Use a store you control; never copy another run storage ID. |
incrementalState | object | {} | Manual map of domain (or consumer:USER_ID) to RFC3339 latest publication timestamp. Used for filtering only with incremental true. When a persistent store is also supplied, the later timestamp per key wins. Read the new INCREMENTAL_STATE record for the next call; an ordinary new run store is not automatic cross-run persistence. |
expandRegionalDomains | boolean | false | Optional discovery of same-name regional company profiles. Discovery depends on source availability and can leave only the original target; it is not guaranteed coverage of all countries. Additional profiles can increase review events. Keep false for the first run. |
maxRegionalDomains | integer (1–100) | 10 | Cap on discovered profiles per brand when regional expansion succeeds. Ignored when expandRegionalDomains is false. Direct review and consumer-profile targets are not expanded. |
Interpret the result before automating
The default dataset contains review rows; company profiles and sample statistics are separate Companies rows. A company-only run can legitimately return zero review rows. SUMMARY.totalReviews is delivered review count, while company profile totalReviews is the source-wide count; neither proves all history was collected. Inspect failedCompanies, partialCompanies, writeErrors and INPUT_STATUS. A successful run status alone does not prove complete collection. Errors are diagnostics rather than paid review rows. Startup and platform costs can still apply when no reviews match.
Missing source values may be null, empty, or absent; do not convert them to a confirmed zero. hasReply: false describes the collected review. Sample metrics can contain zero when no reviews/replies were sampled: that does not establish a company-wide zero reply rate. Deterministic themes and sentiment are heuristics over the returned sample, not verified findings about the company.
For agents: fetch the current Actor input schema (and MCP tools/list wrapper) before building arguments, send exact field names and explicit limits, keep the returned run ID, wait/poll that run until terminal, then read its dataset and diagnostic records. A client timeout is not a reason to automatically start another paid run. Retry only after checking the existing run and correcting the cause.