BBB Scraper: Leads, Reviews and Complaints by City avatar

BBB Scraper: Leads, Reviews and Complaints by City

Pricing

$4.00 / 1,000 results

Go to Apify Store
BBB Scraper: Leads, Reviews and Complaints by City

BBB Scraper: Leads, Reviews and Complaints by City

Scrapes Better Business Bureau (bbb.org) search results for the USA and Canada past the 225-result cap, with optional customer reviews and complaints, complaint themes, a 0-100 lead score, change monitoring and an HTML report.

Pricing

$4.00 / 1,000 results

Rating

0.0

(0)

Developer

Sankov Vadim

Sankov Vadim

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a month ago

Last modified

Categories

Security

Limited permissions

Share

BBB Scraper: Better Business Bureau Leads, Reviews and Complaints

Search bbb.org by category and city, get clean business records with phone, rating, accreditation and a lead score, and optionally pull the full review and complaint texts.

It runs on plain HTTP requests without a browser, works around BBB's 225-result cap, and can flag what changed since your last run.

🚀 Quick start

  1. Open the Actor and keep the prefilled input: search term plumber, location Austin, TX, country United States.
  2. Click Start. The prefill runs without the 225-limit split and without reviews or complaints, so it finishes fast.
  3. Open the Overview or Leads view of the dataset, or open REPORT in the key-value store for the HTML report. Export to CSV, Excel or JSON.

To get a whole market instead of the first 225 results, turn on Get past the 225-result limit. To read what customers say, turn on Include customer reviews and Include complaints.

💡 Use cases

  • Lead generation for B2B sellers and agencies. Build lists of local contractors and service companies with phone, address, category, BBB rating and a 0-100 lead score to sort by.
  • Contractor and vendor checks. Look up a specific company by exact name and see its rating, accreditation, complaint history and how often it answers complaints.
  • Reputation and competitor analysis. Pull complaint texts and company replies for a whole category, grouped by theme (refund/billing, quality, delivery/delay, customer service, fraud/misleading).
  • Monitoring. Re-run the same search on a schedule and get only the businesses that are new or changed (rating, accreditation, complaints).

✨ Why this Actor

FeatureWhat you get
HTTP onlyReads three open JSON endpoints on bbb.org, so it needs neither a browser nor a login.
Search by category or nameCategory/keyword plus city, state or ZIP. searchByName for exact company lookups. US and Canada.
225-result workaroundSplits a capped search by sub-category, then by nearby ZIP codes sorted by distance, then by sort order. Duplicates removed by businessId.
Coverage reportCOVERAGE in the key-value store shows, for every query, how many results BBB reports and how many you collected.
Reviews and complaintsTexts, stars, dates, status and company replies. Counts by status and type cover all complaints on file, not only the saved ones.
Complaint themesEach complaint is tagged: refund/billing, quality, delivery/delay, customer service, fraud/misleading, other.
Lead scoreOne 0-100 number built from rating, accreditation, reviews, complaint handling and phone.
Monitor modeMarks each business NEW, CHANGED or UNCHANGED against your previous run.
HTML reportSelf-contained page with sorting, filters and CSV download.
Reliable runsRetries with backoff, spending limit respected, collected data saved on timeout or migration.

In one smoke run for plumber in Austin, TX, BBB reported 2544 results for the search and showed 225. With splitting on, the Actor collected 1048 unique businesses.

⚙️ Input

FieldTypeDefaultDescription
searchTermslistplumber (prefill)Categories (roofing contractors) or business names. Each term runs in every location.
locationslistAustin, TX (prefill)City, ST, a ZIP code, or a Canadian city with province (Toronto, ON).
countryUSA / CANUSABBB covers the United States and Canada.
startUrlslistemptyOptional bbb.org search URLs or category URLs.
searchByNamebooleanfalseBBB matches terms loosely. Turn on to look up a company by its name.
sortselectRelevanceRelevance, Distance, Rating, AToZ, ZToA.
maxItemsinteger1000 (prefill 20)Total unique businesses to save across all searches.
maxItemsPerQueryinteger0Limit per term + location pair. 0 means no limit.
autoSplitbooleantrue (prefill false)Get past BBB's 225-result cap.
maxSplitRequestsinteger300Cap on extra search pages used for splitting. Each page holds 15 results.
accreditedOnlybooleanfalseKeep only BBB Accredited Businesses.
minRatingselectanyDrop businesses rated below this grade (A+ to F). Not-rated businesses are dropped when a grade is set.
strictMatchbooleanfalseKeep only businesses whose name or categories contain every word of the term.
includeReviewsbooleanfalseFetch review texts, stars and business replies.
maxReviewsPerBusinessinteger30Newest reviews first.
includeComplaintsbooleanfalseFetch complaint texts, type, status and business responses.
maxComplaintsPerBusinessinteger30Most recently closed first. Counts by status and type always cover all complaints.
monitorModebooleanfalseCompare with the previous run under the same monitor name.
monitorKeystringdefaultRuns with the same name share one snapshot.
onlyChangesbooleanfalseWith monitoring on, unchanged businesses are not saved and not charged.
buildReportbooleantrueSave the HTML report as REPORT.
maxConcurrencyinteger4Parallel requests, 1 to 10. Higher is faster but may hit rate limits.
proxyConfigurationobjectno proxyUsually not needed. Turn on if the log shows blocking warnings.

