Multi-Review Scraper — Trustpilot & BBB in One Run avatar

Multi-Review Scraper — Trustpilot & BBB in One Run

Pricing

$150.00 / 1,000 business analyzeds

Go to Apify Store
Multi-Review Scraper — Trustpilot & BBB in One Run

Multi-Review Scraper — Trustpilot & BBB in One Run

Multi Review Scraper. Available on the Apify Store with pay-per-event pricing.

Pricing

$150.00 / 1,000 business analyzeds

Rating

0.0

(0)

Developer

Ryan Clinton

Ryan Clinton

Maintained by Community

Actor stats

0

Bookmarked

8

Total users

4

Monthly active users

2 days ago

Last modified

Share

Vendor Due Diligence Engine — Trustpilot & BBB

Vendor Due Diligence Engine — is this company safe to do business with?

This is not a review scraper. It is a vendor due diligence engine that determines whether a company is safe to do business with.

Enter a business name and get back a decision — a vendor risk score, a trustworthiness score, a green/yellow/red procurement verdict, deterioration risk, investigation priorities, and a ready-to-run due-diligence checklist. Instead of reading hundreds of reviews, you get an answer.

Everything is deterministic — the same reviews always produce the same result. No LLM, no randomness, no per-call AI cost.

The decision, in 5 seconds

{
"decisionPackage": { "decision": "avoid", "reason": "trustRisk", "nextAction": "verify-legitimacy-and-request-references", "estimatedRisk": "critical" },
"procurementTier": "red",
"vendorRiskScore": 82,
"trustworthinessScore": 31,
"deteriorationRisk": 77,
"investigationPriority": "high"
}

Typical workflow

Without this actor — screening one vendor:

Search Trustpilot → read 100 reviews → check BBB → read the complaints → compare ratings → guess whether the company is trustworthy.

~30–60 minutes per vendor, and the conclusion is a judgement call.

With this actor:

Enter the business name → receive a vendor risk score, a procurement verdict, an investigation checklist → make the decision.

~30 seconds, and the conclusion is reproducible.

Why not just read Trustpilot?

Trustpilot tells you:

4.1 stars · 1,800 reviews

This actor tells you:

Trustworthiness 42/100 · Vendor risk HIGH · Procurement tier RED · Deterioration risk 78/100 · Investigate billing disputes and refund complaints first.

One is data. The other is a decision.

What decision are you making?

Your questionThe output
Should we onboard this supplier?procurementTier (green/yellow/red/blacklist)
Is this company trustworthy?trustworthinessScore
Is the reputation deteriorating?deteriorationRisk
What should we investigate?investigationPriority + dueDiligenceChecklist
Which vendor in our list is riskiest?vendorRiskScore + benchmark portfolio
Which competitor is strongest?benchmark.ranking

Procurement verdict, early-warning detection, explainable scores, deterministic

What makes this different?

Most review tools tell you what customers said. This tells you what to do.

Traditional review toolsVendor Due Diligence Engine
ReviewsA decision
SentimentProcurement verdict
RatingsVendor risk score
Theme countsInvestigation priorities + checklist
Historical dataDeterioration detection

Detect vendors before they become problems

A company can hold a strong star rating while customer complaints accelerate underneath it. This actor catches the turn early — refund-complaint spikes, billing-dispute growth, emerging trust issues, reputation deterioration — before the average rating collapses. You are buying protection, not analytics.

Built for

  • Procurement & vendor onboarding — a green/yellow/red verdict + a due-diligence checklist per supplier
  • Investment due diligence — trust-weighted risk + deterioration detection
  • Lead qualification — reputation-weighted screening as a trust signal
  • Reputation monitoring — scheduled runs with trend + stability tracking
  • Competitive analysis — benchmark a cohort and rank it by risk

Why should I trust the scores?

Every score is deterministic and traceable — no black box, no AI, no hidden weighting. The same reviews always produce the same result, and each composite score ships with the components that built it.

Ask "why is the deterioration risk 77?" and the record answers:

{
"deteriorationRisk": 77,
"deteriorationDrivers": [
{ "factor": "accelerating complaints", "impact": 30 },
{ "factor": "rising negative reviews", "impact": 27 },
{ "factor": "recent reviews worse than all-time", "impact": 20 }
]
}

