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.
Initial build. Dual-mode discovery/enrichment Actor for bbb.org:
searchQueries (category+location discovery, paginated, throttled) and
profileUrls (direct-URL enrichment) input modes, combined into one
deduplicated (by business_id) target queue.
webDigitalData inline-JSON extraction merged with DOM-parsed fields
(address, accreditation date, years in business, website, category,
complaint/review counts) into a single ResultRow per business.
curl-cffi only, no browser automation — proxy hardcoded to Apify
group BUYPROXIES94952, the only group confirmed (2026-08-12 cloud
recon) to clear bbb.org's Cloudflare wall. WebShare and RESIDENTIAL
are both confirmed-blocked for this target and are never used.
Per-item fault isolation (one bad business never crashes the run),
fail-loud on a zero-row run, partial-success status messages.
Pydantic v2 ActorInput/ResultRow (ADR-0004); PPE actor-start +
business-scraped (~$1.20/1,000 blended).
REQ-1 through REQ-12 covered — see docs/specs/bbb-business-leads-scraper/spec.md.
Not yet cloud-verified: search pagination param and detail-page DOM
selectors are best-effort guesses against fixtures marked
FIXTURE — synthetic, pre-cloud-recon. src/recon_cloud.py is wired
to confirm/correct these against live traffic — the orchestrator runs
it (and full cloud QA) before publish.