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
1
Monthly active users
3 hours ago
Last modified
Categories
Share
BBB Business Scraper — Ratings, Accreditation & Complaints
Free-plan limit: Apify free-plan runs can return at most 5 dataset records per run from this Actor, even if you request more.
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 uses pay-per-event pricing. These are the current Apify Store event prices:
| Event | Price (USD) | When it is charged |
|---|---|---|
bbb-profile-scraped | $0.02 | BBB profile scraped — Charged for each normalized public BBB business profile successfully stored in the dataset. |
apify-actor-start | $0.00005 | Actor Start — Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). — Charged once per run. |
Platform usage is currently billed separately by Apify for this Actor run. A scheduled change takes effect on 2026-10-01; from then, platform usage is included alongside the event prices above, with no separate per-run platform-usage fee passed to users.
This covers Apify platform usage for this Actor run. Other Apify products or usage outside this Actor run may still follow your account plan.
Scheduled event prices from 2026-10-01:
| Event | Price (USD) | When it is charged |
|---|---|---|
bbb-profile-scraped | FREE: $0.025; BRONZE: $0.025; SILVER: $0.025; GOLD: $0.02; PLATINUM: $0.02; DIAMOND: $0.02 | BBB profile scraped — Charged for each normalized public BBB business profile successfully stored in the dataset. |
apify-actor-start | $0.005 | Actor Start — Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event). — Charged once per run. |
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.