BBB Business Leads Scraper icon

Lead generation

BBB Business Leads Scraper

Scrape structured BBB.org business leads by category+location search or direct profile URLs in one run — name, phone, address, BBB letter-grade rating, accreditation status, and years in business as clean, deduped, Pydantic-validated dataset rows, over the one proxy path confirmed to clear bbb.org's Cloudflare wall.

Free Apify credit covers a first run. No credit card to try.

What this Actor scrapes

BBB (Better Business Bureau) accreditation and letter-grade ratings are a trust signal SMB lead-gen agencies, franchise HQs, insurers, and reputation-monitoring teams all want at scale, but bbb.org fronts every page with a bot-management challenge most scrapers can't clear. This Actor discovers businesses by category+location search or enriches a list of direct BBB profile URLs, returning name, contact info, BBB rating/accreditation, address, and years in business as clean, typed dataset rows.

What we handle for you

  • 🛡️ Browser fingerprint rotationcurl-cffi impersonates real Chrome / Firefox / Safari TLS handshakes so the target sees a browser, not Python.
  • 🌐 Residential proxy rotation via Apify Proxy — fresh session and exit IP on every block.
  • 🔁 Retries with exponential backoff on 408 / 429 / 5xx — up to 5 attempts per page, Retry-After honoured.
  • 🧱 Rate-limit-aware pacing — when the target pushes back, we slow down instead of getting banned.
  • 🧊 Clean, typed dataset rows — Pydantic-validated, ISO-8601 timestamps, stable IDs, JSON / CSV / Excel export straight from the Apify Console.
  • 💰 Pay-Per-Event pricing — you only pay for results that hit your dataset. No data, no charge.

Use cases

  • SMB lead-gen prospecting — build fresh prospect lists by category and metro, with BBB rating and accreditation baked in as a pre-qualifying trust signal.
  • Franchise HQ territory audits — enumerate accredited vs. non-accredited competitors across a franchise footprint.
  • Insurance and vendor vetting — check accreditation status, complaint counts, and years-in-business before onboarding a contractor or vendor.
  • Reputation monitoring — enrich an existing business list with current BBB rating, review counts, and accreditation dates via direct profile URLs.

Input

Paste this into the Apify Console, or send it as the run input over the API. Proxy settings are on by default; you rarely need to touch them.

FieldTypeRequiredWhat it does
searchQueries array no Discovery mode: list of {"category": "...", "location": "..."} objects, e.g. category="plumber", location="Austin, TX". At least one of Search queries or Profile URLs is required.
profileUrls array no Direct-URL enrichment mode: bbb.org/{us,ca}/.../profile/... URLs to fetch as-is. At least one of Search queries or Profile URLs is required.
maxResultsPerQuery integer no Cap on businesses discovered per Search queries item.
maxTotalResults integer no Hard cap on businesses returned across the whole run, both modes combined.
{
  "searchQueries": [
    {
      "category": "plumber",
      "location": "Austin, TX"
    }
  ],
  "profileUrls": [
    "https://www.bbb.org/us/tx/austin/profile/plumber/calixto-plumbing-0825-1000223803"
  ],
  "maxResultsPerQuery": 5,
  "maxTotalResults": 10,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "BUYPROXIES94952"
    ]
  }
}

Output

One row per result, schema-validated before it is written. Export JSON, CSV, Excel or XML from the run, or read it over the API.

business_namebbb_idbusiness_idcanonical_urlphoneaddressbbb_ratingaccreditedaccreditation_dateyears_in_businesswebsitecategorycomplaint_countreview_countaverage_review_scorescraped_at

{
  "business_name": "Calixto Plumbing",
  "bbb_id": "0825",
  "business_id": "1000223803",
  "canonical_url": "https://www.bbb.org/us/tx/austin/profile/plumber/calixto-plumbing-0825-1000223803",
  "phone": "(512) 945-3143",
  "address": {
    "street": "1200 Main St",
    "city": "Austin",
    "state": "TX",
    "zip_code": "78753-6003"
  },
  "bbb_rating": "A+",
  "accredited": true,
  "accreditation_date": "2018-03-14",
  "years_in_business": 8,
  "website": "https://calixtoplumbing.com",
  "category": "Plumber",
  "complaint_count": 2,
  "review_count": 14,
  "average_review_score": 4.6,
  "scraped_at": "2026-08-12T10:00:00Z"
}

Pricing

EventPriceWhen
Actor start$0.20Once per run, covers warm-up and proxy session setup.
Business scraped$0.0012Per result written to the dataset.

You pay only for results that land. Cap any run with maxTotalChargeUsd. See pricing & billing for worked examples.

FAQ

Do I need a BBB account or API key?
No. This Actor scrapes bbb.org's own publicly listed business profile data — no login, no API key.
Why is the proxy group locked to BUYPROXIES94952?
bbb.org fronts every page with a Cloudflare bot-management challenge. Cloud recon (2026-08-12) confirmed BUYPROXIES94952 is the only proxy group in this account that clears it — Apify RESIDENTIAL had zero availability and Webshare residential was independently confirmed blocked for this target. The Actor hardcodes it so a run never silently falls back to a blocked path.
Can I mix category search and direct profile URLs in one run?
Yes — searchQueries (discovery) and profileUrls (direct enrichment) both run in the same call, deduped by business_id, first-seen wins.
Does this scrape review text or complaint narratives?
No. Only aggregate counts/scores (review_count, complaint_count, average_review_score) are surfaced — per-review text and complaint narratives are out of scope.

Ready to run it?

Open the listing on Apify, paste the input above, and watch rows land. If it ever breaks, it is our problem before it is yours.

Related Actors

Teams that run this also run