Trustpilot Reviews scraper artworkCompany reviews & replies

Trustpilot Reviews Scraper.

Collect the public Trustpilot reviews of your company and its competitors. Read the complaints, the praise and how each company replies, then schedule a run to catch every new review.

Run on Apify

Ways to use this scraper.

Try these examples for marketing, growth and competitor research.

01

Track complaints about your own brand

Run a weekly collection with Published since set to 7 days. Group the 1- and 2-star reviews by topic, such as delivery, returns or customer service, and share the list with the team that can fix it.

Keep a dated complaint log with review links and the topic you assigned.

02

Compare competitors before a campaign

Collect recent reviews of three competitors. Note what their customers praise and what they complain about, then look for problems your product solves better.

Write a positioning brief that quotes reviews and links to each source.

03

See how companies reply to criticism

Check which negative reviews received a reply and how long it took. Compare your reply rate with competitors and pick examples of good responses.

Keep a reply benchmark with the reply text and dates for each company.

FROM FIRST RUN TO REPEATABLE WORKFLOW

Your first run, step by step.

  1. Open the Actor on Apify, select its Input tab and switch to the JSON editor if you want to paste a configuration.
  2. Replace gymshark.com with your own company’s website, or with a competitor’s. A website is the clearest target; use a name only when you don’t know the domain.
  3. Keep maxReviewsPerCompany at 100 for the first run and leave the filters empty. Check the reviews and the company fields, then add star, language or date filters.
  4. Start the run and watch the log. Check which targets and filters were actually read before assuming an empty result means nothing exists.
  5. Open Storage → Dataset, inspect several records and export JSON for nested data or CSV for a first spreadsheet review.
First-run configuration
{
  "companies": ["gymshark.com"],
  "maxReviewsPerCompany": 100
}

Paste this into the Actor’s JSON input editor. Replace the example targets with yours before running.

Check the current input form on Apify

Choose how to search.

Give the scraper a company website, a Trustpilot link or a company name. Websites and links point to one profile; names can match several. Filters for stars, language, date and verification narrow the reviews before they are collected.

Search methodWhen to use itWhat changes
Website domainsWhen to use itYou know the exact entity you want to collect.What changesA website such as gymshark.com finds the company’s one Trustpilot profile. It is the most reliable target for a watchlist.
Trustpilot linksWhen to use itYou already configured the search on the source website.What changesA Trustpilot page from any country gives the same company. Filters in the link, such as stars=1 or languages=de, are kept.
Company namesWhen to use itYou want to find relevant results before choosing specific targets.What changesA name such as Gymshark reads every Trustpilot profile listed under it, which can include regional sites or similarly named companies. Check company_domain in the results.

The difference that matters

Trustpilot shows a signed-out visitor 200 reviews per view, and each star rating and language is its own view. The scraper reads every view, so most companies come complete. For the largest brands, busy views give their newest 200; schedule a run with dateFrom to collect every new review from then on.

Compare the related scraper

Every input, explained.

Use the exact field names below in JSON. In Apify’s form, enter list items separately, choose filters, and keep numbers and booleans in their proper types.

Default and prefill are different. A default applies when you omit a setting; a prefill is an example already entered in Apify’s form. Review prefilled targets and limits before every run. Some settings have no schema default. You still need to supply at least one supported target.

Targets and search inputs1
companies
ListForm prefill: ["gymshark.com"]

One company per line: its website (gymshark.com), its Trustpilot page from any country’s Trustpilot, or its name. A pasted Trustpilot link keeps its own star and language filters. A name reads every profile Trustpilot lists under it.

Markets, dates and filters4
stars
List

Only reviews with these star ratings, as strings from 1 to 5. Select 1 and 2 for negative reviews. Empty means every rating.

languages
List

Only reviews written in these languages, as codes or names such as en, de or French. Each language is a separate view on Trustpilot, which can also help large companies return more reviews. Empty means every language.

dateFrom
Text

Only reviews published on or after this date. Use YYYY-MM-DD or a relative period such as 30 days or 6 months. With a daily or weekly schedule, a relative date collects only what is new.

verifiedOnly
True or falseDefault: false

Keeps only reviews Trustpilot marks as verified. Leave it off for a full picture, since many genuine reviews are not verified.

