Trustpilot Reviews Scraper | Ratings & Replies avatar

Trustpilot Reviews Scraper | Ratings & Replies

Pricing

from $0.10 / 1,000 delivered reviews

Go to Apify Store
Trustpilot Reviews Scraper | Ratings & Replies

Trustpilot Reviews Scraper | Ratings & Replies

Scrape public Trustpilot reviews, star ratings, company replies and company data. Filter by language, rating and date; export JSON/CSV for customer feedback analysis and reputation monitoring.

Pricing

from $0.10 / 1,000 delivered reviews

Rating

0.0

(0)

Developer

tingyou333 zhuang

tingyou333 zhuang

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Scrape public Trustpilot reviews, star ratings, company replies and company data. Filter by language, rating and date; export JSON/CSV for customer feedback analysis and reputation monitoring.

Useful for: Review customer complaints; compare company responses; monitor recent reviews by rating and language.

Why choose this Actor: Select ratings, languages and publication boundaries before exporting reviews with company context. Source coverage reports make partial collection visible.

Try a small sample

  1. Click Try for free, then open Input and switch to JSON.
  2. Paste the example below and click Start. It uses a small result limit.
  3. Open the dataset to inspect results, then export JSON, CSV or Excel. Source restrictions can still cause partial or failed runs.
{
"companyUrls": [
"pipedrive.com"
],
"maxReviewsPerCompany": 20,
"languages": [
"all"
],
"sort": "recency",
"includeCompanyInfo": true
}

Cost at a glance

Primary billing unit: Delivered review. Rates below are per 1,000 primary events.

Free planStarter / BronzeScale / SilverBusiness / Gold and higher
$0.3$0.27$0.22$0.1

Platform compute, proxy, transfer and storage are additional. Other event types, where enabled, are listed in the Pricing tab. “Try for free” uses available account credits; it does not make usage unlimited or unmetered.

Coverage to know: Complete historical coverage is not guaranteed. Source totals and filtered feeds can disagree; inspect coverage warnings before treating an export as exhaustive.

Guides and full reference

Collect public reviews, reviewer information, company replies and company metadata from Trustpilot. Export JSON or CSV and use the Actor from the Apify API or scheduled tasks. No personal account or browser cookies are required.

Bounded cloud collection and delivery-billing tests have passed. Public-source access limits apply; complete historical coverage is not guaranteed. This Actor is not affiliated with Trustpilot.

Use a domain or an HTTPS trustpilot.com/review/... company URL. Limits apply separately to each company and count matching reviews delivered to the dataset. Query parameters in a company URL are ignored: set the corresponding input fields explicitly.

Input reference

InputDefaultBehavior
companyUrlsRequiredNonempty array of domains or Trustpilot company URLs. Exact duplicate inputs are removed.
maxReviewsPerCompany0Maximum matching reviews per company; zero means no result cap. Set a cap for an initial trial.
stars[]Any of "1" through "5", as strings. Empty means all ratings.
languages[]Empty preserves the website language default, commonly English. ["all"] requests all languages; individual language codes select those languages.
sort"recency""recency" or "relevance", as ordered by the source.
date""All dates, or last30days, last3months, last6months, last12months. Source applies these relative windows.
publishedAfterUnsetStrictly newer than this ISO date or timestamp. A date means midnight UTC; timestamps must contain a timezone.
verifiedfalseRequests the source's verified feed. Output eligibility accepts verified/invited review labels; reviewer identity verification is separate.
withRepliesfalseOnly reviews with a company reply.
includeCompanyInfotrueInclude company fields alongside each review.

For multiple requested languages, the Actor reads the all-language feed and filters the union locally, preserving source order. This can fetch substantially more reviews than it returns. With recency sorting, publishedAfter stops pagination after the first fetched page reaches the exact publication cutoff. Observed publication dates must be nonincreasing within and across fetched pages; otherwise the target fails. Relevance sorting scans the selected feed because that order cannot establish a time boundary. Use a source date window where appropriate to reduce work.

Output fields

GroupFields
ReviewreviewId, reviewUrl, title, text, rating, publishedDate, experienceDate, updatedDate, language, likes, source
Review verificationverificationLevel, isVerified
ReviewerauthorName, authorId, authorImage, authorReviewCount, country, authorIsVerified
ReplyreplyMessage, replyPublishedDate, replyUpdatedDate
CompanycompanyName, companyDomain, companyTrustScore, companyStars, companyTotalReviews, companyCategories, companyUrl, companyId
Additional source fieldssubmittedDate, sameCompanyReviewCount

Unavailable source values remain null. Company fields are omitted when includeCompanyInfo is false. companyTrustScore is the numeric score; companyStars is the displayed star value and can differ. authorIsVerified does not establish that a review is verified.

