BBB Business Leads Scraper avatar

BBB Business Leads Scraper

Pricing

from $1.20 / 1,000 business scrapeds

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

from $1.20 / 1,000 business scrapeds

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a month 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-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.20One-off warm-up charge per run
business-scraped$0.0012PPE event

Example: 1 000 results at the rates above ≈ $1.40. 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.