BBB Business Scraper — Ratings, Accreditation & Contacts avatar

BBB Business Scraper — Ratings, Accreditation & Contacts

Pricing

from $20.00 / 1,000 bbb profile scrapeds

Go to Apify Store
BBB Business Scraper — Ratings, Accreditation & Contacts

BBB Business Scraper — Ratings, Accreditation & Contacts

Scrape BBB business profiles by keyword and city or profile URL: BBB rating, accreditation, phone, website, address and management contacts. USD 0.025 each.

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

6

Total users

2

Monthly active users

16 hours ago

Last modified

Security

Limited permissions

Share

BBB Business Scraper extracts public BBB.org business profiles, found by keyword and location or supplied as profile URLs, and returns each business's BBB rating, accreditation status, phone, website, address, years in business, management contacts and listed categories. It is built for lead generation, vendor vetting and reputation research in the US and Canada, and it costs USD 0.025 per profile on the FREE tier (USD 25 per 1,000 profiles, USD 20 per 1,000 on GOLD).

What does the BBB business scraper return?

Each dataset row is one BBB business profile:

FieldWhat it contains
business_nameBusiness name from the profile
bbb_ratingBBB letter grade as shown, for example A+
is_accreditedtrue for BBB Accredited Businesses, false when the profile says it is not accredited
phone, email, websiteContact details shown on the profile (email only when a mailto link exists)
address, countryStreet address and US or CA
years_in_business, business_started, bbb_file_openedTime-in-business details
entity_type, local_bbbFor example Corporation and the local BBB office
categoriesBBB business categories followed by the listed products and services
management_contactsNames and titles listed under business management
additional_websitesOther links on the profile, such as social pages
payment_methods, hours, descriptionExtra profile details when present
review_count, complaint_countCustomer reviews and complaints BBB counts on the profile (BBB profiles cover a three-year reporting period); 0 when there are none
review_ratingAverage customer review star rating when BBB displays one; null otherwise
reviews, complaintsArrays filled only with includeReviews or includeComplaints
profile_url, source_url, scraped_atProfile link, the page that led to it and collection time

The run also saves OUTPUT with status, stop reason, records saved and charged, search pages visited, profile URLs discovered and failed requests.

How do I search BBB businesses by category and city?

Set searchQuery and location. In Apify Console, also clear the prefilled profile URL in startUrls, or that profile is scraped and charged too. API calls that send only searchQuery and location run the search alone.

InputExampleNotes
searchQueryroofing contractorCategory, company name, keyword, phone, website or email
locationAustin, TXCity, state, ZIP or postal code
countryUSUS or CA
startUrlsBBB profile or search URLsProfiles are parsed directly; search URLs are paged
maxResults101 to 1,000 profiles per run (default 10)
maxPagesPerSearch31 to 25 result pages per search
includeReviewsfalseAdd visible review snippets
includeComplaintsfalseVisit the complaints tab for complaint summaries
{
"searchQuery": "roofing contractor",
"location": "Austin, TX",
"country": "US",
"startUrls": [],
"maxResults": 50,
"maxPagesPerSearch": 5
}

Can I check BBB ratings and accreditation for a list of companies?

Yes. Put each company's BBB profile URL in startUrls and set maxResults to the list length. Each profile becomes one row with bbb_rating, is_accredited, phone and website. This is the fastest path.

{
"startUrls": [
{ "url": "https://www.bbb.org/us/az/phoenix/profile/plumber/quail-plumbing-inc-1126-26001867" },
{ "url": "https://www.bbb.org/us/az/phoenix/profile/plumber/pruitts-plumbing-1126-29002758" }
],
"maxResults": 2
}

Does it return BBB reviews and complaints?

Every row carries the counts: review_count and complaint_count come from the summary BBB publishes on the profile, and review_rating is the average star rating when BBB displays one. For the text, includeReviews adds visible review snippets from the profile, and includeComplaints opens the profile's complaints tab and returns complaint summaries; both return empty arrays when nothing public is shown.

When should I use it, and when not?

Use it when you need BBB rating and accreditation at scale: vetting a vendor list, enriching local leads with a trust signal, or building a list of accredited businesses in one category and city.

Use another Actor when:

How do I run it from code?

