BBB Scraper: Ratings, Accreditation, Complaints, Reviews
Pricing
from $1.50 / 1,000 businesses
BBB Scraper: Ratings, Accreditation, Complaints, Reviews
Search bbb.org (US and Canada) by keyword and city, state or ZIP, or paste BBB profile URLs. Get BBB rating, accreditation date, phone, website, years in business, complaint and review counts. Optional review and complaint text. Status rows are free.
Pricing
from $1.50 / 1,000 businesses
Rating
0.0
(0)
Developer
Dottti
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Security
Limited permissionsShare
Get Better Business Bureau (bbb.org) data for businesses in the United States and Canada. Search by category or keyword and a city, state or ZIP code. You can also paste BBB profile links. Each business comes back as one flat row with its BBB letter grade, accreditation status, categories, phone numbers, address, map position, and the number of public complaints and customer reviews.
You can also add the public customer reviews and complaints of each business. They come as separate rows at a lower price.
You need no BBB account and no API key.
Who uses it
- Lead generation teams who build lists of local contractors, dentists, lawyers or shops with phone numbers and addresses.
- Due diligence and vendor checks. See a supplier's BBB grade, accreditation and complaint history before you sign.
- Insurance, lending and risk teams who score small businesses with BBB grades and complaint counts.
- Agencies and reputation managers who track BBB ratings and complaints for their clients on a schedule.
- Researchers who compare complaint types across a category or a city.
What you can do
- Search many terms in many locations in one run. Each term runs in each location.
- Paste BBB profile URLs. Review and complaint sub-page links work too.
- Keep only accredited businesses, or only businesses with a minimum BBB grade (for example A- or better).
- Get the number of complaints and reviews for every business, and the average stars when a business has 15 reviews or fewer.
- Add customer reviews (stars, date, text, business reply) and complaints (type, status, date, text, business response).
- Canadian locations such as
Toronto, ONorM4S 2N4switch the search to Canada on their own.
Input examples
Roofers in two Texas cities, accredited only:
{"searchTerms": ["roofing"],"locations": ["Austin, TX", "Dallas, TX"],"accreditedOnly": true,"maxResultsPerSearch": 100}
Plumbers and electricians in three ZIP codes, A- or better:
{"searchTerms": ["plumber", "electrician"],"locations": ["10001", "60614", "94103"],"minRating": "A-","maxResultsPerSearch": 50}
Check a list of known businesses, with their newest complaints:
{"profileUrls": ["https://www.bbb.org/us/tx/austin/profile/roofing-contractors/fiducia-roofing-restoration-0825-90019908","https://www.bbb.org/ca/on/toronto/profile/dentist/central-dental-group-0107-1374844"],"includeComplaints": true,"maxComplaintsPerBusiness": 30}
With empty input the actor runs a small example: 10 roofing businesses in Austin, TX.
Output
Every row has a type field: business, review, complaint, search or status.
A business row (real data from bbb.org, 3 November 2026):
{"type": "business","name": "Stevan Buren Roofing, Windows, and Flooring","bbbRating": "A+","accredited": true,"primaryCategory": "Roofing Contractors","categories": ["Roofing Contractors", "Siding Contractors", "Windows", "Window Installation"],"phone": "(817) 558-6997","additionalPhones": ["(210) 686-1425", "(214) 432-2593", "(512) 275-6159"],"street": "108 Wild Basin Rd Suite 250","city": "Austin","state": "TX","postalCode": "78746","country": "US","latitude": 30.30679702758789,"longitude": -97.8266830444336,"complaintsTotal": 1,"reviewRating": 5,"reviewsCount": 2,"localBbb": "BBB Heart of Texas","profileUrl": "https://www.bbb.org/us/tx/cleburne/profile/roofing-contractors/stevan-buren-roofing-windows-and-flooring-0825-235975973","bbbId": "0825","businessId": "235975973","detailLevel": "search","searchTerm": "roofing","searchLocation": "Austin, TX"}
A complaint row:
{"type": "complaint","businessName": "RR Plumbing Roto-Rooter","complaintType": "Billing Issues","complaintStatus": "Answered","date": "2026-10-22","text": "I used this company to deal with water damage in my basement due to burst pipe. ...","businessResponse": "We have received the complaint and will review ...","responses": [{ "from": "business", "date": "2026-10-23", "text": "..." }],"profileUrl": "https://www.bbb.org/us/oh/cincinnati/profile/plumber/roto-rooter-plumbing-water-cleanup-0292-1922"}
A review row has stars, date, text, businessResponse and businessResponseDate. Reviewer names are left out on purpose. BBB already masks personal details inside complaint and review text.
Each search gets one free search row. It shows how many results BBB has, how many were delivered, how many your filters skipped, and a status: ok, no_results, location_not_found or blocked. A bad or missing profile URL gets a free status row (invalid_input, not_found or blocked).
reviewRating is filled only when it is exact: the business has 15 reviews or fewer, so every star is counted.
Full profile fields (experimental). Turn on includeProfileDetails to also try each profile page for website, accreditation date, years in business, entity type, social links and closed-complaint counts (last 3 years and 12 months). bbb.org often refuses these pages to cloud servers. When that happens the row keeps the search data, detailLevel stays search, and after 3 refusals the run stops trying. When a page is read, detailLevel is full.
The run summary (key-value store, RUN_SUMMARY) lists every input, profile pages read or refused, requests, kB used and the proxy tier used.
How to schedule
Save your input as a task in Apify Console, then add a schedule (for example every Monday). Use the dataset API or an integration (Google Sheets, Slack, webhooks) to send the rows where you need them.
Pricing
You pay per result row. Platform usage is included in the price.
- Business row: one charge per business delivered.
- Review or complaint row: one charge per row, at a lower price. Only charged when you turn these on.
- Search and status rows are free. You never pay for a blocked page, a bad URL, a location BBB does not know, or a business your filters skipped.
You can set a maximum cost per run in Apify Console. The actor stops cleanly when it reaches that limit.
Limits
- BBB shows at most 225 results (15 pages) per search. For bigger areas, split by city or ZIP code, or use narrower terms.
- If BBB does not recognise a location, it shows a nationwide list. The actor then returns a free
location_not_foundrow and delivers nothing for that search. - The same business found by two searches is delivered once.
- Accreditation flags in Canadian search results can be incomplete.
- Website, years in business and accreditation date come only from profile pages, which bbb.org often refuses to cloud servers (see above).
- The actor reads public BBB pages only. It never logs in and never collects the names of reviewers or complainants.