· 14 min read
Better Business Bureau Scraper: 40 Data Fields per Record (2026)
Each scraped record carries up to 40 output fields, including the BBB rating, accreditationStatus, principalContacts, phones, and yearsInBusiness. A thousand results cost $2.00 on the free plan, allowing you to extract deep contact details, coordinates, and licensing records for companies across the United States and Canada. This data collector is built for sales development teams, compliance officers, and market analysts who need verifiable trust indicators. It is not for anyone who requires email addresses for every record, as emails are only returned if a business publishes them on its public BBB profile.
Try it before you read further. Apify's free plan includes $5.00 of usage every month with no credit card, enough for up to 2,500 results at $0.002 each before platform usage. Open Better Business Bureau Scraper on Apify and run the prefilled example.
How reliable is Better Business Bureau Scraper in production?
Across the last 30 days of public runs on the Apify platform, Better Business Bureau Scraper recorded 1,047 runs with the following outcomes.
| Outcome | Runs | Share |
|---|---|---|
| Succeeded | 1,014 | 96.8% |
| Failed | 0 | 0.0% |
| Aborted by the user | 6 | 0.6% |
| Timed out | 27 | 2.6% |
| Total | 1,047 | 100.0% |
Practitioners running this Actor unattended can expect about three runs in a hundred to fail or time out, which is a low rate of disruption for web-scale extraction. To build a robust pipeline, schedule regular runs and implement automated retries or email alerts to handle these infrequent issues. Aborted runs reflect manual interventions rather than system errors.
What does it cost to run Better Business Bureau Scraper?
Each result costs $0.002 on Apify's free plan, which is $2.00 per 1,000 results. Starting a run is charged separately at $0.005 per GB of Actor memory. Apify also bills the platform usage each run consumes, at the rates of your Apify plan, on top of these charges.
| Apify plan | Per result | Per 1,000 results |
|---|---|---|
| FREE | $0.002 | $2.00 |
| BRONZE | $0.00167 | $1.67 |
| SILVER | $0.00133 | $1.33 |
| GOLD | $0.001 | $1.00 |
| PLATINUM | $0.001 | $1.00 |
| DIAMOND | $0.001 | $1.00 |
Worked example: collecting 10,000 results costs $20.00 in result charges before run-start fees and platform usage. With 2.6% of runs failing or timing out in the last 30 days, budget for re-running a portion of those batches rather than assuming every run completes.
The includeDetails control has the most significant impact on your final bill because opening each profile page consumes more platform resources. If you only need base contact details, disabling this option will retrieve listing-only results much faster. Run a small test using a limited maxRecordsGlobal value first to check your search parameters before conducting a full-scale profile extraction.
How do you run Better Business Bureau Scraper from the API?
The schema marks 1 of its 12 controls as required: keywords. Every value in the payload below comes from the published schema's own prefills, which means you can paste it, swap the token, and get a real result.
Call the synchronous endpoint to start a run and receive dataset items in one request:
curl -X POST "https://api.apify.com/v2/acts/crawlerbros~bbb-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"keywords":"plumber"}'
The same run from Python, using the official client:
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
"keywords": "plumber"
}
run = client.actor("crawlerbros~bbb-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)
And from Node.js:
import { ApifyClient } from 'apify-client'
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' })
const input = {
"keywords": "plumber"
}
const run = await client.actor('crawlerbros~bbb-scraper').call(input)
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)
That endpoint blocks until the run completes. Fine while you are testing a handful of records, risky once a run takes minutes: a dropped connection loses the response even though the run itself finished. Switch to an asynchronous start with polling or a webhook before you schedule anything.
Which Better Business Bureau Scraper inputs matter, and which can you skip?
The keywords field is the only required input and accepts categories like "plumber" or direct corporate names. For broader regional sweeps, use the locations array to enter specific postal codes or cities, leaving the stateFilter and advanced proxy options empty on your first run.
keywords(string): What to search for on BBB: a business category (plumber, electrician, roofing, auto repair) or a company name. Default:"plumber".locations(array): Optional cities or postal codes, e.g. 'Chicago, IL', '10001', 'Toronto, ON'. Each is searched separately; businesses found twice are returned once. Leave empty for a country-wide search.countries(string): BBB directory to search. Default:"US".maxRecordsGlobal(integer): Maximum number of businesses for the whole run, across all locations. Default:3.maxRecordsPerLocation(integer): Maximum per location (0 = no per-location limit). BBB shows up to 225 businesses per search, so use several locations for more. Default:50.includeDetails(boolean): Also open each business's BBB profile for website, emails, contacts, dates, hours, licences, social links, reviews and complaints. Turn off for faster runs with search-listing data only. Default:true.includeBranchLocations(boolean): BBB lists some businesses once per location (branches, franchises, service addresses). Off: one record per business. On: one record per listed location, each with its own address, phone and coordinates. Default:false.minRating(string): Only businesses rated at least this grade (businesses without a rating are excluded when set). Default:"any".accreditedOnly(boolean): Only return BBB Accredited Businesses. Default:false.sortBy(string): Order of BBB search results. Default:"relevance".stateFilter(string): Optional two-letter state or province code (e.g. IL, ON) to keep results from one state when a search area spans several.proxyConfiguration(object): Optional. BBB is fetched directly first; Apify proxies are used automatically only if needed. Choose your own proxy to use it as the fallback, or 'No proxy' to stay direct.
Fixed-choice controls: countries accepts US (United States), CA (Canada); minRating accepts 14 values (default any), including any, A+, A (A or better), A- (A- or better); sortBy accepts relevance (Best match), rating, distance, aToZ (Name A-Z), zToA (Name Z-A).
What does Better Business Bureau Scraper return?
The returned datasets are structured for cold outreach campaigns, localized competitor mapping, and vendor compliance checks. They do not contain unlisted corporate phone lines or private financial documentation, as the scraper only structures the public pages of the directory.
type(e.g.bbb_business)url(e.g.https://www.bbb.org/us/il/chicago/profile/gen...)name(e.g.Sullivan Lane, Inc.)id(e.g.0654-1000012025)bbbId(e.g.0654-1000012025)businessId(e.g.1000012025)bureauId(e.g.0654)primaryCategory(e.g.General Contractor)categoriesrating(e.g.A+)bbbMember(e.g.true)accreditationStatus(e.g.Accredited)dateAccredited(e.g.2025-12-26)phone(e.g.(312) 772-5701)phoneswebsite(e.g.https://sullivanlaneinc.com/)addresslatitude(e.g.41.885445)longitude(e.g.-87.622612)contactName(e.g.Mr. Amon Nickerson)contactTitle(e.g.President)principalContactsfileOpenedDate(e.g.2020-07-22)businessStarted(e.g.2019-08-08)businessIncorporatedDate(e.g.2019-08-08)yearsInBusiness(e.g.7)businessType(e.g.Corporation)hoursOfOperationlogo(e.g.https://m.bbb.org/prod/ProfileImages/2026/24b...)bbbBureau(e.g.BBB of Chicago & Northern Illinois)reviewCount(e.g.0)complaintCount(e.g.0)complaintsClosedLast3Years(e.g.0)complaintsClosedLast12Months(e.g.0)hasMultipleLocations(e.g.true)reviewsUrl(e.g.https://www.bbb.org/us/il/chicago/profile/gen...)complaintsUrl(e.g.https://www.bbb.org/us/il/chicago/profile/gen...)searchKeywords(e.g.plumber)searchLocation(e.g.Chicago, IL)scrapedAt(e.g.2026-10-07T18:00:00Z)
These are the documented fields. Optional ones can be empty on a given record, so measure how often each field your deliverable depends on is populated across a real sample before automating the handoff.
How do you build the workflow end to end?
Open Better Business Bureau Scraper and work through these in order. Each step ends with something to check, so a bad configuration surfaces on a small run rather than a scheduled one.
- Run a test with keywords set to a specific business name like "Roto-Rooter" and maxRecordsGlobal to 5 to confirm basic output layout.
- Verify that the returned records populate essential trust signals like rating and accreditationStatus before expanding the search scope.
- Add specific target cities or postal codes into the locations array, such as "Toronto, ON" or "60601-6769", keeping each entry separate.
- Set includeDetails to true to open each BBB profile and capture extended fields like principalContacts, emails, and yearsInBusiness.
- Toggle includeBranchLocations to true if your CRM requires a separate row for every distinct branch, franchise, or physical service location.
- Review the final dataset output in the "Businesses" and "Contacts" table views to verify that the bbbMember boolean and phones array match your system structure.
How do you apply it? Three worked playbooks
These are Better Business Bureau Scraper's own documented use cases, each worked through as an operating pattern rather than a description.
Use case 1: Lead generation
Outcome: Local service businesses with phones, emails, websites and contact names
Configure: Set keywords to "plumber", locations to ["Chicago, IL"], countries to "US", and includeDetails to true.
Working method: Initiate a run targeting localized contractors. Examine the returned principalContacts array and check the first few records to ensure that the contactName, contactTitle, and emails fields contain valid sales development targets.
Deliverable: A spreadsheet of verified local service businesses featuring active phone numbers, websites, and direct executive contact profiles.
Stop condition: The website and phone fields are blank or missing in more than eighty percent of the scraped profile records.
Use case 2: Vendor and contractor vetting
Outcome: BBB rating, accreditation, complaints and years in business
Configure: Set keywords to "roofing", countries to "US", minRating to "A", and accreditedOnly to true.
Working method: Query regional contractors using strict quality parameters. Verify that all returned records feature rating scores of A or higher, inspect the yearsInBusiness field, and check complaintCount values.
Deliverable: A compliance report listing approved roofing companies with their BBB grade letters, accreditation dates, and historical complaint counts.
Stop condition: A business with a rating below the specified minRating threshold is written to the dataset.
Use case 3: Market research
Outcome: Count and compare businesses by category, city and rating
Configure: Set keywords to "auto repair", countries to "CA", locations to ["Toronto, ON", "Ottawa, ON", "Vancouver, BC"], and includeDetails to false.
Working method: Execute a fast search across multiple metropolitan areas with profile details disabled. Group the final dataset by the primaryCategory, searchLocation, and rating fields to map competitor densities.
Deliverable: A market density database segmenting automotive businesses by municipal location, BBB rating distribution, and branch presence.
Stop condition: The dataset fails to return location-specific records or misses the primaryCategory identifier for more than ten percent of entries.
What breaks, and how do you design around it?
- Over the last 30 days, 0.0% of public runs failed and 2.6% timed out. Build retries and alerting around those rates rather than assuming every run completes.
BBB restricts search listings to 225 businesses per location query. To bypass this barrier, supply a list of granular postal codes or neighborhood names in the locations array instead of a single major city. This prompts the scraper to run multiple smaller queries and aggregate the distinct records.
When should you not use Better Business Bureau Scraper?
Do not use this Actor if you are seeking business intelligence, ratings, or contact coordinates for European companies, as the Better Business Bureau directory exclusively covers North American businesses. If you need European directory data, you should deploy an Actor tailored to that specific region. For Switzerland, use local.ch Scraper - Swiss Business Directory. For Greece, run Vrisko Scraper - Greek Business Directory (vrisko.gr). For Poland, utilize PanoramaFirm Business Directory Scraper. For Finland, use Finder.fi Business Directory Scraper. For Malta, utilize Soopage Malta Business Directory Scraper. For Portugal, run PaiPt Scraper - Portugal Business Directory (Paginas Amarelas). For Hungary, query AranyOldalak Scraper - Hungary Business Directory. For Spain, deploy Infoisinfo Business Directory Scraper.
What should you check before trusting the output?
- Verify that the rating field is present, and inspect the notRatedReason string if a business is ungraded.
- Check that the principalContacts array is populated with both name and title strings for executive-level targets.
- Confirm that the latitude and longitude fields contain valid numeric coordinates before exporting to mapping applications.
- Monitor the ratio of Accredited to Not Accredited values in the accreditationStatus field to ensure compliance filters are active.
- Verify that the output record count does not hit the 225-limit on single-location runs, which signals a need for more granular geographic inputs.
None of this proves a record is correct. It gives a scheduled Better Business Bureau Scraper run defined points where it should stop instead of quietly passing bad data downstream.
Frequently asked questions
What is the cost of running the Better Business Bureau Scraper?
The Actor charges $0.002 per result, which is $2.00 per 1,000 results on Apify's free plan. Apify's free plan includes $5.00 of monthly usage without a credit card, which covers up to 2,500 results of this Actor before standard platform usage costs are calculated.
How reliable is this scraper for automated workflows?
The Actor is highly stable. Over the last 30 days, 1,014 of 1,047 runs succeeded, demonstrating a 96.8% success rate. Only about 3 in a hundred runs failed or timed out, which can be managed with standard platform alert systems.
Can I extract email addresses and website URLs with this Actor?
Yes. When includeDetails is set to true, the scraper opens individual BBB profiles to extract website URLs, emails, and social links. While websites are frequently available, emails are only present if the business has voluntarily published them on BBB.
How do I work around the 225-result limit on BBB searches?
BBB restricts search result visibility to 225 items per query. To harvest larger databases, enter multiple neighborhoods or postal codes in the locations array. The scraper will query each location separately and automatically deduplicate the output records.
Why did my run complete successfully but return zero results?
This happens when your keywords have no matches in the designated locations, or when your minRating or accreditedOnly filters are too restrictive. Run a broad search with minRating set to "any" and accreditedOnly set to false to verify baseline listing availability.
Where to go next
When you are ready to run it, open Better Business Bureau Scraper on Apify; the free plan covers up to 2,500 results a month.
Start with the Better Business Bureau Scraper Actor page for the current input schema, pricing tier, and run history.
If you are comparing approaches rather than committing to one Actor, these category pages list every option we publish:
- Contact and email scrapers covers 43 Actors in this family.
Other Actors we maintain for related data:
- local.ch Scraper - Swiss Business Directory: Scrape local.ch, Switzerland's leading business directory.
- Vrisko Scraper - Greek Business Directory (vrisko.gr): Scrape vrisko.gr, Greece's leading business directory.
- PanoramaFirm Business Directory Scraper: Scrape PanoramaFirm.pl - Poland's major business directory.
- Finder.fi Business Directory Scraper: Scrape Finder.fi (Fonecta) - Finland's leading business directory.
- Soopage Malta Business Directory Scraper: Scrape mlt.soopage.com - Malta's business directory.
- PaiPt Scraper - Portugal Business Directory (Paginas Amarelas): Scrape pai.pt (Portugal's Yellow Pages / Paginas Amarelas business directory) listings.
- AranyOldalak Scraper - Hungary Business Directory: Scrape aranyoldalak.hu (Arany Oldalak), Hungary's leading business directory.
- Infoisinfo Business Directory Scraper: Scrape Infoisinfo, a leading Spain business directory.
Related guides:
- Finder.fi Business Directory Scraper: 3 Practical Use Cases
- Google Maps Leads Scraper: Up to 2,500 Free Results a Month (2026)
- Kiwi Directory Scraper - New Zealand Business Directory: Setup, Cost
- Google Maps Email Extractor: Up to 1,000 Free Results a Month (2026)
Resources
Actor documentation, input schema, and pricing: verified against the published Actor on 2026-10-09.
Actor last updated by its maintainers on 2026-10-08.
Run outcome figures cover the 30 day public window ending 2026-10-09.
Featured actors
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.
Run on Apify ↗