Example input:

{
"searchTerms": ["plumber"],
"locations": ["Austin, TX"],
"country": "USA",
"maxItems": 500,
"autoSplit": true,
"includeComplaints": true
}

📦 Output

One row per business. The dataset has three views: Overview, Leads (contact and location fields) and Complaints (complaint stats per business).

FieldDescription
businessId, bbbId, searchIdBBB identifiers. businessId is used for deduplication.
businessName, primaryCategory, categoriesName and categories.
address, city, state, postalCode, countryLocation.
phone, phonesFirst phone and all phones.
latitude, longitudeCoordinates.
rating, ratingScoreBBB letter grade and numeric score.
isAccredited, bbbOfficeAccreditation flag and local BBB office.
profileUrl, requestAQuoteUrl, leaveReviewUrl, logoUrlLinks.
outOfBusinessStatus, isCharity, charitySealStatus flags.
serviceAreasSummary, hasServiceArea, serviceAreaDescriptionService area.
leadScore, leadScoreBreakdown0-100 score and its components.
searchTerm, searchLocation, splitPath, scrapedAtWhere and when the row was found.
reviewsCount, reviewsAvgStars, reviewsBusinessResponseRateReview stats (with reviews on).
reviews[]id, stars, author, date, text, businessResponse, businessResponseDate, businessRebuttal, customerResponse.
complaintsCount, complaintsHiddenComplaints on file and hidden ones (with complaints on).
complaints[]id, type, status, date, text, businessResponse, consumerResponse, category.
complaintsByStatus, complaintsByTypeCounts across all complaints on file.
complaintsResponseShare, complaintsResolvedShareShare of complaints answered and resolved.
complaintCategories, topComplaintCategoryTheme counts and the most common theme.
monitorStatus, changedFields, newComplaintsMonitor results (with monitoring on).
yearsInBusinessAlways null in v1. See Limits.
detailsErrorSet when reviews or complaints could not be fetched. The business row is still saved.

Real row from a run on the Apify platform (plumber in Austin, TX, reviews and complaints on; texts and lists shortened):

{
"businessId": "90006300",
"bbbId": "0825",
"businessName": "EC Design Builds Inc",
"address": null,
"city": "Austin",
"state": "TX",
"postalCode": "78731",
"country": "USA",
"phone": "(512) 363-3576",
"rating": "A+",
"ratingScore": 100,
"isAccredited": true,
"primaryCategory": "General Contractor",
"primaryCategoryId": "10035-000",
"categories": [
{
"id": "10035-000",
"name": "General Contractor"
},
{
"id": "10126-000",
"name": "Roofing Contractors"
},
{
"id": "10032-000",
"name": "Concrete Contractors"
}
],
"profileUrl": "https://www.bbb.org/us/tx/austin/profile/general-contractor/ec-design-builds-inc-0825-90006300",
"isCharity": false,
"outOfBusinessStatus": null,
"hasServiceArea": true,
"serviceAreasSummary": [
"Bastrop County, TX",
"Blanco County, TX",
"Guadalupe County, TX",
"Travis County, TX",
"Williamson County, TX"
],
"yearsInBusiness": null,
"searchTerm": "plumber",
"searchLocation": "Austin, TX",
"splitPath": null,
"scrapedAt": "2026-10-03T07:23:57+00:00",
"reviewsCount": 3,
"reviewsFetched": 3,
"reviewsAvgStars": 5,
"reviewsBusinessResponseRate": 0,
"reviewIssueCategories": {},
"reviews": [
{
"id": "0825_90006300_586722",
"stars": 5,
"author": "Phil D",
"date": "2026-07-30",
"text": "******* and ***** were absolutely great from the first phone call through project completion. They helped us navigate both our insurance claim and supplement...",
"businessResponse": null,
"businessResponseDate": null,
"businessRebuttal": null,
"customerResponse": null,
"issueCategory": null
}
],
"complaintsCount": 1,
"complaintsHidden": 0,
"complaintsFetched": 1,
"complaintsByStatus": {
"answered": 1
},
"complaintsByType": {
"serviceorrepair": 1
},
"complaintsResolvedShare": 0,
"complaintsResponseShare": 1,
"complaintCategories": {
"fraud_misleading": 0,
"refund_billing": 0,
"delivery_delay": 0,
"quality": 0,
"customer_service": 0,
"other": 1
},
"topComplaintCategory": "other",
"lastComplaintId": "0825_90006300_24526559",
"complaints": [
{
"id": "0825_90006300_24526559",
"type": "Service or Repair Issues",
"status": "Answered",
"date": "2026-02-17",
"text": "We expect bathroom work to be completed as per contract",
"businessResponse": "EC Design Builds Inc. respectfully disputes the customers version of events and the assertion that contracted work was not completed. This project involved m...",
"consumerResponse": "Complaint: 24526559 I am rejecting this response because: The Contractor is not complete with work. I have attached a pdf with additional information as rebu...",
"responseCount": 4,
"category": "other"
}
],
"detailsError": null,
"leadScore": 93,
"leadScoreBreakdown": {
"rating": 100,
"accreditation": 100,
"reviews": 68.8,
"complaints": 95,
"contact": 100
}
}