Limits, details and proxies3
maxReviewsPerCompany
IntegerForm prefill: 100

The newest this many reviews of each company. Start with 100. Empty means every review a signed-out visitor can read.

maxReviews
Integer

A hard cap on reviews across the whole run, for every target together. Use it to limit runtime and cost. Empty means no overall cap; the per-target limit still applies.

proxyConfiguration
ObjectDefault: {"useApifyProxy":true,"apifyProxyGroups":["RESIDENTIAL"],"apifyProxyCountry":"US"}Form prefill: {"useApifyProxy":true,"apifyProxyGroups":["RESIDENTIAL"],"apifyProxyCountry":"US"}

The US residential proxy is the working default. Trustpilot lets a browser through on a residential exit, and other settings fall back to it when Trustpilot refuses them.

Advanced settings and recovery2
resume
True or falseDefault: true

Saves progress about every 30 seconds so an Apify restart or migration can continue the current run. Leave it on for normal use.

continueFromLastRun
True or falseDefault: false

Continues unfinished work from the previous run with matching input. Earlier results remain in that run’s dataset. Keep false for a fresh collection or a recurring snapshot.

This reference follows the Actor’s published input fields. Check the live form before changing a production workflow. Check the current input form on Apify.

Configurations you can copy.

Each example is a separate run. Start small, inspect the results, then increase coverage. Update the targets, countries and dates to match your question.

Collect new reviews every week

Schedule this weekly. dateFrom set to 7 days collects only the reviews published since the last run, so nothing new is missed even for large brands.

Collect new reviews every week
{
  "companies": ["gymshark.com"],
  "dateFrom": "7 days",
  "maxReviewsPerCompany": 500
}

Compare competitors’ negative reviews

Collect 1- and 2-star English reviews from the last 90 days for three companies, up to 200 each. Group the complaints by topic to see where each competitor falls short.

Compare competitors’ negative reviews
{
  "companies": ["gymshark.com", "nike.com", "adidas.com"],
  "stars": ["1", "2"],
  "languages": ["en"],
  "dateFrom": "90 days",
  "maxReviewsPerCompany": 200,
  "maxReviews": 600
}

Read verified reviews from other markets

Collect verified German, French and Spanish reviews of one company. Each language is its own Trustpilot view, so this also reaches reviews that an all-language run of a large brand can cut short.

Read verified reviews from other markets
{
  "companies": ["gymshark.com"],
  "languages": ["de", "fr", "es"],
  "verifiedOnly": true,
  "maxReviewsPerCompany": 300
}

Run, check, export, repeat.

Expect one row per review with its rating, text, dates, reviewer and the company’s reply, plus the company’s TrustScore and review count. The run’s SUMMARY record shows how many reviews Trustpilot lists for each company and how many were collected. Each company’s full profile is saved as the COMPANIES record in the key-value store.

  1. Check the dataset and the run’s SUMMARY record. Compare the number collected with your cap, inspect failed or skipped inputs, and verify a few original source links.
  2. Keep the original IDs and add collected_at and run_id when saving results. Export CSV for flat columns; retain JSON when arrays or nested details matter.
  3. Save the tested configuration as an Apify Task and schedule it. For repeated snapshots, leave continueFromLastRun false. Deduplicate new records by source ID while retaining each observation date.
  4. In Make or n8n, wait for a successful run, fetch its dataset and map fields into Sheets or your warehouse. Send records to Looker Studio through a reporting table; use dbt to flatten and test warehouse models.
  5. The same JSON works with Apify’s Actor API. In Claude with Apify MCP, name this Actor, ask it to inspect the live schema, and give explicit targets, markets and result limits before it runs.

Resume is not a fresh snapshot

resume protects the current run if Apify restarts it. continueFromLastRun continues an earlier run with the same configuration; earlier records stay in the earlier dataset. Combine both datasets for the complete collection, and raise a previously reached result cap when continuing. Start fresh when you want to see what changed today.

Follow the Sheets, Claude, Looker and BigQuery setup guides
Run this Actor from the API

Save one configuration above as input.json. Set APIFY_TOKEN to your Apify API token in your terminal, then send the file as the request body.

