You want to know what customers say about your company, or about five competitors, and Trustpilot holds the answer in hundreds of reviews spread across dozens of pages. Copying them into a sheet by hand takes an afternoon, and you would have to do it again next month. What you need is a table: one row per review, plus one row per company with its TrustScore and star breakdown.
The Trustpilot Reviews and TrustScore Scraper, published by Hay Equipos on the Apify Store, takes a list of company domains and returns exactly that. Reviewer names, profile pictures and profile links are never collected, so you get the opinion without the personal data.
What you get back
Every row has a type field: review, company or error. The dataset has two ready made views (Reviews and Company summaries) that you can download separately.
A review row (illustrative values):
{
"type": "review",
"companyDomain": "www.example-shop.com",
"companyName": "Example Shop",
"reviewId": "66f0c2a1b3e4d5f6a7b8c9d0",
"reviewUrl": "https://www.trustpilot.com/reviews/66f0c2a1b3e4d5f6a7b8c9d0",
"rating": 2,
"title": "Slow delivery",
"text": "The order arrived nine days late and support took a week to answer.",
"language": "en",
"reviewerCountry": "US",
"publishedDate": "2026-09-20T10:12:00.000Z",
"experiencedDate": "2026-09-08T00:00:00.000Z",
"isVerified": true,
"likes": 0,
"companyReply": {
"text": "Sorry about the delay, we have contacted you by email.",
"publishedDate": "2026-09-22T14:30:00.000Z"
}
}
A company summary row:
| companyDomain | trustScore | totalReviews | oneStar | fiveStars | replyPercentage |
|---|---|---|---|---|---|
www.example-shop.com |
3.9 | 1240 | 180 | 760 | 42 |
www.example-rival.com |
2.1 | 515 | 290 | 120 | 0 |
The summary row also includes reviewsLast12Months, the full star distribution, reviewsMatchingFilters, review counts per language, categories, country code, whether the profile is claimed, and the average days to reply. A domain with no Trustpilot page comes back as an error row instead of breaking the run.
Step by step in the Apify Console
- Open the actor on the Apify Store (link at the end) and click Try for free.
- In Company domains, add one domain per line, written as Trustpilot lists it. For
trustpilot.com/review/www.bestbuy.com, that iswww.bestbuy.com. Pasting the whole Trustpilot link also works. - Set Maximum reviews per company (default 100, newest first). Set it to 0 if you only want the TrustScore summary.
- Keep Include company summary on to get one summary row per company.
- Optional filters: Review language (a two letter code such as
en, orall), Star ratings, Date range (last 30 days, 3, 6 or 12 months), Verified reviews only and Reviews with a company reply only. - Click Start, then export from the Output tab as CSV, Excel or JSON.
Example input that pulls recent complaints for two companies:
{
"companyDomains": ["www.bestbuy.com", "www.zappos.com"],
"maxReviewsPerCompany": 200,
"stars": ["1", "2"],
"dateRange": "last6months"
}
Calling it from code
The actor id is pistachio_implementation/trustpilot-reviews-company-scores. Store your token in APIFY_TOKEN.
curl, run and get results in one request:
curl -X POST \
"https://api.apify.com/v2/acts/pistachio_implementation~trustpilot-reviews-company-scores/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"companyDomains": ["www.zappos.com"], "maxReviewsPerCompany": 50}'
Python with apify-client:
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("pistachio_implementation/trustpilot-reviews-company-scores").call(
run_input={
"companyDomains": ["www.bestbuy.com", "www.zappos.com"],
"maxReviewsPerCompany": 0, # summaries only
"includeCompanySummary": True,
}
)
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
if row["type"] == "company":
print(row["companyDomain"], row["trustScore"], row["totalReviews"])
elif row["type"] == "error":
print("skipped", row["companyDomain"], row["error"])
Schedule that script weekly and you have a TrustScore tracker for your brand and your competitors.
Pricing
Pay per event, no subscription:
- $3.00 per 1,000 reviews ($0.003 per review)
- $0.005 per company summary
- Error rows (company not on Trustpilot, page could not load) are free
You can set a maximum cost per run in the run options. The actor stops cleanly when that amount is reached.
Limits and what it does not do
- Trustpilot shows visitors who are not logged in at most 10 pages (200 reviews) of any one listing. The actor never logs in. To reach further it reads several listings for the same company (each star level, each review language, verified only, replied only) and removes duplicates. For small and mid sized companies you normally get every review. For very large companies you get the newest reviews across star levels and languages, not the full history. In one test it collected 1,094 unique reviews for a company with over 7,000.
- Speed is roughly 200 to 300 reviews a minute, with polite pauses between pages. It runs a real headless browser, so it needs at least 1 GB of memory.
- Review text is kept as written and may itself mention names. Only the reviewer identity fields are left out.
- When a reviewer leaves the title empty, Trustpilot builds one from the first words of the text, so some titles end in "…". The full text is always in
text. - Only public pages are read. No account, no login. A proxy option exists but is not needed in most cases.
Please use the reviews you collect in line with Trustpilot's terms.
Try it on the Apify Store: https://apify.com/pistachio_implementation/trustpilot-reviews-company-scores
Top comments (0)