BBB Scraper avatar

BBB Scraper

Pricing

from $4.00 / 1,000 results

Go to Apify Store
BBB Scraper

BBB Scraper

Better Business Bureau (BBB) scraper & API: export US & Canada company profiles, BBB ratings & accreditation status, customer reviews & complaints, phone, address, website, category and years in business. B2B lead generation, due diligence and business reputation data — fast, no login.

Pricing

from $4.00 / 1,000 results

Rating

0.0

(0)

Developer

Haketa

Haketa

Maintained by Community

Actor stats

0

Bookmarked

150

Total users

13

Monthly active users

a day ago

Last modified

Features

Limited permissions

Share

BBB Scraper 🏛️ — Better Business Bureau Profiles, Ratings, Complaints & Accreditation (US + Canada)

Apify Actor

Extract full business profiles from the Better Business Bureau (BBB.org) across the United States and Canada. This BBB scraper and BBB.org data extractor turns any business category, company name, city, state, or ZIP code into a clean, structured dataset of companies — complete with BBB letter-grade ratings (A+ through F), accreditation status & start date, complaint counts, customer review scores, owner/principal names, phone numbers, websites, categories, and firmographics.

Export your results in bulk to JSON, CSV, Excel, XML, or via the Apify API for B2B lead generation, contractor & vendor vetting, KYB / business-credit risk analysis, M&A roll-up sourcing, and reputation monitoring.

💡 Built for: B2B sales and outbound teams, KYB / credit-risk analysts, contractor & procurement vetting teams, M&A due-diligence and home-services roll-up operators, reputation-management agencies, and market researchers who need verified BBB trust signals at scale.


⚡ At a glance

FeatureDetails
Target directoryBBB.org — 5M+ accredited and non-accredited businesses across the United States (USA) and Canada (CAN)
Search & discoverySearch by keyword + location (city, state/province, or ZIP/postal code), custom searchUrls, or built-in multi-metro discovery
Sorting & filteringSort by Relevance, Rating (highest BBB grade first), Distance, or Name; optional accreditedOnly: true filter
Fast search-card modeExtracts businessName, profileUrl, bbbId, bbbRating, phone, categories, city, state, zipCode directly from result pages
Deep profile enrichmentOptional scrapeDetails: true adds isAccredited, accreditationSince, ownerName, website, email, complaintsTotal, complaintsLast3Yrs, complaintsLast12Mo, reviewCount, averageReviewRating, yearsInBusiness, businessStartDate, businessType, numberOfEmployees, licenseNumbers, socialMedia, and description
Pagination & 1,000+ scaleAutomatic page traversal (maxPages: 0 auto mode) + automatic multi-metro expansion to collect 1,000+ unique businesses per run (0 duplicates)
Ad & noise removalAutomatically strips sponsored ad links and collapses sub-pages (/complaints, /customer-reviews, /details) to one canonical profile
AuthenticationNone required — 100% public directory extraction with no login or API keys
Export & integrationsJSON, CSV, Excel (XLSX), XML, HTML, RSS, Apify API, Google Sheets, Make, Zapier, n8n, HubSpot, Clay & webhooks

📋 Table of contents


🔎 Why scrape BBB.org?

The Better Business Bureau (BBB) is the largest business trust and reputation directory in North America, profiling more than 5 million companies across the United States and Canada. For local and regional B2B and consumer-facing industries — roofing contractors, HVAC installers, plumbers, electricians, solar companies, moving companies, auto repair shops, home builders, property managers, and financial services — a BBB profile is a primary trust benchmark.

What makes BBB data uniquely valuable is that it combines hard firmographics (company name, address, phone, website, owner/principal, entity type, start date, years in business, state licenses) with verified reputation and risk metrics (A+ to F letter rating, accreditation status, 12-month and 3-year closed complaint counts, and customer star ratings) that general map scrapers do not carry.

