Trustpilot Business Leads Scraper — Email, Phone & TrustScore avatar

Trustpilot Business Leads Scraper — Email, Phone & TrustScore

Pricing

$0.18 / 1,000 per business returneds

Go to Apify Store
Trustpilot Business Leads Scraper — Email, Phone & TrustScore

Trustpilot Business Leads Scraper — Email, Phone & TrustScore

Trustpilot business profiles as leads by category + country or domain list: published email, phone, street address, website, TrustScore, reviews, star distribution, claimed/verified flags, reply rate. Filter by TrustScore band. Only rows with a contact are charged. $0.18 per 1,000 businesses.

Pricing

$0.18 / 1,000 per business returneds

Rating

0.0

(0)

Developer

Scrapers Delight

Scrapers Delight

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

5

Monthly active users

18 days ago

Last modified

Share

Turn Trustpilot into a B2B lead list. Pick a Trustpilot category and a country (or paste a list of domains) and get one row per business — not per review — with the contact block the business published on its Trustpilot profile (email, phone, street address, postal code, city), its website, TrustScore, review count, 1–5 star distribution, claimed and verified flags, reply rate to negative reviews, and the dates of its most recent reviews.

$0.18 per 1,000 businesses. With the default settings you are charged only for businesses that publish an email or a phone number — a business with no contact is skipped and never billed.

Who uses it

  • Reputation-management and review-generation SaaS (Birdeye / Podium / Reviews.io type): find businesses with a weak TrustScore, a low reply rate or few recent reviews — maxTrustScore: 3.5, maxReviews: 50 — and reach them on their own published email and phone.
  • Outbound agencies: every e-commerce shop, broker, installer or agency Trustpilot lists in a category, per country, with a reachable contact.
  • B2B list brokers and data teams: category × country business lists with Trustpilot's own id for deduplication, and a profileUrl for every row.
  • Competitor monitoring: paste your competitors' domains and schedule the run to track TrustScore, star distribution and reply behaviour over time.

What one row looks like

A real row from a run on 2026-09-23 (categories: ["home_garden"], countries: ["GB"]), unedited:

{
"businessUnitId": "4dc3c01e00006400050fa99f",
"name": "National Shower Spares",
"domain": "showerspares.com",
"website": "https://www.showerspares.com/",
"email": "support@showerspares.com",
"phone": "01452 619836",
"address": "Units 16-17 Bamel Way, Gloucester Business Park, Brockworth",
"city": "Gloucester",
"postalCode": "GL3 4BH",
"countryCode": "GB",
"countryName": "United Kingdom",
"hasContact": true,
"trustScore": 4.9,
"stars": 5,
"reviewCount": 62281,
"reviewsLast12Months": 5084,
"starDistribution": { "five": 58993, "four": 2219, "three": 386, "two": 182, "one": 501 },
"primaryCategory": "Bathroom Remodeler",
"categories": [
{ "id": "bathroom_remodeler", "name": "Bathroom Remodeler", "isPrimary": true },
{ "id": "bathroom_supply_store", "name": "Bathroom Supply Store", "isPrimary": false },
{ "id": "plumbing_supply_store", "name": "Plumbing Supply Store", "isPrimary": false }
],
"categoryBreadcrumb": ["Home & Garden", "Bathroom & Kitchen", "Bathroom Remodeler"],
"isClaimed": true,
"claimedDate": "2014-05-20T12:29:39.000Z",
"isVerifiedCompany": true,
"verification": { "paymentMethod": false, "userIdentity": false, "google": true, "persona": false },
"usesPaidFeatures": true,
"isCollectingReviews": true,
"isClosed": false,
"consumerAlert": false,
"replyPercentage": 99.4,
"averageDaysToReply": 2.25,
"negativeReviewsTotal": 160,
"negativeReviewsReplied": 159,
"lastReplyToNegativeReview": "2026-09-22 15:46:48 UTC",
"lastReviewDate": "2026-09-23T01:09:17.000Z",
"recentReviews": [
{ "date": "2026-09-23T01:09:17.000Z", "rating": 5, "title": "Product quality good", "replied": false },
{ "date": "2026-09-23T00:34:16.000Z", "rating": 5, "title": "Excellent service all round spoke to…", "replied": false },
{ "date": "2026-09-22T23:39:00.000Z", "rating": 5, "title": "Excellent service", "replied": false }
],
"facebookUrl": "https://www.facebook.com/NationalShowerSpares",
"logoUrl": "https://s3-eu-west-1.amazonaws.com/tpd/logos/4dc3c01e00006400050fa99f/0x0.png",
"profileUrl": "https://www.trustpilot.com/review/showerspares.com",
"profileDetails": true,
"source": { "type": "category", "category": "bathroom_kitchen", "country": "GB", "location": null },
"scrapedAt": "2026-09-23T06:07:10.238Z"
}