Same for trustworthiness (trustDrivers), the vendor risk score (vendorRiskBreakdown), and every risk flag (riskEvidence[] with example review snippets). You can audit any number back to the reviews that produced it.

What decision can you make in one call?

OutputWhat it answers
decisionPackageJust tell me what to do. — one object: { decision, reason, nextAction, estimatedRisk }, ready for an automation to branch on.
dueDiligenceChecklist[]What checks should I run? — a deterministic, procurement-ready checklist generated from the elevated risk categories ("Request billing and refund documentation", "Obtain customer references"…).
vendorRiskScore (0-100) + procurementTierHow risky is this vendor? — one composite risk number + the verdict procurement acts on: green / yellow / red / blacklist. Trust-weighted for screening.
deteriorationRisk (0-100)Are they getting WORSE? — the early-warning flagship: recent-negative growth + complaint acceleration + trust gap + freshness decline. A score-72 business that's collapsing scores high here.
investigationPriorityWhat should I look at first? — high / medium / low across a batch of businesses.
customerRecoveryDo they fix problems? — Trustpilot response rate, speed, and a recovery score weighted to replies on negative reviews. A business that answers complaints is a very different risk than one that ignores them.
trustworthinessScore (0-100) + trustGapCan I trust them? — a trust axis separate from reputation, plus the gap (liked-but-not-trusted).
reputationScore (0-100) + reputationVerdictAre customers happy? — excellent / strong / mixed / poor / critical
vendorRiskProfilePer-category risk levels: trust / service / billing / fulfilment / quality, each low → critical
recommendation + decisionWhat should I do? safe-to-engage → avoid, plus a one-word routing scalar (engage / review / caution / avoid)
riskEvidence[]Why? — each risk flag with its count, share, and example review snippets. Explainable scoring.
emergingRisks[]What is becoming a problem? Complaint themes rising now but not historically prominent.
freshnessAdjustedScore vs legacyScoreAre recent reviews worse than the all-time average? (5 years good + 3 months terrible is a major signal.)
reputationPillarsPer-area sub-scores — customer service, delivery, billing, product quality, communication, value, trust — plus strongest/weakest and industry-priority pillars
themeAcceleration[] + incidentEarly warning: which complaint themes are spiking (last 30 days vs prior 30), and whether an incident is detected
businessRisks[]Exec-language risk categories (refund-billing-risk, service-risk, fulfilment-risk, trust-risk, quality-risk)
authenticityReview-manipulation pattern signals (bursts, suspicious 5-star clustering, duplicate text) — not a fake-review verdict
executiveSummaryA ready-to-paste plain-English paragraph composing all of the above
temporal (watchlist)Reputation trend + a stability score (is the score volatile run-to-run?) across scheduled runs
benchmark (competitors)Rank, cohort average, and percentile vs the competitors you supply
Per-review recordsEvery review tagged with sentiment, themes[], severity, isRecent

reviewMomentum, ratingDistribution + polarization, and themeCorrelations are also computed — they ship in outputProfile: "full" to keep the default output decision-focused.

Built on the Apify platform, it adds capabilities a script can't: scheduling (weekly runs with a watchlistName to track the trend), API access (Python / JavaScript / any HTTP client), proxy rotation, run-failure monitoring, and one-click integrations with Zapier, Make, n8n, Dify, Google Sheets, and webhooks.

Use cases

Vendor & supplier screening

Score a business's reputation before you sign. The decision and riskFlags[] tell you whether to proceed, run more due diligence, or walk away.

Reputation monitoring

Set a watchlistName and schedule weekly runs. The temporal block reports whether the reputation score is improving, declining, or stable since the last run.

Competitive analysis

Run competitors through the actor and compare reputation scores, complaint themes, and risk flags side by side.

Lead qualification

Feed the reputation score into a lead-scoring pipeline as a trust signal. Low scores or scam flags route leads differently.

Customer sentiment research

Export per-review sentiment and theme tags to feed dashboards or downstream analysis without running your own NLP.

Real-world examples

SaaS vendor evaluation

Input:

{ "businessName": "example-saas.com", "analysisType": "vendor-screening", "industry": "saas" }

Output (summary record):