JavaScript with apify-client:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('muhammadafzal/bbb-business-scraper').call({
startUrls: [{ url: 'https://www.bbb.org/us/az/phoenix/profile/plumber/quail-plumbing-inc-1126-26001867' }],
maxResults: 1,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const item of items) console.log(item.business_name, item.bbb_rating, item.is_accredited);

Python with apify-client:

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("muhammadafzal/bbb-business-scraper").call(run_input={
"searchQuery": "plumber",
"location": "Denver, CO",
"startUrls": [],
"maxResults": 25,
})
for item in client.dataset(run.default_dataset_id).iterate_items():
print(item["business_name"], item["bbb_rating"], item["phone"])

Use it from an AI assistant

BBB Business Scraper works from Claude, ChatGPT, Cursor or any MCP client through Apify's MCP server. Add the single-tool URL https://mcp.apify.com/?tools=muhammadafzal/bbb-business-scraper to your client and ask, for example: "Get the BBB rating, accreditation status and phone number for these three BBB profile URLs." Each profile is charged, so include a result limit.

What does the output look like?

A record from a 2026-10-27 cloud run of a keyword search (moving company in Phoenix, AZ; shortened, categories cut to the first six, management contacts omitted):

{
"business_name": "Thomas Logistics LLC",
"profile_url": "https://www.bbb.org/us/az/phoenix/profile/moving-assistance/thomas-logistics-llc-1126-1000023337",
"source_url": "https://www.bbb.org/search?find_country=USA&find_loc=Phoenix%2C%20AZ&find_text=moving%20company&page=1",
"country": "US",
"address": "1717 W Northern Ave, Phoenix, AZ, 85021-5469",
"phone": "(602) 472-0336",
"email": null,
"website": "https://www.thomaslogisticsllc.com",
"categories": [
"Moving Assistance",
"Moving Companies",
"Garbage Removal",
"Moving Services",
"Piano Movers",
"Junk Removal"
],
"description": "This business offers moving assistance services, specializing in packing, loading and unpacking.",
"bbb_rating": "A+",
"is_accredited": true,
"years_in_business": 15,
"bbb_file_opened": "7/9/2012",
"business_started": "2/15/2011",
"entity_type": "Limited Liability Company (LLC)",
"local_bbb": "BBB, Mountain West & Pacific Southwest",
"review_rating": 5,
"review_count": 9,
"complaint_count": 0,
"payment_methods": [],
"scraped_at": "2026-10-27T08:12:25.584Z"
}

How much does BBB data cost?

The Actor uses pay-per-event pricing, and platform usage is included in the event prices.

EventFREEBRONZESILVERGOLDPLATINUM / DIAMOND
BBB profile scraped (one dataset row)USD 0.025USD 0.025USD 0.025USD 0.02USD 0.02
Actor start (per started GB of allocated memory)USD 0.005USD 0.005USD 0.005USD 0.005USD 0.005

The default memory is 256 MB, so a run pays one start event. Worked totals on the FREE tier:

  • 1 profile: USD 0.025 + USD 0.005 = USD 0.030
  • 50 profiles: 50 × USD 0.025 + USD 0.005 = USD 1.255

The status message at the start of a run estimates the maximum charge with your account's live per-profile price. Each profile is saved before it is charged, and when your maximum cost per run is reached, the Actor stops after the current profile.

Limits and reliability

  • Speed: a 10-profile keyword search took about 5 seconds in a 2026-11-05 cloud run, and one profile URL about 5 seconds. Pages are read as plain HTML, with no browser.
  • One row per business: when a search lists several location pages of the same business, only the first is saved and charged.
  • Errors: a page that returns a bot challenge or a connection error is retried up to four times with increasing pauses, each on a new session and IP. If every request fails and no profile is saved, the run ends as failed instead of reporting an empty success. A profile that BBB has removed (HTTP 404) is skipped and not charged.

FAQ

What does bbb_rating contain?

BBB's letter grade from A+ to F, copied as shown on the profile. The Actor does not compute or adjust it.

Is this an official BBB API?

No. It reads public BBB.org pages and gives you the data through the Apify API, with JSON, CSV and Excel exports. It is not affiliated with BBB.

Can I scrape Canadian BBB profiles?

Yes. Set country to CA for keyword searches, or pass /ca/ profile URLs in startUrls.

Does it include non-accredited businesses?

Yes. is_accredited is false when the profile states the business is not BBB accredited, and null when the page does not say.

Why is a field null?

The profile did not show it. For example, review_rating is null when BBB displays no average star rating, and email is null when the profile has no public mailto link.

How many profiles can one run return?

Up to 1,000 (maxResults). maxPagesPerSearch bounds how many search result pages are read for each query and location.

The Actor reads public BBB.org profile pages without logging in or bypassing access controls. Management names, phones and emails can be personal data: use them lawfully and follow CAN-SPAM, GDPR, TCPA and anti-spam rules for outreach. Respect BBB's terms of use, and confirm ratings on BBB.org before publishing them. This tool is not affiliated with the Better Business Bureau, and this is not legal advice.

Last verified: 2026-11-05