Four dataset views display Reviews, Authors and verification, Company replies, and Company metadata. JSON export contains all fields, regardless of the selected table view.

Example review record

A frozen example from the private cloud probe epbvRwqm6BefjIJCY; company totals and replies can change later.

{
"reviewId": "6a9803f1574b106456ec6975",
"reviewUrl": "https://www.trustpilot.com/reviews/6a9803f1574b106456ec6975",
"title": "The meeting was really helpful",
"text": "The meeting was really helpful and Rafael very easy to talk to. I got good advice and look forward for our next session. ",
"rating": 5,
"publishedDate": "2026-09-02T13:09:37.000Z",
"experienceDate": "2026-09-02T00:00:00.000Z",
"updatedDate": null,
"language": "en",
"likes": 0,
"verificationLevel": "invited",
"isVerified": false,
"source": "BasicLink",
"authorName": "Marian Seppälä",
"authorId": "6a9803e3452b16209f4da30a",
"authorImage": "https://user-images.trustpilot.com/6a9803e3452b16209f4da30a/73x73.png",
"authorReviewCount": 1,
"country": "SE",
"replyMessage": "Hi Marian,\n\nThank you for sharing your feedback!\n\nWe’re glad to hear that you found the meeting helpful and that the team made the session easy and comfortable. \nIt’s great to know that you received useful advice and are looking forward to the next session.\n\nBest regards,\nPipedrive Team",
"replyPublishedDate": "2026-09-02T13:19:01.000Z",
"replyUpdatedDate": null,
"authorIsVerified": false,
"submittedDate": null,
"sameCompanyReviewCount": 1,
"companyName": "Pipedrive",
"companyDomain": "pipedrive.com",
"companyTrustScore": 4.4,
"companyStars": 4.5,
"companyTotalReviews": 3447,
"companyCategories": [
"Business to Business Service",
"CRM Provider",
"Software Company"
],
"companyUrl": "https://www.trustpilot.com/review/pipedrive.com",
"companyId": "514581950000640005241c4f"
}

Counts, limits and failures

The OUTPUT key-value-store record provides per-company delivered/fetched counts, page counts, actual source filters, source totals, limit/exhaustion status and failedTargets. Source filteredTotal and profile companyTotal measure different populations. For a language union, filteredTotal describes the all-language feed read, not just the delivered languages. Exhausting a selected feed does not prove every review counted on the company profile is publicly accessible.

The Actor validates company identity, pagination counts, applied filters, duplicate IDs and cross-page consistency. A changing source total or inconsistent page fails the target rather than claiming complete history. Only a www. domain alias is accepted automatically; other identity changes are rejected.

Network timeouts, connection resets and HTTP 429/500/502/503/504 receive at most one retry per page, sharing a two-navigation budget with query-redirect recovery. Invalid input and inconsistent data are not treated as empty results. HTTP 404 fails immediately. Challenges that do not clear through normal loading time out; there is no CAPTCHA solver.

A failed company does not discard earlier successful companies or already delivered reviews. Inspect failedTargets even if the run status is SUCCEEDED. All-company failure makes the run fail. A genuine empty selected feed succeeds with zero reviews.

API example

Store your Apify token in an environment variable; never put it in the Actor input.

curl --request POST \
--header "Authorization: Bearer $APIFY_TOKEN" \
--header 'Content-Type: application/json' \
--data '{"companyUrls":["pipedrive.com"],"maxReviewsPerCompany":20}' \
'https://api.apify.com/v2/acts/peerless_columbine~trustpilot-reviews-data-scraper/runs'

The response contains the run ID and dataset ID. Poll /v2/actor-runs/{runId} until terminal, retrieve /v2/datasets/{defaultDatasetId}/items, and inspect the default key-value store's OUTPUT record for completeness and failures. Use your own Apify account and API token.

Verification and current limits

Bounded cloud tests cover Pipedrive combinations of star/date/language/reply filters, multi-page acquisition, verified/relevance sorting, genuine empty results, multiple companies and www redirects. A German/French union delivered four matching reviews after fetching 180 reviews across nine pages. These examples do not establish a general success-rate or cost advantage.

Input and principal output names target compatibility with automation-lab/trustpilot build 0.1.46. Exact paid-run value parity has not been established. Transient retry fault tests are local; cloud failure/recovery coverage is still being expanded. Owner PPE cap/empty tests pass; customer settlement, full cost comparison and broader workload validation remain pending. No revenue or universal competitor superiority is claimed.

Pricing

Delivered reviews per 1,000: Free $0.30; Bronze $0.27; Silver $0.22; Gold $0.10; Platinum $0.10; Diamond $0.10. Platform usage is additional. No custom start event fee; even zero-result runs may incur platform usage. This replaces the earlier internal $0.003 startup draft. Owner cloud tests verified two delivered rows/two events at the event cap and zero review events for empty results. Owner tests do not establish customer settlement.