{
"procurementTier": "red",
"vendorRiskScore": 79,
"trustworthinessScore": 34,
"deteriorationRisk": 81,
"decision": "avoid",
"dueDiligenceChecklist": [
"Request billing and refund process documentation",
"Confirm dispute-resolution and chargeback terms in writing"
]
}

Why: refund complaints up 260%, billing disputes up 180%, and recent reviews materially worse than the historical average. Decision: request references or consider alternatives.

Supplier portfolio audit

Input:

{ "businessName": "supplier-a.com", "competitors": ["supplier-b.com", "supplier-c.com"], "analysisType": "vendor-screening" }

Output (benchmark record):

{
"portfolio": {
"highestRisk": { "businessName": "supplier-c.com", "vendorRiskScore": 84 },
"fastestDeterioration": { "businessName": "supplier-b.com", "deteriorationRisk": 71 },
"recommendedAudit": ["supplier-c.com", "supplier-b.com"]
}
}

Decision: audit supplier-c and supplier-b first.

How to use it

  1. Enter the business name — e.g. "Stripe", "Shopify", "Comcast".
  2. Add the business domain (optional) — improves Trustpilot matching (e.g. "stripe.com").
  3. Choose platforms — Trustpilot, BBB, or both (default both).
  4. Set review limit — max reviews per platform (default 20, max 100).
  5. (Optional) Set a watchlist name — to track reputation across scheduled runs.
  6. Run — get per-review records plus one scored reputation summary.

Input parameters

ParameterTypeRequiredDefaultDescription
businessNamestringYesBusiness to analyse (e.g. "Stripe").
businessDomainstringNoDomain for accurate Trustpilot matching (e.g. "stripe.com").
competitorsstring[]NoNames or domains to benchmark against. Each is scored and a benchmark record ranks them. Ranking is vs the supplied cohort, not an industry baseline. Each competitor is charged as a business analysed.
industrystringNogenericSector lens (saas / ecommerce / hosting / telecom / logistics / finance) that sets which pillars matter most. Does not change the core score.
analysisTypestringNogeneralThe job: vendor-screening / investment-due-diligence (trust-weighted procurement tier), lead-qualification / competitive-analysis (reputation-weighted), reputation-monitoring. Same scraping, different decision emphasis.
platformsstring[]No["trustpilot", "bbb"]Which platforms to scrape.
maxReviewsPerPlatformintegerNo20Max reviews per platform (1-100).
minRatingintegerNoOnly include reviews at or above this rating (1-5).
outputProfilestringNostandardminimal (decisions only), standard (full reviews + decision), or full (everything incl. scoring components).
watchlistNamestringNoTrack reputation trend + stability across scheduled runs under this name.
proxyConfigurationobjectNoProxy settings. Recommended for production.

Input examples

Score a business with defaults:

{ "businessName": "Stripe", "businessDomain": "stripe.com" }

Decisions only, Trustpilot:

{ "businessName": "HubSpot", "businessDomain": "hubspot.com", "platforms": ["trustpilot"], "outputProfile": "minimal" }

Weekly reputation monitoring:

{ "businessName": "Acme Corp", "businessDomain": "acme.com", "watchlistName": "key-vendors" }

Competitor benchmark (e-commerce lens):

{ "businessName": "acme.com", "competitors": ["competitor-a.com", "competitor-b.com"], "industry": "ecommerce" }

Vendor screening (trust-weighted procurement tier):

{ "businessName": "acme.com", "analysisType": "vendor-screening", "outputProfile": "minimal" }

Output

Sample output — businessName, procurementTier, vendorRiskScore, trustworthinessScore, deteriorationRisk, decision

The dataset contains per-review records and one reputation-summary record. The full decision is also mirrored to the key-value store under SUMMARY.

Reputation summary record:

