BBB Business Leads Scraper avatar

BBB Business Leads Scraper

Pricing

Pay per event

Go to Apify Store
BBB Business Leads Scraper

BBB Business Leads Scraper

Scrape structured business leads from bbb.org by category+location search or direct profile URLs — business name, phone, address, BBB rating, accreditation status, and years in business, ready for prospecting and reputation research.

Pricing

Pay per event

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share


🎯 What this 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.

⚙️ How to use it

  1. Click Try for free at the top of the page.
  2. Fill in the input form — most fields have sensible defaults.
  3. Click Start. Output streams into the run's dataset.
  4. Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.

📥 Input

FieldTypeRequiredDefaultNotes
searchQueriesarrayno[]Discovery mode: list of {"category": "...", "location": "..."} objects, e.g. category="plumber", location="Austin, TX".…
profileUrlsarrayno[]Direct-URL enrichment mode: bbb.org/{us,ca}/.../profile/... URLs to fetch as-is. At least one of Search queries or…
maxResultsPerQueryintegerno40Cap on businesses discovered per Search queries item.
maxTotalResultsintegerno500Hard cap on businesses returned across the whole run, both modes combined.
proxyConfigurationobjectno{'useApifyProxy': True, 'apifyProxyGroups': ['BUYPROXIES94952']}Pinned to BUYPROXIES94952 — the only proxy group confirmed to clear bbb.org's Cloudflare wall.

Example input

{
"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

Every row is one dataset item.

FieldTypeNotes
business_namestringwebDigitalData.business_name.
bbb_idstringwebDigitalData.bbb_id (issuing BBB office).
business_idstringwebDigitalData.business_id.
canonical_urlstringResolved profile URL.
phone['string', 'null']webDigitalData.business_phone.
address['object', 'null']street/city/state/zip_code, all best-effort.
bbb_rating['string', 'null']webDigitalData.business_rating (letter grade).
accreditedbooleanwebDigitalData.accredited_status == 'AB'.
accreditation_date['string', 'null']Detail-page DOM.
years_in_business['integer', 'null']Detail-page DOM.
website['string', 'null']Detail-page DOM.
category['string', 'null']Search result / breadcrumb.
complaint_count['integer', 'null']Detail-page DOM, best-effort.
review_count['integer', 'null']Detail-page DOM, best-effort.
average_review_score['number', 'null']Detail-page DOM, best-effort.
scraped_atstringISO-8601 UTC timestamp at fetch time.

Example output

{
"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

Pay-Per-Event — you pay only when these events fire:

EventUSDWhat it is
actor-start$0.02One-off warm-up charge per run
business-scraped$0.0012PPE event

Example: 1 000 results at the rates above ≈ $1.22. No subscription, no minimum, no card to start — Apify gives every new account $5 of free credit.

🚧 Limitations

Full complaint-narrative or review-text scraping is out of scope — only aggregate counts/scores are surfaced. Covers US/CA BBB directories only, no international equivalents. One-shot per run — no rating-history or alerting. No lead scoring or third-party enrichment beyond what the BBB profile page itself publishes.

❓ 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.

💬 Your feedback

Spotted a bug, hit a weird edge case, or need a new field? Open an issue on the Actor's Issues tab on Apify Console — we ship fixes weekly and we read every report.