BBB Business Scraper — Ratings & Complaints avatar

BBB Business Scraper — Ratings & Complaints

Pricing

from $20.00 / 1,000 bbb profile scrapeds

Go to Apify Store
BBB Business Scraper — Ratings & Complaints

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

Muhammad Afzal

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

2 days ago

Last modified

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

FieldDefaultDescription
searchQueryplumberBBB business name, category, keyword, phone, website, or email search.
locationPhoenix, AZCity, state, ZIP, or postal code.
countryUSUS or CA.
startUrls[]BBB search or profile URLs.
maxResults10Maximum profile records returned and charged.
maxPagesPerSearch3Search pages visited per generated or supplied search URL.
includeReviewsfalseParse visible public review snippets.
includeComplaintsfalseVisit the public complaints tab and parse visible summaries.
proxyConfigurationResidentialOptional 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:

EventPrice
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_USERNAME
BBB_PROXY_PASSWORD
BBB_PROXY_HOST
BBB_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.
  • maxResults is 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 install
npm run build
apify 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.