{
"recordType": "summary",
"schemaVersion": "2.0.0",
"businessName": "Acme Corp",
"businessDomain": "acme.com",
"decision": "review",
"reputationScore": 41,
"reputationVerdict": "poor",
"recommendation": "due-diligence-required",
"riskLevel": "high",
"riskFlags": ["HIGH_NEGATIVE_SHARE", "REFUND_COMPLAINT_CLUSTER"],
"sentimentBreakdown": { "positive": 6, "neutral": 3, "negative": 11, "netSentiment": -0.25 },
"complaintRate": 0.55,
"topComplaintThemes": [
{ "theme": "refund-returns", "label": "Refunds & returns", "count": 7 },
{ "theme": "customer-service", "label": "Customer service", "count": 5 }
],
"topPraiseThemes": [{ "theme": "product-quality", "label": "Product quality", "count": 4 }],
"trustSignals": { "verifiedShare": 0.4, "recentShare": 0.65, "reviewVolume": 20, "platformsFound": 2 },
"crossPlatform": { "consistent": false, "ratingSpread": 1.7, "note": "Platforms disagree by 1.7 stars — treat the aggregate with caution." },
"confidence": { "score": 0.62, "level": "medium", "coldStart": false },
"recommendation": "due-diligence-required",
"whyThisMatters": "Reputation 41/100 (poor) from 20 reviews across 2 platform(s). 11 negative vs 6 positive. Leading complaint: Refunds & returns (7).",
"summary": "poor reputation (41/100) — due diligence required. Risk: high (HIGH_NEGATIVE_SHARE, REFUND_COMPLAINT_CLUSTER).",
"recommendedAction": { "actionId": "investigate", "label": "Poor reputation — run additional due diligence before engaging." },
"agentContract": { "decision": "review", "confidence": 0.62, "recommendation": "due-diligence-required", "reputationScore": 41 },
"overallAvgRating": 3.1,
"totalReviewsScraped": 20,
"extractedAt": "2026-06-08T14:32:18.456Z"
}

Per-review record:

{
"recordType": "review",
"platform": "trustpilot",
"businessName": "Acme Corp",
"reviewerName": "Sarah M.",
"rating": 2,
"title": "Still waiting on my refund",
"body": "Requested a refund three weeks ago and support has gone silent.",
"date": "2026-05-20",
"verified": true,
"sentiment": "negative",
"themes": ["refund-returns", "communication"],
"isComplaint": true,
"severity": "high",
"isRecent": true,
"extractedAt": "2026-06-08T14:32:18.456Z"
}

Output fields

Summary (reputation decision) record

FieldDescription
decisionRouting scalar: engage / review / caution / avoid / insufficient-data
reputationScoreComposite 0-100 score (null if no reviews)
reputationVerdictexcellent / strong / mixed / poor / critical
recommendationsafe-to-engage / generally-positive / proceed-with-caution / due-diligence-required / avoid / insufficient-data
decisionPackage{ decision, reason, nextAction, estimatedRisk } — the single object automation branches on
dueDiligenceChecklist[]Deterministic procurement checklist generated from the elevated risk categories
vendorRiskScore0-100 composite vendor risk (higher = riskier); numeric backing of procurementTier
procurementTier / procurementActiongreen / yellow / red / blacklist / insufficient-data + plain-English next step
investigationPriorityhigh / medium / low / insufficient-data
deteriorationRisk / deteriorationLevel / deteriorationDrivers[]0-100 "are they getting worse?" composite + band + the {factor, impact} components that built it
vendorRiskBreakdownHow vendorRiskScore was composed (weighted trust / reputation / deterioration + weights)
trustGapreputationScore − trustworthinessScore (liked-but-not-trusted signal)
customerRecoveryTrustpilot response rate / negative-response rate / avgResponseDays / customerRecoveryScore
vendorRiskProfilePer-category levels: trustRisk / serviceRisk / billingRisk / fulfilmentRisk / qualityRisk
complaintLifecycle[]Per theme: emerging / growing / established / critical / declining
trustworthinessScore / trustworthinessLevel / trustDrivers[] / trustFactors[]Trust axis (0-100) with numeric {factor, impact} drivers and plain-English factors
riskEvidence[]Per risk flag: count, share, and example review snippets — explainable scoring
emergingRisks[]Complaint themes rising now but not historically prominent
freshnessAdjustedScore / legacyScore / freshnessGapRecency-weighted score vs all-time score; positive gap = recent reviews are worse
riskLevel / riskFlags[]Overall risk band and the specific flags that fired
businessRisks[]Exec-language risk categories (refund-billing-risk, service-risk, fulfilment-risk, trust-risk, quality-risk)
reputationPillarsPer-pillar sub-scores + strongest/weakest + industry-priority + weak-priority pillars
themeAcceleration[] / incidentComplaint themes spiking (last 30 vs prior 30 days) + detected incident
reviewMomentumWithin-run review/negative flow + direction (rising-complaints / easing / steady)
ratingDistribution1-5 star counts + polarizationScore
authenticityManipulation-pattern signals + risk band (not a fake-review verdict)
themeCorrelations[]Complaint themes that co-occur (root-cause intel)
executiveSummaryReady-to-paste plain-English paragraph
sentimentBreakdownpositive / neutral / negative counts + net sentiment
complaintRateShare of reviews that read as complaints (0-1)
topComplaintThemes[] / topPraiseThemes[]Most common themes with counts
trustSignalsverifiedShare, recentShare, reviewVolume, platformsFound
crossPlatformWhether platforms agree, rating spread, note
confidencescore, level, components, coldStart
whyThisMatters / summaryPlain-English explanation and one-liner
recommendedActionactionId + label
agentContractCompact decision surface for agents/MCP
warningsActionable warnings (e.g. a platform restricted automated access, or no reviews found)
coverageRequested vs found platforms, reviews scraped
temporalReputation trend + stability score (only with a watchlist; trend is new and stability is null until the second/third run)