Collecting that data manually across dozens of cities and pages is slow and repetitive. This BBB scraper automates search, pagination, ad filtering, and optional profile enrichment so you can export hundreds or thousands of clean, deduplicated business records in a single run.

Common reasons teams scrape BBB:

  • 🎯 High-trust B2B lead generation — build outbound lists of established local-service companies filtered by BBB rating (A+ / A) and accreditation status.
  • 🛡️ KYB & commercial underwriting — enrich merchant onboarding and credit checks with BBB letter grades, complaintsLast12Mo, yearsInBusiness, and ownerName.
  • 🤝 M&A roll-up & private equity sourcing — screen home-services, construction, and specialty trade acquisition targets by longevity (yearsInBusiness >= 10), clean complaint records, and principal contact names.
  • 👷 Contractor & vendor panel vetting — verify that third-party contractors hold an acceptable BBB rating and active accreditation before awarding work.
  • 📉 Brand & franchise reputation monitoring — track rating changes, complaint spikes, and review scores across multi-location franchises on a weekly schedule.
  • 📊 Local-services market sizing (TAM) — count and map active, rated businesses across US and Canadian metropolitan areas by category.

✨ What this BBB scraper does

  • ✅ Flexible search modes — search by keyword + location + country (USA or CAN), paste custom BBB search URLs in searchUrls, or run with empty search inputs to collect a diverse multi-category sample.
  • ✅ Rich listing extraction (fast mode) — even with scrapeDetails: false, every record includes businessName, profileUrl, bbbId, bbbRating (A+–F), phone, categories, city, state, and zipCode.
  • ✅ Deep profile enrichment (scrapeDetails: true) — visits each company's BBB profile to extract isAccredited, accreditationSince, ownerName, website, email, address, complaintsTotal, complaintsLast3Yrs, complaintsLast12Mo, reviewCount, averageReviewRating, yearsInBusiness, businessStartDate, businessType, numberOfEmployees, licenseNumbers, serviceAreas, socialMedia, and description.
  • ✅ Automatic pagination & 1,000+ scaling — walks all available search result pages (maxPages: 0 automatic mode) and, when maxResults > 200, automatically expands across major metropolitan areas so single-keyword runs can reach 1,000+ unique businesses.
  • ✅ Sponsored ad & sub-page filtering — drops paid advertisement links and normalizes /details, /accreditation, /customer-reviews, and /complaints links to a single canonical profile URL.
  • ✅ Verified business-only social links — extracts the company's own Facebook, LinkedIn, Twitter/X, and Instagram profiles while filtering out BBB's site-wide social links.
  • ✅ United States & Canada coverage — switch country between USA and CAN to search any US state/ZIP or Canadian province/postal code.

🎯 High-value use cases

1. Outbound B2B sales to home-services & trade businesses

Agencies, SaaS platforms, fleet providers, insurance brokers, and material suppliers target local contractors (roofing contractor, HVAC, plumber, electrician, landscaping, pest control, solar energy). Sort by Rating or enable accreditedOnly: true to focus exclusively on established, creditworthy operators who invest in their business reputation.

2. M&A deal sourcing & founder outreach

Private equity roll-ups and search funds in home and commercial services use scrapeDetails: true to identify businesses with 10–30+ yearsInBusiness, A+ BBB ratings, zero recent complaints (complaintsLast12Mo: 0), and the owner/principal's full name (ownerName) for direct off-market acquisition outreach.

3. KYB, merchant risk & compliance screening

Fintechs, payment processors, and B2B lenders enrich merchant applications with BBB trust signals — automatically flagging applicants with D or F ratings or elevated complaintsLast12Mo counts before onboarding.

4. Multi-location reputation & compliance monitoring

Franchise networks and multi-state operators schedule recurring runs with their brand keyword or searchUrls to monitor bbbRating, complaintsLast12Mo, and averageReviewRating across every branch location.


📥 Input configuration

All fields are optional. Running with no keyword and no searchUrls automatically collects a diverse sample across popular trade categories and major US metros.

