BBB Business Scraper — Ratings & Complaints
Pricing
from $20.00 / 1,000 bbb profile scrapeds
BBB Business Scraper — Ratings & Complaints
Extract BBB business profiles, ratings, accreditation, contacts, reviews, complaints, categories, and trust signals from public BBB.org pages.
Pricing
from $20.00 / 1,000 bbb profile scrapeds
Rating
0.0
(0)
Developer
Muhammad Afzal
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
2 days ago
Last modified
Categories
Share
BBB Business Scraper — Ratings, Accreditation & Complaints
Extract public Better Business Bureau (BBB) business profiles from BBB.org into clean, structured JSON. The actor supports keyword and location searches, direct BBB search URLs, and individual BBB profile URLs. It returns business identity, contact details, address, categories, BBB rating, accreditation status, years in business, review and complaint counts, and optional public review or complaint snippets.
This is designed for B2B lead generation, vendor due diligence, contractor research, business-reputation monitoring, market intelligence, and AI-agent workflows. Every dataset row has the same field shape and includes profile_url, source_url, and scraped_at for traceability.
What it extracts
- Business name, canonical BBB profile URL, country, address, phone, and public email
- Public business website and additional websites listed on the profile
- BBB letter rating and accreditation status
- Years in business, BBB file opened date, business started date, entity type, and local BBB office
- BBB business categories and products/services
- Customer review rating and count when exposed by the public profile
- Complaint count when exposed by the public profile
- Optional visible review snippets and complaint summaries
- Public management contacts, payment methods, and operating hours when available
BBB content changes by profile, country, local BBB office, and the current public page layout. Missing values are returned as null; optional collections are returned as empty arrays. The actor does not invent contact information or infer a rating when BBB does not display one.
Input modes
Search mode
Use searchQuery and optionally location:
{"searchQuery": "roofing contractor","location": "Austin, TX","country": "US","maxResults": 25}
The actor builds BBB directory search URLs and visits up to maxPagesPerSearch pages. If location is blank, BBB receives a nationwide/category search.
Direct URL mode
Use startUrls for BBB search pages or profile pages:
{"startUrls": [{ "url": "https://www.bbb.org/us/az/phoenix/profile/plumber/quail-plumbing-inc-1126-26001867" }],"includeReviews": true,"includeComplaints": true,"maxResults": 10}
Search URLs discover profile links. Profile URLs are parsed directly. Search and profile URLs can be mixed in one run.
Input reference
| Field | Default | Description |
|---|---|---|
searchQuery | plumber | BBB business name, category, keyword, phone, website, or email search. |
location | Phoenix, AZ | City, state, ZIP, or postal code. |
country | US | US or CA. |
startUrls | [] | BBB search or profile URLs. |
maxResults | 10 | Maximum profile records returned and charged. |
maxPagesPerSearch | 3 | Search pages visited per generated or supplied search URL. |
includeReviews | false | Parse visible public review snippets. |
includeComplaints | false | Visit the public complaints tab and parse visible summaries. |
proxyConfiguration | Residential | Optional Crawlee proxy configuration. |
Output example
{"business_name": "Quail Plumbing Inc","profile_url": "https://www.bbb.org/us/az/phoenix/profile/plumber/quail-plumbing-inc-1126-26001867","source_url": "https://www.bbb.org/us/az/phoenix/profile/plumber/quail-plumbing-inc-1126-26001867","scraped_at": "2026-08-02T12:00:00.000Z","country": "US","address": "21831 N 16th Street, Phoenix, AZ 85024-5607","phone": "(623) 780-2233","email": null,"website": null,"categories": ["Plumber", "Drain Cleaning"],"description": "This business offers full service 24-hr plumbing.","bbb_rating": "A+","is_accredited": true,"years_in_business": 35,"review_rating": null,"review_count": null,"complaint_count": null,"reviews": [],"complaints": []}
Additional structured fields are always present in every output row, including management contacts, additional websites, payment methods, and hours.
Pricing
This actor is configured for predictable pay-per-event pricing:
| Event | Price |
|---|---|
| Actor start | $0.00005 per run scaled by allocated memory |
| BBB profile scraped | $0.02 per normalized profile record |
The actor charges only after a complete schema-consistent profile record is stored. The run logs the maximum possible profile charge before crawling and stops gracefully if an Apify PPE event limit is reached. Heavy users may also use Apify's usage-based compute and proxy billing when enabled on the actor.
Proxy configuration
BBB pages can be protected by rate limits or bot checks. The default uses Apify residential routing for US directory content. For an external proxy, set these environment variables in the actor's runtime configuration rather than placing credentials in input or source code:
BBB_PROXY_USERNAMEBBB_PROXY_PASSWORDBBB_PROXY_HOSTBBB_PROXY_PORT
The actor uses the supplied external proxy when both username and password are available; otherwise it falls back to Apify residential routing. Use a country-appropriate proxy for Canadian content.
Reliability and limitations
- The actor uses Playwright, a session pool, persistent cookies per session, randomized viewport sizes, delays, and retry handling for transient requests.
- BBB is a public directory, but profile completeness varies. Some profiles expose phone and website links but no email, review count, or complaint count.
- Review and complaint parsing is intentionally limited to content publicly rendered on the profile or complaints tab. It does not bypass login or private data controls.
maxResultsis a hard cap on records and billing. A search page may be visited without producing a record when it contains no public profile links.- Use reasonable page limits and respect BBB's public site rules, published policies, and rate limits.
Run locally
npm installnpm run buildapify run
Run through the API
curl -X POST "https://api.apify.com/v2/acts/USERNAME~bbb-business-scraper/runs?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"searchQuery":"plumber","location":"Phoenix, AZ","maxResults":10}'
Export the dataset as JSON, CSV, Excel, or connect the actor to downstream workflows through the Apify API, webhooks, schedules, or MCP-compatible integrations.
Export scraped data, run the scraper via API, schedule and monitor runs, or integrate with other tools.