Every field

FieldWhat it is
businessUnitIdTrustpilot's own id for the business — stable, use it to dedupe across runs. Never billed twice in one run.
name, domainDisplay name and the domain Trustpilot files the profile under.
websiteThe business's website as Trustpilot lists it.
email, phoneFrom the business's published Contact info block, exactly as published (phones are never reformatted or "repaired"). null when not published.
address, city, postalCodeStreet address, city and postal code from the same block.
countryCodeTrustpilot's country for the business (ISO-2).
countryNameCountry of the published contact address (only when the business published one).
hasContacttrue when there is an email or a phone.
trustScore, stars, reviewCountTrustScore (0–5, one decimal), star rating shown (half steps) and total reviews.
reviewsLast12MonthsReviews received in the last 12 months — a direct read of how active the profile is.
starDistributionCount of 5/4/3/2/1-star reviews (sums to reviewCount).
primaryCategory, categories, categoryBreadcrumbTrustpilot categories (each with Trustpilot's rank of the business in it, outOf businesses ranked) and the category path.
isClaimed, claimedDateWhether the business has claimed its profile, and when.
isVerifiedCompany, verificationTrustpilot's business verification (payment method, identity, Google, Persona).
usesPaidFeaturesWhether the business is on a paid Trustpilot plan.
isCollectingReviews, isClosed, consumerAlertActively inviting reviews · closed/temporarily closed · Trustpilot has posted a consumer alert.
replyPercentage, averageDaysToReply, negativeReviewsTotal, negativeReviewsReplied, lastReplyToNegativeReviewHow the business handles negative reviews.
lastReviewDate, recentReviewsNewest review date and the latest N reviews (date, rating, title, whether the business replied). All languages.
facebookUrl, logoUrlFacebook page linked on the profile; logo.
previouslyClaimed, hasSubscription, usesAiReplies, hasCollectedIncentivisedReviewsClaimed before (even if not now) · on a Trustpilot subscription · replies with Trustpilot's AI responses · has collected incentivised reviews.
locationsCountNumber of branch locations on the profile.
promotionTitle, sellingPointsThe business's own tagline and selling points from its profile (paid profiles).
reviewsByLanguageReview counts per language, e.g. {"en": 1578342, "de": 30}.
similarBusinessesUp to 8 competitors Trustpilot shows beside the profile (name, domain, TrustScore, reviews) — ready-made lookalike leads.
profileUrlThe Trustpilot profile.
profileDetailstrue when the profile page was read (all rows by default).
sourceWhich category/country (or domain input) produced the row.

Inputs

InputDefaultWhat it does
categories["electronics_store"]Trustpilot category ids from the URL trustpilot.com/categories/<id> (a full URL works too). Broad branches such as home_garden are fine — see the 10,000 cap below.
countries["GB"]ISO-2 codes; each category is walked once per country.
location—A city, using Trustpilot's own location filter.
domains—Look up specific businesses by domain, website URL or Trustpilot profile URL.
onlyWithContacttrueDeliver and charge only businesses with an email or phone.
requireEmail / requirePhonefalseStricter contact filters.
minTrustScore / maxTrustScore0 / 5TrustScore band — e.g. maxTrustScore: 3.5 for businesses that need reputation help.
minReviews / maxReviews0 / 0 (no bound)Review-count band.
claimedOnlyfalseOnly claimed profiles.
includeProfileDetailstrueRead each profile for the claimed flag, star distribution, reply rate and recent reviews. Off = listing fields only, faster.
recentReviews3Recent reviews per business (0–20).
maxResults50Stop after this many delivered businesses (0 = no limit).
maxPagesPerListing0 (all)Page cap per category × country (20 businesses per page).
splitCappedCategoriestrueWalk sub-categories when Trustpilot caps a listing at 10,000.
concurrency10Pages read in parallel (1–12).
proxyConfigurationnoneNot needed — see "How it works".

Filters run before anything is charged, and TrustScore/review filters run before a profile page is even fetched.

Pricing

$0.18 per 1,000 businesses (business-lead event, $0.00018 each). No start fee.

  • Charged once per business delivered to your dataset.
  • Never charged: businesses without an email or phone (with the default onlyWithContact), duplicates (a business in two sub-categories or two of your domains), domains that have no Trustpilot profile, businesses removed by your filters, and pages Trustpilot would not serve.
  • Delivery and billing are one atomic step, so a spending limit you set stops delivery exactly at the limit — you never receive rows you did not pay for, or pay for rows you did not receive.

An empty-input run delivers 50 businesses: $0.009.

How much contact data to expect — measured, not promised

The contact block exists only on profiles the business has claimed and chosen to fill in. How many rows carry it depends heavily on which businesses you pull, so here are the three frames we measured on 2026-09-23 (all counts over every business, including those with no contact):

FrameBusinessesEmailPhoneEmail or phoneStreet addressClaimed
Top of the listing (first page of electronics_store, plumber, car_dealer in US, GB, DE)17979.3%73.7%82.7%72.6%93.3%
Random profiles from Trustpilot's own sitemap15041.3%30.0%41.3%35.3%58.7%
An entire category, every page (electronics_store, listing fields)US 3,309 · DE 78818.3% · 12.9%14.1% · 9.6%—21.4% · 15.2%—

So: contact fill runs from ~13% to ~83% depending on depth into the listing. Trustpilot orders a category by its own "recommended" ranking, which puts claimed, active businesses first; the long tail is mostly unclaimed profiles with no contact at all (0 of 62 unclaimed profiles in the sitemap sample had one). That is why the default charges only rows with a contact — you pay for leads, not for empty profiles.

Profile-level fields are always present when the profile is read: website, TrustScore, review count, star distribution, reviews in the last 12 months and last review date were 100% filled in every frame.

The run's RUN_SUMMARY record (Storage → Key-value store) reports the fill of every field for your run, how many businesses Trustpilot stated vs how many unique ones were collected per listing, and every business that was skipped and why.

How it works

Every page on trustpilot.com sits behind an AWS WAF "Verifying Connection" check that answers plain HTTP clients with HTTP 403 — from home, datacenter and residential IPs alike. The actor opens one real Chromium page, lets it pass the check (about 2 seconds), then reads every listing and profile over plain HTTP carrying the resulting cookie. It re-runs the check only if Trustpilot asks again. No login, no Trustpilot account, no proxy needed; in our tests 188 consecutive pages were served on one check with zero challenges.

Data comes from the JSON Trustpilot embeds in its own pages (the same data the page renders), so field values are exactly what the profile shows.

The 10,000 cap. Trustpilot shows at most 500 pages × 20 = 10,000 businesses per category listing (page 501 is empty). When a listing reports that cap the actor walks the category's sub-categories instead (e.g. Trustpilot counts 23,985 businesses in home_garden but its GB listing stops at 10,000, so its 10 sub-categories are walked one by one), deduplicating on businessUnitId. A leaf category that is itself capped is walked to its 10,000 and the run summary marks it cappedBySite.

Completeness check. When a listing is walked to its last page, the unique businesses collected are compared with the count Trustpilot states. Measured: 3,309 of 3,327 (99.5%) for electronics_store US and 788 of 789 for DE — a handful of businesses shift between pages while the walk runs. A walk that falls below 97% stops the run with an error instead of delivering a short list as if it were complete.

Data limits

  • Contact data is what the business typed in. The "Contact info" block is a Trustpilot convention, not a legal register: businesses choose what to publish, and some publish a support mailbox or a shared number (two sister shops can list the same phone). For EU businesses it often matches their legal notice (Impressum), but nothing guarantees that.
  • No contact on unclaimed profiles. Measured above.
  • Trustpilot's own addresses never ship as a business's: any email or website on a Trustpilot domain is dropped, and the run fails loudly if one ever reaches the output (the run summary's platformContactsLeaked is 0 in every test run).
  • Phones are verbatim. We do not reformat to E.164, because Trustpilot has no reliable per-number country and a "repaired" number is a guess.
  • Listing order is Trustpilot's. It ranks by its own relevance; a full walk may miss or repeat under 1% of businesses when rankings shift mid-walk (repeats are never charged twice).
  • Recent reviews are a sample (dates, stars, titles) to show activity — this actor sells the business row, not review text. For full review text use a reviews scraper.
  • Profile-only fields (isClaimed, starDistribution, reply behaviour, recent reviews) are null when includeProfileDetails is off, and for the rare listing row whose profile could not be read (the row is still delivered with profileDetails: false).

Source

The public pages of www.trustpilot.com (category listings and business profile pages), read without logging in. Some rows belong to sole traders, so a name, email or phone can be personal data — comply with GDPR, CCPA and other data-protection rules when you use it.

FAQ

Can I get every business in a big branch like home_garden? Yes — leave splitCappedCategories on and maxResults: 0. The run walks the sub-categories past Trustpilot's 10,000-per-listing cap.

How do I find businesses with bad ratings? maxTrustScore: 3 (and maybe minReviews: 20 so the score means something). The listing is ordered best-first, so expect the run to read many listing pages per delivered row; listing pages are cheap and never charged.

Why do some rows have countryCode and countryName that differ? countryCode is the country Trustpilot files the business under; countryName is the country of the contact address the business published. A German shop with a UK returns address shows both.

What if a domain has no Trustpilot profile? It is listed under notFoundOnTrustpilot in the run summary and not charged.