BBB APIbbb.org ↗
Search BBB-listed businesses, retrieve full contact profiles, and fetch customer reviews. 3 endpoints covering name, address, rating, and review text.
What is the BBB API?
The BBB.org API provides access to business directory and review data from the Better Business Bureau across 3 endpoints. With search_businesses, you can query by keyword and location to get paginated summaries including business name, phone, address, and BBB profile URL. The other endpoints pull full contact profiles and customer reviews for any business in the BBB directory.
curl -X GET 'https://api.parse.bot/scraper/9f856b0d-568d-4aff-904a-82d457aaafcf/search_businesses?page=1&query=plumber&location=Denver%2C+CO' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace bbb-org-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: BBB SDK — search businesses, get profiles, read reviews."""
from parse_apis.bbb_better_business_bureau_api import BBB, BusinessNotFound
client = BBB()
# Search for plumbers in Denver — limit caps total items fetched across pages.
for biz in client.businesssummaries.search(query="plumber", location="Denver, CO", limit=5):
print(biz.name, biz.phone_number, biz.city, biz.state)
# Drill into the first result's full profile.
summary = client.businesssummaries.search(query="electrician", location="Chicago, IL", limit=1).first()
if summary:
profile = summary.details()
print(profile.name, profile.business_type, profile.owner_name)
# Read reviews for that business.
for review in profile.reviews(limit=3):
print(review.reviewer_name, review.rating, review.review_date)
# Typed error: handle a missing business profile gracefully.
try:
missing = client.businesses.get(profile_url="https://www.bbb.org/us/xx/nowhere/profile/fake/gone-0000-00000000")
print(missing.name)
except BusinessNotFound as exc:
print(f"Business not found: {exc.profile_url}")
print("exercised: businesssummaries.search / summary.details / business.reviews / businesses.get")
Search for businesses on BBB by keyword and location. Returns a paginated list of business summaries including name, address, phone, category, and BBB profile URL. Each page returns up to 15 results. Location influences the regional BBB results but may not strictly filter to the exact city specified.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| queryrequired | string | Search keyword such as business name, category, or service type. |
| locationrequired | string | Location to search near, such as a city and state or ZIP code. |
{
"type": "object",
"fields": {
"page": "string indicating the current page number",
"businesses": "array of business summary objects with Business Name, Phone Number, City, State, Category Label, BBB Profile URL, and Full Address"
},
"sample": {
"data": {
"page": "1",
"businesses": [
{
"City": "Denver",
"State": "CO",
"Full Address": "123 Main St, Denver, CO 80212",
"Phone Number": "+1 (555) 012-3456",
"Business Name": "Ennis Plumbing LLC",
"Category Label": "Plumber, Commercial Plumber",
"BBB Profile URL": "https://www.bbb.org/us/co/denver/profile/plumber/ennis-plumbing-llc-1296-90156205"
}
]
},
"status": "success"
}
}About the BBB API
What the API Covers
The BBB.org API exposes three endpoints that map to the core data surfaces on bbb.org: business search, business profiles, and customer reviews. Each business record is identified by its BBB profile URL, which flows from search_businesses into get_business_profile and get_business_reviews as the primary key.
Searching and Identifying Businesses
search_businesses accepts a query string (business name, category, or service type) and a location (city/state or ZIP code). Results are paginated via the page parameter and return an array of business summary objects. Each summary includes Business Name, Phone Number, City, State, Full Address, Category Label, and the BBB Profile URL. Note that location influences which regional BBB results are surfaced but does not always strictly filter to the exact city specified.
Business Profiles and Reviews
get_business_profile takes a BBB profile URL and returns a fuller contact record: Street Address, City, State, ZIP Code (including ZIP+4 when available), Owner Name, Owner Email, Website URL, Phone Number, Business Name, and Business Type classification. One known quirk: social media URLs in the profile may reflect BBB's own accounts rather than the specific business's social presence.
get_business_reviews also takes a BBB profile URL and returns paginated customer reviews. Each review object contains Reviewer Name, Review Date, Rating, and Review Text. Businesses with no submitted reviews return an empty array rather than an error.
The BBB API is a managed, monitored endpoint for bbb.org — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when bbb.org changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official bbb.org API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a local business reputation dashboard by combining star ratings and review text from
get_business_reviews - Verify business contact details — address, phone, owner name — before entering a vendor relationship
- Compile category-specific business directories by searching with service-type keywords in
search_businesses - Monitor review sentiment over time by periodically fetching paginated reviews for a tracked set of profile URLs
- Enrich a CRM with BBB-sourced business type classification and owner email from
get_business_profile - Cross-check business website URLs and physical addresses for lead qualification pipelines
- Aggregate BBB-listed businesses by ZIP code to analyze service provider density in a given market
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does BBB.org have an official developer API?+
What does `get_business_profile` return beyond what `search_businesses` already provides?+
search_businesses returns a summary: Business Name, Phone, City, State, Full Address, Category Label, and BBB Profile URL. get_business_profile adds Owner Name, Owner Email, Website URL, Business Type classification, and a ZIP+4 formatted ZIP Code — fields not present in the search results.Does the location filter in `search_businesses` strictly return businesses in that city?+
location parameter influences which regional BBB office's results are surfaced, but results may include businesses outside the exact city or ZIP code specified. Treat it as a regional proximity signal rather than a strict geographic filter.