ParameterTypeDefault / PrefillDescription
keywordstringPrefill: "roofing contractor"Business category, trade, or company name (e.g. "plumber", "HVAC", "auto repair", "moving company"). Leave empty for a multi-category sample.
locationstringPrefill: "Dallas, TX"City + state/province, state alone, or ZIP/postal code (e.g. "Houston, TX", "Texas", "75201", "Toronto, ON").
countrystring"USA"Target country: "USA" (United States) or "CAN" (Canada).
sortstring"Relevance"Result order: "Relevance", "Rating" (highest BBB rating first), "Distance", or "Name".
accreditedOnlybooleanfalseWhen true, keeps only BBB-accredited businesses and skips non-accredited listings.
scrapeDetailsbooleanfalseWhen true, visits each business profile page to extract owner name, complaints, reviews, website, years in business, entity type, licenses, and social media.
maxResultsintegerDefault 0 (Prefill 45)Maximum businesses to collect (0 = unlimited). Supports 1,000+ businesses per run.
maxPagesinteger0 (auto)Max search pages per query (0 = automatic, paginates until maxResults is reached).
searchUrlsarray<string>[]Advanced: paste one or more ready-made BBB search URLs to scrape directly.
proxyConfigurationobject{ "useApifyProxy": false }Optional proxy settings. Works out of the box without proxy; enable Apify Proxy if running very large jobs.
requestDelayinteger500 (0–15000 ms)Pause between page requests in milliseconds.
maxConcurrencyinteger2 (1–2)Parallel detail-profile workers when scrapeDetails: true.

Input example 1 — Fast listing discovery (1,000+ businesses)

{
"keyword": "roofing contractor",
"location": "Dallas, TX",
"country": "USA",
"sort": "Rating",
"accreditedOnly": false,
"scrapeDetails": false,
"maxResults": 1000,
"maxPages": 0
}

Input example 2 — Full profile enrichment (owner, complaints, reviews & website)

{
"keyword": "HVAC",
"location": "Chicago, IL",
"country": "USA",
"sort": "Rating",
"accreditedOnly": true,
"scrapeDetails": true,
"maxResults": 100,
"maxPages": 0
}

Input example 3 — Custom multi-city search URLs

{
"searchUrls": [
"https://www.bbb.org/search?find_country=USA&find_loc=Houston%2C%20TX&find_text=plumber",
"https://www.bbb.org/search?find_country=USA&find_loc=Austin%2C%20TX&find_text=plumber",
"https://www.bbb.org/search?find_country=USA&find_loc=San%20Antonio%2C%20TX&find_text=plumber"
],
"scrapeDetails": false,
"maxResults": 500
}

📤 Output dataset & examples

Every dataset item uses a consistent, flat JSON schema so listing-only runs (scrapeDetails: false) and deep-profile runs (scrapeDetails: true) share the exact same columns for seamless CSV/Excel export and database ingestion.

Sample record — Fast listing mode (scrapeDetails: false)

{
"businessName": "Home Integrity Solutions LLC",
"profileUrl": "https://www.bbb.org/us/tx/dallas/profile/roofing-contractors/home-integrity-solutions-llc-0875-91349575",
"bbbId": "91349575",
"bbbRating": "A",
"isAccredited": null,
"accreditationSince": null,
"address": "4516 Lovers Ln",
"city": "Dallas",
"state": "TX",
"zipCode": "75225",
"phone": "(214) 498-6458",
"email": null,
"website": null,
"categories": ["Roofing Contractors", "Home Renovation", "Roof Inspection", "Roof Replacement"],
"serviceAreas": null,
"yearsInBusiness": null,
"businessStartDate": null,
"businessType": null,
"numberOfEmployees": null,
"ownerName": null,
"licenseNumbers": null,
"complaintsTotal": null,
"complaintsLast3Yrs": null,
"complaintsLast12Mo": null,
"complaintsResolved": null,
"reviewCount": null,
"averageReviewRating": null,
"socialMedia": null,
"governmentActions": null,
"description": null,
"searchKeyword": "roofing contractor",
"searchLocation": "Dallas, TX",
"scrapedAt": "2026-11-10T02:00:00.000Z"
}

