BBB Scraper — Ratings, Accreditation & Contacts
Pricing
from $4.00 / 1,000 business founds
BBB Scraper — Ratings, Accreditation & Contacts
Scrape Better Business Bureau (bbb.org) businesses by keyword + location or profile URL. Returns BBB rating, accreditation, phone, website, address & contacts. MCP/API-ready.
Pricing
from $4.00 / 1,000 business founds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
0
Bookmarked
7
Total users
2
Monthly active users
a month ago
Last modified
Categories
Share
What is BBB Scraper — Ratings, Accreditation & Contacts?
BBB Scraper extracts Better Business Bureau (bbb.org) business profiles into a dataset, one row per business, from a keyword plus location search or from profile URLs. Each row returns the BBB letter rating, accreditation status and date, years in business, entity type, categories, phone, website, full address with coordinates, opening hours, complaint counts and listed management contacts. Lead-generation teams, vendor due-diligence analysts, reputation researchers and AI agents use it to build trusted lists of US and Canadian local businesses.
Why teams use this BBB scraper
- Trust signals in one row.
bbbRating,isAccredited,dateAccreditedandyearsInBusinessshow standing at a glance. - Complaint history.
complaintsCount,complaintsClosedLast3YearsandcomplaintsClosedLast12Monthssupport due-diligence checks. - Outreach-ready contacts.
phone,website,formattedAddressandcontacts(name and title) come with each enriched profile. - Map-ready.
latitudeandlongitudeplace each business on a map. - Filters for clean lists.
minRatingandaccreditedOnlykeep only the businesses you want. - Two depths. Enriched profiles by default, or lighter listing rows with
enrichDetailsset tofalse.
Best fit and related Actors
Best fit for US and Canadian service businesses where BBB standing matters: contractors, plumbers, HVAC, roofers, movers and other local trades, plus supplier checks before signing a contract.
- For broader local coverage with reviews and photos, use Google Maps Leads Scraper alongside this Actor.
- To find email addresses behind the
websitecolumn, then pass the websites to Bulk Website Contact Extractor.
Example workflow: from a trade and city to a vetted lead list
A home-services marketplace starts with searchKeyword set to plumber, location set to Los Angeles, CA, accreditedOnly set to true and minRating set to A. The dataset returns each plumber's businessName, bbbRating, yearsInBusiness, phone, website and complaintsCount. They sort by yearsInBusiness, drop businesses with open complaints, and export the shortlist to their partner-onboarding sheet. A monthly schedule per metro area keeps the list current and lets them compare ratings over time.
How to scrape BBB
- Enter a Search keyword such as
hvac contractorand a Location asCity, ST, or paste profile URLs in BBB profile URLs. - Choose Country, set Max results, and optionally Minimum BBB rating or BBB-accredited businesses only.
- Click Start, then export the dataset as JSON, CSV or Excel, or read it through the API.
Input
{"searchKeyword": "plumber","location": "Los Angeles, CA","country": "US","maxResults": 20,"enrichDetails": true,"minRating": "Any","accreditedOnly": false}
| Field | Type | What it controls |
|---|---|---|
searchKeyword | string | Business type or name, for example plumber or general contractor. |
location | string | City, ST for the US or City, Province for Canada. Optional. |
country | string | US or CA. Default US. |
startUrls | array | Direct bbb.org/.../profile/... URLs to scrape in depth. |
maxResults | integer | Businesses to return across the run. Default 100. |
enrichDetails | boolean | Open each profile for full detail. Default true. |
minRating | string | Minimum BBB letter rating, from A+ to F, or Any. |
accreditedOnly | boolean | Keep only BBB-accredited businesses. Default false. |
storeRawSample | boolean | Save a raw page sample to the key-value store for inspection. Default false. |
proxyConfiguration | object | Apify Residential proxy pinned to the chosen country by default. |
Output
One dataset row per business.
| Field | What it contains |
|---|---|
businessName, altBusinessNames | Business name and other registered names |
bbbId, url | BBB business ID and profile URL |
bbbRating | Letter rating from A+ to F |
isAccredited, accreditationStatus, dateAccredited | Accreditation flag, label and date |
businessStarted, incorporatedDate, bbbFileOpened, yearsInBusiness | Business history |
entityType | Corporation, LLC and similar |
categories, primaryCategory | BBB business categories |
phone, website | Contact details |
street, city, state, postalCode, country, formattedAddress | Address |
latitude, longitude | Coordinates |
complaintsCount, complaintsClosedLast3Years, complaintsClosedLast12Months | Complaint history |
ratingCount, averageStarRating | Customer review signals when published |
contacts | Listed management contacts with name and title |
hours | Opening hours by weekday |
logo | Business logo when published |
scrapedFrom, scrapedAt | profile or search, and the collection time |
The schema also includes email, numberOfEmployees, additionalWebsites and servingArea, filled when the BBB profile publishes them.
{"businessName": "Fords Plumbing","altBusinessNames": ["Robert Ford Plumbing And Heating, Inc."],"bbbId": "1216-100081178","url": "https://www.bbb.org/us/ca/los-angeles/profile/plumber/fords-plumbing-1216-100081178","bbbRating": "A+","isAccredited": true,"accreditationStatus": "BBB Accredited Business","dateAccredited": "2010-10-04","businessStarted": "1962-09-11","incorporatedDate": "2007-08-06","yearsInBusiness": 64,"entityType": "Corporation","categories": ["Plumber", "Sewer Contractors", "Leak Detection", "Water Heater Installation", "Drain Cleaning"],"primaryCategory": "Plumber","phone": "(310) 815-1515","email": null,"website": "https://www.fordsplumbingandheating.com/","street": "5818 Venice Blvd","city": "Los Angeles","state": "CA","postalCode": "90019-5019","country": "US","formattedAddress": "5818 Venice Blvd, Los Angeles, CA 90019-5019","latitude": 34.049841,"longitude": -118.33846,"ratingCount": 0,"averageStarRating": null,"complaintsCount": 1,"complaintsClosedLast3Years": 1,"complaintsClosedLast12Months": 1,"contacts": [{ "name": "Jordan Example", "title": "President" },{ "name": "Casey Example", "title": "Manager" }],"hours": { "monday": "Open 24 Hours", "tuesday": "Open 24 Hours" },"logo": null,"scrapedFrom": "profile","scrapedAt": "2026-10-01T13:34:50.492Z"}
Contact names in this example are fictional placeholders.
Pricing
This Actor uses Pay per event with Apify platform usage included in the event price. Each business is charged once: a Profile enriched event when its full profile is scraped (the default, and every profile URL), or a Business found event when enrichDetails is false and only listing fields are returned. Each run also has one Actor Start event.
Worked example in words: an enriched search capped at twenty businesses costs twenty Profile enriched events plus one Actor Start event. The same search with enrichment off costs twenty Business found events instead. Check the live Pricing tab on this page for current event prices.
API example
curl -X POST "https://api.apify.com/v2/acts/khadinakbar~bbb-scraper/run-sync-get-dataset-items?token=YOUR_API_TOKEN" \-H "Content-Type: application/json" \-d '{"searchKeyword": "hvac contractor", "location": "Austin, TX", "maxResults": 25, "accreditedOnly": true}'
from apify_client import ApifyClientclient = ApifyClient("YOUR_API_TOKEN")run = client.actor("khadinakbar/bbb-scraper").call(run_input={"searchKeyword": "roofing contractor","location": "Toronto, ON","country": "CA","maxResults": 30,"minRating": "A",})for biz in client.dataset(run["defaultDatasetId"]).iterate_items():print(biz["businessName"], biz["bbbRating"], biz["phone"], biz["yearsInBusiness"])
Use with AI agents (MCP)
Connect the Actor to Claude, ChatGPT, Cursor or any MCP client through Apify MCP and ask:
Find 20 BBB-accredited plumbers in Los Angeles with an A rating or better. Return name, rating, years in business, phone, website and complaint count.
The agent sets searchKeyword, location, accreditedOnly and minRating, reads rows back from the dataset, and cites each business by url and scrapedAt. maxResults sets the cost scope before the run starts.
Best results
| Starting situation | Helpful action | Expected outcome |
|---|---|---|
| A large metro target | Run one search per city or suburb and merge on bbbId | Wider coverage than a single search page set |
| Listing fields are enough | Set enrichDetails to false | Faster, lighter rows |
| A vetted partner list | Combine accreditedOnly with minRating set to A | Only well-rated accredited businesses |
| Known businesses to check | Paste their profile URLs in startUrls | Full detail for exactly those businesses |
| Canadian markets | Set country to CA and location to City, Province | Results from the Canadian BBB directory |
| Due diligence | Read complaintsClosedLast12Months and dateAccredited together | A quick view of recent standing |
Builder's note
I built this Actor around BBB's trust signals because they are what Google Maps data leaves out: accreditation, letter ratings, complaint history and business age. I designed enrichment as the default since contacts, hours and history live on the profile page, and kept a lighter listing mode with its own event for runs that only need names and ratings. I found that rating and accreditation filters are most useful after enrichment, so they apply once each profile is read.
FAQ
Which countries does it cover?
The United States and Canada, chosen with country.
How do I collect more than one search returns?
Run several locations, for example one per metro area or suburb, and merge the datasets on bbbId.
Why are some fields empty?
BBB publishes different details for different businesses. Fields such as email and averageStarRating are filled when the profile shows them.
Which proxy should I use?
Keep the default Apify Residential proxy pinned to the chosen country.
Responsible use
This Actor collects publicly available business-directory information from bbb.org. Use it in line with BBB's terms of service and applicable laws. Profiles can list names of owners and managers, which are personal data under laws such as the CCPA and Canada's PIPEDA, so use them only with a lawful basis and honor opt-outs before outreach. BBB is a trademark of its owner; this independent Actor is not affiliated with or endorsed by the Better Business Bureau.