When the event budget is exhausted, the Actor stops delivering, marks budgetReached, and lists unstarted companies under skippedTargets. This is a partial result, not an exhausted feed.

When cursorReached is true, the run reached the requested publication boundary; it did not exhaust all historical reviews. Reviews at the exact timestamp are excluded. This does not detect edits to reviews published before the cursor.

Python client example

Use the apify-client package. The iterator handles dataset pagination; checking the run and diagnostics prevents silently treating a partial run as complete.

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("peerless_columbine/trustpilot-reviews-data-scraper").call(
run_input={"companyUrls": ["pipedrive.com"], "maxReviewsPerCompany": 20}
)
if run is None or run["status"] != "SUCCEEDED":
raise RuntimeError("Actor did not complete successfully")
record = client.key_value_store(run["defaultKeyValueStoreId"]).get_record("OUTPUT")
summary = record["value"]
if summary["failedTargets"] or summary.get("budgetReached"):
raise RuntimeError(f"Partial run: {summary}")
for review in client.dataset(run["defaultDatasetId"]).iterate_items():
print(review["reviewId"], review["rating"], review["text"])

The requested result cap can intentionally produce a partial historical feed even when no target failed. Use each target's limitReached, cursorReached and exhaustedSelectedFeed fields to distinguish these outcomes. Configure schedules and integrations in Apify Console; they are platform features, not custom notification logic in this Actor.

Known source login limit

A cloud run of the last12months Pipedrive feed was redirected to Trustpilot login on page11 after200 delivered reviews, although the selected total was398. This run failed with partial data; complete long-history extraction is not verified. Login redirects stop the target without retry or personal credentials. Previously verified complete6-page/4-page feeds remain bounded evidence, not a guarantee of unrestricted history.

Delivery counts use the SDK accepted count for priced review events. Reviews rejected by the event budget do not increase rowsSaved. Free or zero-priced writes can still save records. A positive automatic dataset-item fee alongside the review fee is rejected to prevent duplicate charges. An uncertain write is reported as a target failure and is not automatically replayed. These controls do not remove the documented source-access limits.

Repeated company inputs are merged after domain normalization, including the equivalent www alias. The first submitted form is retained, so entering both example.com and www.example.com does not create two crawls or duplicate review charges. Other subdomains remain separate targets. This uses the same company-identity rule as source-page validation.

Reading completion and failure reports

The Source counts, limits and failed targets output opens the native key-value record list. Open OUTPUT for per-company delivery counts, parsed source pages, fetched reviews, limits, budget stops and failures. The raw API record remains /v2/key-value-stores/{storeId}/records/OUTPUT.

pagesFetched counts successfully parsed source pages even if later continuity, filtering or delivery validation fails. Failed targets also retain reviewsFetched; these counts do not mean those reviews were delivered or the source was complete. If both the requested result cap and event budget are reached on the same review, limitReached and budgetReached are both true. Inspect skippedTargets for companies not started after the budget stop.

Measured customer-cost examples

The default run limit is 900 seconds with 1,024 MB of memory. Console/API overrides take precedence. A longer timeout does not solve source login restrictions.

The table reprices measured private-run resource quantities using the public platform tariffs and our current Bronze result fee ($0.27 per 1,000 delivered reviews, no custom start fee). It includes compute, transfers and run storage operations; it is not a customer invoice. Historical samples may precede the active fee configuration.

Observed workloadDelivered reviewsResult feePlatform resourcesModeled total
One complete selected three-month feed109$0.029430$0.002901$0.032331
One complete selected German-language feed78$0.021060$0.002521$0.023581
Multiple-language filter sample4$0.001080$0.002313$0.003393
Two reviews, stopped at event budget2$0.000540$0.001404$0.001944

These examples exclude monthly plan commitment, taxes, post-run downloads and time-based retention. Source size, filters, retries and runtime versions can change costs. A sparse language filter can fetch substantially more than it delivers; an event budget does not cap platform-resource spending. No uniform cost per 1,000 reviews, unrestricted-history support or future savings guarantee follows from these samples.

Public star-feed coverage

For chronological requests above200 results (or unlimited), when the source reports more than200 matching reviews, this version merges the five public star-filter lists by publication time. It retains all original filters, checks ordering and duplicates, and never requests beyond the exposed ten-page anonymous range of any individual list. If one required list still exceeds that range, coverage remains blocked; unrestricted history is not promised.

The source can report a different total on its unfiltered landing than the sum of its star-filter lists. Valid rows are retained, but sourceTotalsConsistent=false, exhaustedSelectedFeed=false, and a warning make clear that global completeness is unverified. partitionTotal and exhaustedPartitions describe only those independently fetched lists. A bounded result is not complete history even when the requested result limit is met.