Sample record — Deep profile mode (scrapeDetails: true)

{
"businessName": "Ecotech Roofing and Construction",
"profileUrl": "https://www.bbb.org/us/tx/dallas/profile/roofing-contractors/ecotech-roofing-and-construction-0875-90228991",
"bbbId": "90228991",
"bbbRating": "A+",
"isAccredited": true,
"accreditationSince": "8/10/2009",
"address": "3130 Harvard Ave Ste B",
"city": "Dallas",
"state": "TX",
"zipCode": "75219-5305",
"phone": "(972) 922-3606",
"email": null,
"website": "https://ecotechroofing.example",
"categories": ["Roofing Contractors", "Gutters", "Commercial Roofing", "Replacement Windows", "Storm Damage Repair", "Residential Roofing"],
"serviceAreas": null,
"yearsInBusiness": 17,
"businessStartDate": "2/23/2009",
"businessType": "Limited Liability Company (LLC)",
"numberOfEmployees": "25",
"ownerName": "Mr. Robert Burnley",
"licenseNumbers": null,
"complaintsTotal": 0,
"complaintsLast3Yrs": 0,
"complaintsLast12Mo": 0,
"complaintsResolved": null,
"reviewCount": 19,
"averageReviewRating": 4.95,
"socialMedia": {
"facebook": "https://www.facebook.com/ecotechroofing",
"instagram": "https://www.instagram.com/ecotechroofing/"
},
"governmentActions": null,
"description": "Full-service residential and commercial roofing contractor serving the Dallas–Fort Worth metroplex.",
"searchKeyword": "roofing contractor",
"searchLocation": "Dallas, TX",
"scrapedAt": "2026-11-10T02:00:05.000Z"
}

📊 Field reference & coverage

🏢 Core Identity, Location & Contact

FieldTypeListing ModeDetail Mode (scrapeDetails)Description
businessNamestring🟢 High (100%)🟢 High (100%)Official business or DBA name on BBB.
profileUrlstring🟢 High (100%)🟢 High (100%)Canonical BBB profile URL (unique primary key).
bbbIdstring🟢 High (100%)🟢 High (100%)Stable numeric BBB business ID.
phonestring | null🟢 High (~98%)🟢 High (~99%)Primary business telephone number.
addressstring | null🟢 High (~85%)🟢 High (~98%)Street address when published by the business.
citystring🟢 High (100%)🟢 High (100%)City name.
statestring🟢 High (100%)🟢 High (100%)Two-letter US state or Canadian province code.
zipCodestring | null🟢 High (~99%)🟢 High (100%)US ZIP code or Canadian postal code.
categoriesarray<string>🟢 High (100%)🟢 High (100%)Business categories assigned by BBB.
websitestring | null⚪ Detail only🟢 High (~75%)Direct company website URL (present when listed).
emailstring | null⚪ Detail only🟡 ConditionalContact email address when publicly exposed on the profile.
socialMediaobject | null⚪ Detail only🟡 Conditional{ facebook, linkedin, twitter, instagram } links for the business.

⭐ Trust, Ratings, Complaints & Reviews

FieldTypeListing ModeDetail Mode (scrapeDetails)Description
bbbRatingstring | null🟢 High (~99%)🟢 High (100%)Letter grade (A+, A, A-, B+, B, B-, C+, C, C-, D+, D, D-, F, or NR).
isAccreditedboolean | null🟡 Partial🟢 High (100%)Whether the company is an official BBB Accredited Business.
accreditationSincestring | null⚪ Detail only🟢 High (Accredited)Accreditation start date (M/D/YYYY).
complaintsTotalinteger | null⚪ Detail only🟢 High (100%)Total closed complaints on file.
complaintsLast3Yrsinteger | null⚪ Detail only🟢 High (100%)Closed complaints in the past 3 years.
complaintsLast12Mointeger | null⚪ Detail only🟢 High (100%)Closed complaints in the past 12 months.
reviewCountinteger | null⚪ Detail only🟢 High (100%)Total customer reviews published on the profile.
averageReviewRatingnumber | null⚪ Detail only🟡 ConditionalAverage customer star rating (1.0–5.0, when reviews exist).

