BBB Scraper — Business Leads, Ratings & Phones avatar

BBB Scraper — Business Leads, Ratings & Phones

Pricing

$1.80 / 1,000 per business returneds

Go to Apify Store
BBB Scraper — Business Leads, Ratings & Phones

BBB Scraper — Business Leads, Ratings & Phones

Scrape Better Business Bureau (bbb.org) search results into clean leads: business name, phone, full street address, BBB letter rating (A+ to F), accreditation status, category and profile URL. Search any keyword across any US/Canada city or ZIP. No login, deduplicated output.

Pricing

$1.80 / 1,000 per business returneds

Rating

0.0

(0)

Developer

Scrapers Delight

Scrapers Delight

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Turn any Better Business Bureau (bbb.org) search into a clean lead list. Give it a keyword (plumber, roofing, dentist, moving company…) and a location (Austin, TX, New York, NY, Toronto, ON, or a ZIP like 78701) and it returns one row per business with:

FieldExample
businessNameCalixto Plumbing
phone(512) 945-3143
streetAddress / city / state / zip / country8410 Georgian Dr # B · Austin · TX · 78753-6003 · US
bbbRatingA+ (BBB letter grade, A+F, null when unrated)
isAccredited / accreditedStatustrue / AB
bbbCategoryplumber, roofing contractors, commercial plumber
bbbOfficeId / bbbOfficeName0825 · BBB Heart of Texas
profileUrllink to the BBB profile
businessIdBBB's own id — stable, and what rows are deduplicated on
searchKeyword / searchLocation / searchPage / resultPosition / totalResultsForQueryprovenance for every row

Every keyword is run against every location, so 5 keywords × 10 cities = 50 searches in one run.

Why the data is trustworthy

The actor reads two machine-readable blobs that BBB ships inside each search page — the JSON-LD SearchResultsPage (name, phone, full postal address, profile URL) and BBB's own analytics object (business id, letter rating, accreditation, BBB office) — and joins them on the business id. Nothing is screen-scraped out of rendered HTML, and no number is grabbed by a page-wide regex.

Measured fill-rates on a 245-business run across 6 trades × 3 metros: businessName 100% · phone 100% · city/state/zip 100% · bbbRating 99% · bbbCategory 100% · streetAddress 84% (BBB genuinely has no street for PO-Box-only listings).

Filters

  • accreditedOnly — keep only BBB Accredited businesses (BBB's search already leans heavily accredited; this makes it a guarantee).
  • minRating — drop anything below a letter grade. Unrated businesses are dropped when a floor is set.
  • requirePhone — drop rows without a phone number.
  • sortRelevance (BBB default) or Distance; Distance genuinely returns a different set.

Known limits (measured, not guessed)

  • BBB serves at most 15 result pages per keyword + location — about 225 businesses — even when it reports thousands of total results. The run log tells you when a query is capped. To cover a big market, split it: more keywords, more cities, or ZIP-by-ZIP.
  • Consecutive result pages of the same query overlap slightly. Rows are deduplicated on businessId, and you are only charged for rows actually delivered — never for a duplicate.
  • A location is required; an empty one returns nothing.
  • About a quarter of BBB's responses omit the ratings blob. The actor detects this and re-requests the page, so ratings stay ~100% filled; on the rare page where every retry misses, bbbRating, isAccredited and bbbOfficeName come back null rather than wrong.
  • Business website and email are not on BBB's search pages (they live behind the individual profile pages, which block automated requests). This actor is scoped to search-result leads; pair it with an email-enrichment actor if you need inboxes.

Input example

{
"keywords": ["plumber", "hvac"],
"locations": ["Austin, TX", "78701"],
"maxPagesPerQuery": 5,
"maxItems": 200,
"accreditedOnly": false,
"minRating": "",
"requirePhone": false,
"sort": "Relevance"
}

Pricing

Pay per business returned. You are charged only for the rows delivered to your dataset — filtered and duplicate rows cost nothing.

Use of this actor is subject to the Better Business Bureau's Terms of Service and to the data protection laws that apply to you. The output describes businesses, but sole-trader listings can still constitute personal data — how you store, contact and process the results is your responsibility. Scrape at a reasonable rate and only for lawful purposes.