Benchmark record (when competitors is set)

FieldDescription
recordType"benchmark"
ranking[]Each business with rank, reputationScore, decision, recommendation, percentileInCohort
cohortAverageAverage reputation score across the supplied businesses (not an industry baseline)
cohortLeader / cohortLaggardBest and worst in the supplied cohort
primaryRank / primaryPercentileInCohortWhere the primary business lands in the cohort
portfolioRisk-first rollup: highestRisk, fastestDeterioration, recommendedAudit[], safeToProceed[]
noteStates the ranking is relative to the supplied competitors, not an industry-wide baseline

Review record

FieldDescription
platformtrustpilot or bbb
ratingStar rating (1-5)
sentiment / sentimentScorepositive / neutral / negative, plus -1..1 score
themes[]Stable theme codes detected in the review
isComplaint / isPraiseComplaint / praise flags
severitycritical / high / medium for negative reviews
isRecent / recencyDaysWhether within 90 days, and exact age
reviewerName, title, body, date, verifiedRaw review fields

Pricing

Pay-per-event: $0.15 per business analysed, covering all platforms, all reviews, and the full reputation decision. You are charged once per business, only when an analysis is produced — never on an empty run.

Use in Dify

This actor returns a decision as structured JSON — decisionPackage, procurementTier, vendorRiskScore, and the enums your downstream node branches on. A raw review scraper pointed at the same business returns rows you still have to read; this returns the verdict and the next action.

Actor ID: ryanclinton/multi-review-scraper

Sample input (vendor screening):

{ "businessName": "Acme Corp", "businessDomain": "acme.com", "analysisType": "vendor-screening", "outputProfile": "minimal" }

Branching example — a Dify if/else node routing on the summary record's procurementTier:

  • procurementTier == "green" → continue to onboarding
  • procurementTier == "yellow" → assign the dueDiligenceChecklist[] to a reviewer
  • procurementTier == "red" → escalate, with decisionPackage.reason as the alert
  • procurementTier == "blacklist" → reject and notify

The dueDiligenceChecklist[], decisionPackage, and recommendedAction are usable verbatim — no LLM rewriting needed. Opt into watchlistName to let a scheduled Dify workflow act on the temporal.trend (improving / declining) signal, or pass competitors[] and branch on the benchmark record's portfolio.recommendedAudit[].

Combine with other Apify actors

ActorHow to combine
Google Maps Email ExtractorFind businesses, then score their reputation here before outreach
Website Contact ScraperPull contacts after the reputation check passes
B2B Lead QualifierUse the reputation score as a trust signal in lead scoring
Website Tech Stack DetectorAdd technology intelligence to the reputation profile
Bulk Email VerifierVerify contacts before reaching out

How it works (technical detail)

From raw Trustpilot and BBB reviews through classification, scoring, and deterioration detection to a procurement decision