📋 Firmographics, Ownership & Metadata

FieldTypeListing ModeDetail Mode (scrapeDetails)Description
ownerNamestring | null⚪ Detail only🟢 High (~92%)Principal, owner, or primary management contact name.
yearsInBusinessinteger | null⚪ Detail only🟢 High (~95%)Number of years operating.
businessStartDatestring | null⚪ Detail only🟢 High (~95%)Business start date (M/D/YYYY).
businessTypestring | null⚪ Detail only🟢 High (~90%)Entity structure (e.g. Limited Liability Company (LLC), Corporation).
numberOfEmployeesstring | null⚪ Detail only🟡 ConditionalReported employee count when disclosed.
licenseNumbersarray<string> | null⚪ Detail only🟡 ConditionalState/trade license numbers when listed on the BBB profile.
serviceAreasarray<string> | null⚪ Detail only🟡 ConditionalCities or counties served when listed.
descriptionstring | null⚪ Detail only🟡 ConditionalBusiness overview / about text.
searchKeyword / searchLocationstring🟢 High (100%)🟢 High (100%)Search query and location that returned the record.
scrapedAtstring🟢 High (100%)🟢 High (100%)ISO-8601 extraction timestamp.

🔁 Pagination & 1,000+ business scaling

BBB search pages display roughly 15 organic businesses per page, and BBB's search engine caps any single (keyword, location) query at 15 pages (~225 businesses). This Actor overcomes that ceiling automatically:

  1. Unbounded automatic page walking (maxPages: 0): By default, maxPages is set to 0 (automatic), so the scraper walks every available page for each search until maxResults is reached or no further pages exist.
  2. Automatic multi-metro expansion for 1,000+ runs: When you search by keyword and set maxResults > 200 (e.g. maxResults: 1000) with maxPages: 0, once your primary location's 15 pages are collected, the scraper automatically expands your keyword across major US or Canadian metropolitan areas to deliver 1,000+ unique businesses in a single run.
  3. Custom multi-URL batching (searchUrls): Want exact control over which cities or states are combined? Pass an array of BBB search URLs in searchUrls and set maxResults: 0 — the scraper walks every page of every URL and merges them.
  4. Global canonical URL deduplication: Every business is deduplicated by its normalized profileUrl across all pages and all searches (0% duplicate rate).

⚙️ How to use step by step

  1. Open BBB Scraper in the Apify Console and click Try for free.
  2. Enter a What to search for (keyword, e.g. "roofing contractor") and Where to search (location, e.g. "Dallas, TX"), or leave both empty for a diverse sample.
  3. Choose Country (USA or CAN), Sort results by, and whether to keep BBB-accredited businesses only.
  4. Leave Get full profile details (scrapeDetails) off for fast listing extraction, or turn it on to collect owner names, websites, complaint counts, and firmographics.
  5. Set Maximum businesses (maxResults) — e.g. 45 for a quick test, 500 or 1000 for a large lead list, or 0 for no limit.
  6. Click Start, then export your dataset as JSON, CSV, Excel, XML, or HTML from the Dataset tab.

🔌 API & automation integration

Python example

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("haketa/bbb-scraper").call(run_input={
"keyword": "roofing contractor",
"location": "Dallas, TX",
"country": "USA",
"sort": "Rating",
"scrapeDetails": True,
"maxResults": 200,
"maxPages": 0,
})
for biz in client.dataset(run["defaultDatasetId"]).iterate_items():
print(biz["bbbRating"], biz["businessName"], biz["phone"], biz["ownerName"], biz["website"])

