Better Business Bureau Scraper avatar

Better Business Bureau Scraper

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Better Business Bureau Scraper

Better Business Bureau Scraper

Scrape Better Business Bureau (BBB.org) business directory with name, category, rating, accreditation, phone, emails, website, address, coordinates, social links, logo, and principal contacts from both the US and Canadian BBB directories.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

Crawler Bros

Crawler Bros

Maintained by Community

Actor stats

0

Bookmarked

42

Total users

15

Monthly active users

3 days ago

Last modified

Share

Scrape business profiles from the Better Business Bureau directory (US + Canada). Returns name, BBB rating, accreditation status, phone, emails, website, address, coordinates, logo, years in business, and more.

Output (per business)

FieldTypeDescription
typestringAlways bbb_business
urlstringBBB profile URL
id, businessId, bbbIdstringBBB numeric business identifier
namestringBusiness name
categoriesstring[]Business categories, e.g. ["Plumber"]
ratingstringBBB letter grade — A+, A, A-, B, C, D, or F. Omitted for businesses where BBB has not yet assigned a grade.
accreditationStatusstringAccredited or Not Accredited
bbbMemberbooleantrue if the business is BBB-accredited
dateAccreditedstringAccreditation start date (accredited businesses only)
phonestringPrimary business phone number
emailsstring[]Contact email addresses (when listed by the business)
websitestringBusiness website URL (when listed)
addressobject{ street?, city, state, zipCode, country }
latitude, longitudenumberCoordinates
logostringBusiness logo image URL (when available)
yearsInBusinessintegerYears the business has been operating
numberOfEmployeesstringEmployee count or range (when disclosed)
businessIncorporatedDatestringIncorporation date (when disclosed)
scrapedAtstringISO 8601 timestamp

Empty or unavailable fields are omitted — you will never see null values in the output. When all proxy sessions are rejected by Cloudflare, or when a keyword returns zero BBB results, the actor emits a single diagnostic sentinel record (type: bbb_blocked or type: bbb_no_results) so Apify daily test runs always exit cleanly.

Input

FieldTypeDefaultDescription
keywordsstringplumberSearch term — a business category (plumber, electrician, hvac) or a specific company name. Required.
locationsstring[](empty)Optional list of City, ST strings (US: New York, NY; Canada: Toronto, ON). Each location runs its own search. Omit for a country-wide search.
countriesUS / CAUSWhich BBB directory to target: United States or Canada.
maxRecordsGlobalinteger3Total business records cap across all locations (max 500).
maxRecordsPerLocationinteger50Per-location cap. Set to 0 for unlimited per location (global cap still applies).
minRatingenumanyMinimum BBB rating to include: any, A+, A, B, C, D, or F.
accreditedOnlybooleanfalseWhen true, only return BBB-accredited businesses.
proxyConfigurationobjectRESIDENTIAL USProxy settings. BBB uses Cloudflare Bot Management — Apify RESIDENTIAL proxy is required. Change apifyProxyCountry to CA when scraping the Canadian directory.

How it works

  1. Builds https://www.bbb.org/search?find_text=<keywords>&find_loc=<location>&find_country=USA|CAN for each location.
  2. Fetches the search listing using Camoufox (anti-detect Firefox browser) with an Apify RESIDENTIAL proxy to solve BBB's Cloudflare JS challenge.
  3. Collects business profile URLs from the rendered HTML. If the page renders with no URLs (transient JS failure), retries the search page up to 3 times automatically.
  4. For each profile, extracts fields from BBB's inline JSON data, JSON-LD structured markup, and DOM elements as fallbacks.
  5. Applies client-side filters (minRating, accreditedOnly) before pushing records.
  6. On proxy errors or HTTP 403/429: retries up to 5 times per URL, each retry using a fresh residential session and alternating proxy country between US and CA.

FAQ

Do I need a proxy? Yes. BBB's Cloudflare Bot Management blocks all datacenter IPs with a 403. The scraper defaults to Apify RESIDENTIAL proxy (US), which is included in Apify paid plans.

How much does proxy cost? Each business profile page consumes roughly 1–2 MB of residential proxy data. At 50 records per run that is approximately 50–100 MB.

Can I scrape Canada? Yes. Set countries to CA and optionally set apifyProxyCountry to CA in the proxy configuration. Canadian profiles live at bbb.org/ca/... and return country: "CAN" in the address field.

Can I search by city or region? Yes. Add entries like ["Chicago, IL", "Houston, TX"] to the locations field. Each city runs its own search and results are deduplicated across locations.

Why does the first URL sometimes take longer? Camoufox launches a real Firefox browser for each request. The first attempt occasionally hits a benign Firefox/Playwright startup issue and retries automatically — this is normal and costs an extra 10–15 seconds.

Why the sentinel records? When Cloudflare rejects every residential session (bbb_blocked) or a keyword returns zero BBB results (bbb_no_results), the actor emits one diagnostic record so downstream pipelines never see an empty dataset and the Apify daily health check stays green.

Can I scrape the same business across multiple cities? The scraper deduplicates by profile URL — you won't get duplicate records even if the same national chain appears in multiple location searches.

Why isn't every field always filled? Only populated fields are included (strict no-null policy). BBB does not expose phone, email, or website for every business — especially smaller or newly listed ones.

What BBB rating grades are possible? A+, A, A-, B+, B, B-, C+, C, C-, D+, D, D-, F. Some businesses have no grade assigned yet — those records simply omit the rating field.