The actor loads each Trustpilot and BBB page in a real headless browser (Playwright + Chromium, residential proxy by default) for reliable extraction, then runs a deterministic intelligence layer over the reviews:

  • Sentiment — per-review positive / neutral / negative + a -1..1 score, blending review text and star rating with negation handling.
  • Themes — stable codes (customer-service, delivery-shipping, product-quality, refund-returns, pricing-value, communication, billing-charges, reliability, ease-of-use, trust-scam, speed) from the review text.
  • Complaint severity — negative reviews tagged critical / high / medium (scam, fraud, "never received", refund refused…).
  • Reputation score — composite of star ratings (60%) and sentiment (40%), penalised for scam and refund clusters.
  • Trustworthiness score — a separate axis driven by scam/fraud language, billing disputes, and critical-severity complaints.
  • Vendor risk score — analysis-type-weighted blend of (100 − trust), (100 − reputation), and deterioration; procurementTier is its band.
  • Deterioration risk — recent-negative growth + complaint acceleration + trust gap + freshness decline.

Everything is deterministic and reproducible — no LLM, no randomness. The tradeoff: lexicon-based sentiment won't catch sarcasm the way a language model would, in exchange for zero per-call AI cost and identical output every run.

Responsible use

  • Only accesses publicly visible review pages on Trustpilot and BBB.
  • Respects each platform's terms of service and rate limits.
  • Do not use scraped reviews to create fake testimonials, defame businesses, or manipulate ratings.
  • Comply with applicable data protection laws when processing reviewer names and review content.
  • For scraping legality, see Apify's guide.

FAQ

How is the reputation score calculated? It is a deterministic composite of star ratings (60%) and review sentiment (40%), penalised for scam complaints and refund clusters, then banded into a verdict. The same reviews always produce the same score — no LLM, no randomness.

What if a business isn't found on a platform? The run still completes. The platform's summary shows found: false, and the decision is computed from whatever platforms returned data. With fewer than three reviews, the recommendation is insufficient-data.

Does it charge if no reviews are found? No. The actor only charges when an analysis is produced (at least one platform found or one review scraped).

How do I track reputation over time? Set a watchlistName and schedule the actor. Each run stores the reputation score under that watchlist and the next run reports the temporal.trend (improving / declining / stable). On the first run for a new watchlist name there is no prior snapshot, so temporal.trend is new and the deltas are null — the trend becomes meaningful from the second run onward.

Why does it render pages in a browser? It loads each Trustpilot and BBB page in a real headless browser through a residential proxy, which is what makes review extraction reliable. In the rare case a platform doesn't return data, that platform's summary shows status: "blocked" and the decision is computed from whatever did come back.

Is the score a lifetime average? No. It scores the sample of reviews it scrapes (default review order, most-recent/relevant first, up to maxReviewsPerPlatform). For a polarized business this recent sample can run hotter or colder than the all-time star average — that's the point of freshnessAdjustedScore and deteriorationRisk. Increase maxReviewsPerPlatform for a broader sample.

Can I get just the decision without the reviews? Set outputProfile to minimal for decision fields only.

How many reviews can I get from Trustpilot? Up to 100 per run (configurable via maxReviewsPerPlatform).

What this does NOT do

  • Not a live API feed — it reads publicly visible review pages on a per-run basis, not a real-time reputation stream.
  • Two platforms — Trustpilot and BBB. Google Reviews, Yelp, G2, and Capterra are out of scope (use a dedicated actor for those).
  • Not LLM sentiment — sentiment and themes are deterministic keyword/lexicon classification, not a language model. Fast, reproducible, and free of per-call AI cost, but it won't catch sarcasm or nuanced context the way an LLM would.
  • Not a replacement for enterprise reputation suites (Reputation.com, Birdeye) — it gives you a deterministic, decision-ready reputation read at a fraction of the cost, not a full review-response/CRM platform.
  • Customer recovery is Trustpilot-only — company responses are read from Trustpilot, which exposes them; BBB does not, so customerRecovery is based on the Trustpilot reviews in the run.
  • Deterioration / momentum / freshness need review dates — when reviews are undated or all from the same window, those fields return null rather than a guessed value.
  • One business per run (plus competitors for benchmarking) — for many independent businesses, run via the API or schedule per business.

Support

Found a bug or have a feature request? Open an issue in the Issues tab on this actor's page.