With complaints on, each business also gets complaintsCount, complaintsByStatus, complaintsResponseShare, complaintCategories, topComplaintCategory and a complaints[] list in the shape listed above.

📊 Report and coverage

When buildReport is on, the key-value store gets two records:

  • REPORT: one HTML file with no external scripts. It shows totals, accredited count, average lead score, coverage, rating distribution, top categories and cities, top complaint themes, and a table you can sort by clicking headers and filter by rating, accreditation, city and minimum lead score. A button downloads the table as CSV.
  • COVERAGE: JSON with, for each source query, the total BBB reports, how many you collected, how many splits were used and the shortfall. The log warns when more than 20% is missing.

🎯 Lead score

leadScore is a weighted average on a 0-100 scale. A component that is not available drops out, and its weight is not counted against the business.

ComponentWeightScore
BBB rating0.35ratingScore if present, otherwise A+ = 100 down to F = 0. Not rated: left out.
Accreditation0.20100 if accredited, otherwise 0.
Reviews0.20Average stars scaled to 0-100, pulled toward 50 when there are few reviews. Only with reviews on.
Complaint handling0.15100 if no complaints, otherwise the answered share minus a penalty that grows with the number of complaints. Only with complaints on.
Phone0.10100 if a phone number exists, otherwise 0.

A business marked out of business gets a score of 0. leadScoreBreakdown shows each component for every row.

🔔 Monitoring

Turn on monitorMode and give the watch list a monitorKey. Each run compares against the saved snapshot for that name:

  • NEW: not seen in earlier runs.
  • CHANGED: something differs. changedFields lists what (rating, accreditation, complaints and so on), and newComplaints shows the increase.
  • UNCHANGED: nothing moved.

Set onlyChanges to save only new and changed businesses. Unchanged ones are not saved and not charged. Schedule the Actor in Apify Console for daily or weekly checks. The snapshot is merged, not replaced, so a business missing from a later partial search is not marked as gone.

💳 Pricing

Pay per result. See the Pricing tab for current rates.

⚠️ Limits

  • You will not get owner names, emails, websites or years in business. bbb.org profile pages sit behind Cloudflare and the Actor reads only the public JSON endpoints. yearsInBusiness is always null.
  • Big markets need a split budget. Coverage depends on maxSplitRequests and on how BBB filters the query. Check COVERAGE to see what was missed, and raise the cap if needed.
  • Complaint themes are a heuristic. Keyword rules, not a language model. Expect misclassified edge cases. BBB's own complaint type is kept next to it.
  • Search is loose. BBB matches terms broadly. Use searchByName or strictMatch when you need precision.
  • The Actor covers the USA and Canada only.
  • Blocking is possible. If the log shows Cloudflare warnings, enable the proxy.

❓ FAQ

Do I need a proxy? Usually not. Search, reviews and complaints loaded without one in our tests. Enable it if the log warns about blocking.

Why does BBB show only 225 results? BBB caps every search at 225 results. With autoSplit on, the Actor repeats the search by sub-category, by nearby ZIP code and by sort order, then removes duplicates.

How do I find one specific company? Put the company name in searchTerms, set a location and turn on searchByName.

Can I scrape Canada? Yes. Set country to CAN and use locations like Toronto, ON.

Are all complaints included in the counts? Yes. Status and type counts cover every complaint on file. The complaints[] list is limited by maxComplaintsPerBusiness.

What happens if the run times out or hits my spending limit? The Actor stops sending new requests, saves what it has and writes the report.

📝 Changelog

  • 1.0 (2026-10): First release. Search, 225-limit split, reviews, complaints, complaint themes, lead score, monitor mode, HTML report.

💬 Support

Found a bug or need a field? Open an issue on the Actor's Issues tab in Apify Console. Include the run link and your input.

This Actor collects publicly available business information from bbb.org. You are responsible for using the data in line with the law and the site's terms in your jurisdiction.