Start the run
curl --fail-with-body --request POST \
  --url "https://api.apify.com/v2/actors/jmlp~trustpilot-reviews-scraper/runs" \
  --header "Authorization: Bearer $APIFY_TOKEN" \
  --header "Content-Type: application/json" \
  --data-binary @input.json

The response contains a run ID and defaultDatasetId, not finished results. Wait for the run to succeed, set DATASET_ID to that dataset ID, then fetch its items. For large datasets, use limit and offset to page through the export.

Fetch the dataset
curl --fail-with-body \
  --url "https://api.apify.com/v2/datasets/$DATASET_ID/items?format=json" \
  --header "Authorization: Bearer $APIFY_TOKEN"

Apify’s run and export API reference
Dataset export options

When the results look wrong.

Change one setting at a time, keep a small cap, and check the run summary before scaling up.

A large brand returned fewer reviews than Trustpilot lists.

Trustpilot shows a signed-out visitor 200 reviews per view, and each star rating and language is its own view. The scraper reads every view, so most companies come complete. For the largest brands, busy views give their newest 200; schedule a run with dateFrom to collect every new review from then on.

The reviews belong to a different company.

A name such as Gymshark reads every Trustpilot profile listed under it, which can include regional sites or similarly named companies. Check company_domain in the results.

The source keeps returning empty pages or access errors.

The US residential proxy is the working default. Trustpilot lets a browser through on a residential exit, and other settings fall back to it when Trustpilot refuses them.

The run succeeded but returned nothing

Success means the Actor finished handling the request, not that the source returned data. Check SUMMARY.inputProblem, SUMMARY.problem and the log for missing targets, unsupported filters or refused requests. Test one known target with fewer filters.

Fewer records than expected

Check the global limit, per-search or per-page limits, platform coverage and deduplication. Several searches can find the same record. A source’s headline count can include records the public endpoint does not return. Review unfinished jobs before treating the dataset as complete.

Use the results in your tools.

Google Sheets

Append review_id, company, rating, published_at, reviewer country and reply status. Add columns for topic and owner, then filter the 1- and 2-star reviews each week.

Read the setup
Claude + MCP

Ask Claude to group complaints and praise by topic, quoting review_url for each example. Have it separate what customers wrote from its own suggestions.

Read the setup
Looker Studio

Chart average rating and review volume by week and company. Add filters for star rating, language and reply status, and show the collection date.

Read the setup
BigQuery + dbt

Keep reviews keyed by review_id with the collection time. Store company snapshots, such as TrustScore and review count, in a separate dated table.

Read the setup
Copy a prompt for Claude
Prompt for Claude + Apify MCP
Inspect jmlp/trustpilot-reviews-scraper, then collect up to 200 reviews of gymshark.com published in the last 90 days. Group the complaints and praise by topic, quote the review_url for each example, and report the share of negative reviews that received a reply. Do not treat the reviews as a representative customer survey.

The fields you’ll get.

Keep the collection time and original IDs with your records. You’ll need them to check where a result came from or compare it with a later run.

Before you draw conclusions

Trustpilot shows a signed-out visitor 200 reviews per view of a company, and each star rating and language is its own view. Most companies come complete, but the busiest views of the largest brands give their newest 200. Reviews come from people who chose to write one, so they aren't a representative customer survey. Invited and organic reviews can differ, so check review_source before comparing companies.

review_id / review_url
Stable ID and the public review page.
rating / title / text
The stars given and the full review.
published_at / experienced_at
When the review was published and the date of the experience.
is_verified / review_source
Trustpilot verification and whether the company invited the review.
reviewer_name / reviewer_country
The reviewer’s public name and country.
reply_text / company_trust_score
The company’s public reply and its TrustScore when collected.

Common questions.

Do I need a Trustpilot account?

No. The scraper reads public Trustpilot reviews as a signed-out visitor. You need an Apify account to run it.

Why don’t the biggest brands return every review?

Trustpilot shows a signed-out visitor 200 reviews per view. The scraper reads every language and star-rating view, so only views with more than 200 reviews are cut short. Schedule a run with Published since to collect every new review from then on.

Source and current product details: JMLP’s Trustpilot Reviews Actor on Apify.

Other scrapers
you might use.

Let’s talk about
your project.

Tell me what you need to collect or understand. I can help with a custom scraper, a pipeline or the analysis.

Start a project