BBB Business Leads Scraper
Pricing
Pay per event
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
Maintained by CommunityActor 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 rotation —
curl-cffiimpersonates 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-Afterhonoured. - 🧱 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
- Click Try for free at the top of the page.
- Fill in the input form — most fields have sensible defaults.
- Click Start. Output streams into the run's dataset.
- Export from Storage → Dataset as JSON, CSV, or Excel — or fetch via the API.
📥 Input
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
searchQueries | array | no | [] | Discovery mode: list of {"category": "...", "location": "..."} objects, e.g. category="plumber", location="Austin, TX".… |
profileUrls | array | no | [] | Direct-URL enrichment mode: bbb.org/{us,ca}/.../profile/... URLs to fetch as-is. At least one of Search queries or… |
maxResultsPerQuery | integer | no | 40 | Cap on businesses discovered per Search queries item. |
maxTotalResults | integer | no | 500 | Hard cap on businesses returned across the whole run, both modes combined. |
proxyConfiguration | object | no | {'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.
| Field | Type | Notes |
|---|---|---|
business_name | string | webDigitalData.business_name. |
bbb_id | string | webDigitalData.bbb_id (issuing BBB office). |
business_id | string | webDigitalData.business_id. |
canonical_url | string | Resolved 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). |
accredited | boolean | webDigitalData.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_at | string | ISO-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:
| Event | USD | What it is |
|---|---|---|
actor-start | $0.02 | One-off warm-up charge per run |
business-scraped | $0.0012 | PPE 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.