Node.js example

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('haketa/bbb-scraper').call({
keyword: 'plumber',
location: 'Los Angeles, CA',
country: 'USA',
scrapeDetails: false,
maxResults: 500,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Collected ${items.length} BBB business profiles.`);

💡 Pro tips for best results

  • ⚡ Use two-stage workflows for large TAMs: Run with scrapeDetails: false first to rapidly collect 1,000+ businesses with businessName, bbbRating, phone, categories, and city/state/zipCode. Then enrich your top-tier subset with scrapeDetails: true.
  • 🏆 Combine sort: "Rating" + accreditedOnly: true when building high-conversion B2B sales lists — accredited A+ businesses answer phones and invest in vendor partnerships.
  • 🔑 Upsert on bbbId or profileUrl when syncing to Postgres, Snowflake, BigQuery, HubSpot, or Clay so weekly scheduled runs cleanly track rating or complaint changes.
  • 🇨🇦 Targeting Canada: Set country: "CAN" and pass a Canadian city/province or postal code (e.g. "Toronto, ON", "Vancouver, BC", "Calgary, AB").

❓ Frequently asked questions

Do I need a BBB account or API key? No. This Actor extracts public business directory data directly with no login, no cookies, and no API key.

How many businesses can I extract in one run? You can extract anywhere from a quick 45-item sample to 1,000+ unique businesses in a single run. With maxPages: 0 (the default), the scraper automatically walks all pages and expands across metros when maxResults > 200.

What is the difference between listing mode (scrapeDetails: false) and detail mode (scrapeDetails: true)? Listing mode extracts each search result card (businessName, profileUrl, bbbId, bbbRating, phone, categories, address, city, state, zipCode) at ~15 businesses per page load. Detail mode additionally opens each company's profile page to capture isAccredited, accreditationSince, ownerName, website, complaintsTotal/3Yrs/12Mo, reviewCount, averageReviewRating, yearsInBusiness, businessStartDate, businessType, licenseNumbers, and socialMedia.

Does it work for both US and Canadian businesses? Yes — select "USA" or "CAN" in the country dropdown.

Why are website, email, or licenseNumbers null on some detail records? Not every business discloses a website, public email, or state license number to the BBB. Fields that are not displayed on a company's BBB profile are returned as null so the dataset schema stays uniform.


⚠️ Limitations

  • BBB caps any single (keyword, location) search query at ~15 pages (~225 businesses); to reach 1,000+ businesses, keep maxPages: 0 (which automatically expands across metros) or supply multiple searchUrls.
  • Detail mode (scrapeDetails: true) opens an individual page per business and is naturally slower than listing-only mode.
  • Full narrative text of individual customer reviews and complaint threads lives on separate sub-pages; this Actor extracts the summary complaint and review counts and average star score.

Combine BBB reputation data with these complementary B2B and licensing scrapers:


📋 Changelog

v1.2 (2026-11)

  • Unlocked 1,000+ deep pagination & multi-metro scaling: Changed maxPages default to 0 (auto/unlimited governed by maxResults), removed the maxPages empty-run bottleneck when maxResults > 100, and added automatic US/Canada metro expansion when maxResults > 200 so single-keyword runs can collect 1,000+ unique businesses.
  • Fast prefill configuration: Set maxResults prefill to 45 (3 pages) for rapid < 60s test runs out of the box.
  • Memory ceiling & status handling: Updated maxMemoryMbytes to 4096 for smooth browser execution and guaranteed final status message persistence before exit.

v1.1 (2026-11)

  • Upgraded structured state extraction on search and profile pages, restoring ~100% bbbRating coverage on search cards and full firmographic/complaint enrichment on detail pages.

v1.0 (2026-07)

  • Initial release with US & Canada search, pagination, ad filtering, and optional full profile enrichment.
⌂ 换网址