BBB API endpoint
Returns a bbb.org business profile: BBB rating letter grade and reasons, accreditation status and since-date, years in business, BBB file/incorporation dates, entity type, contact info, business categories, social media, and a short latest-reviews preview.
/bbb/businessReturns a Better Business Bureau (bbb.org) business profile.
Query parameters:
url (required) — a BBB business profile URL, taken from a bbb-search result's url (or hq_profile_url for a multi-location business).Response fields include the BBB rating letter grade and its listed reasons (rating_reasons, plus more_info_url for the fuller reasons/service-area sub-page — see bbb-business-more-info), accreditation status and accredited_since date, years_in_business, bbb_file_opened/business_started/business_incorporated dates, entity_type, contact info (phone, website, address), local_bbb/local_bbb_url (the chapter that maintains the file), additional_phone_numbers, additional_websites, social_media links, business_categories, a licensing_note where BBB flags that professional licensing may apply, hours[] (per-day operating hours, each {"day":"Monday","hours":"8:00 AM - 5:00 PM"} or "hours":"Closed" — genuinely conditional per business, an empty array is a real result, not an error), products_and_services[] (a business-listed service list, also genuinely conditional), and a short latest_reviews preview (author + truncated quote; not the full review list — see bbb-business-reviews for the full list).
total_complaints, complaints_closed_last_3_years, complaints_closed_last_12_months, total_reviews and average_review_rating are the counts BBB embeds in the profile page. total_complaints is the figure the complaints page shows for the last three years, so a caller can tell whether a business has complaints, and how many pages bbb-business-complaints will take, without calling it. A count BBB did not publish is left out, so 0 is a real zero; average_review_rating is left out for a business with no reviews.
canonical_url is BBB's own address for the profile, read from the page. It usually equals url. It differs when BBB has since changed the address, most often because the business now belongs to another local BBB after a merger: the business number at the end of the address stays the same and the four-digit local BBB number before it changes (...-1066-89046545 became ...-1126-89046545, with a different city in the path). The old address keeps working here; store canonical_url if you keep profile addresses, and treat two addresses with the same business number as the same business.
alerts[] lists the notices BBB attaches to the profile, such as a pattern of complaints, the result of a BBB investigation, or a licensing finding. Each entry has id (BBB's identifier for the alert on this profile), type_id (BBB's numeric alert type; seen so far 8104 Pattern of Complaint, 8108 Alert, 8111 Licensing — passed through as published, not a fixed list), title, text (the complete notice as plain text, one paragraph per line), links[] (the hyperlinks inside the notice, each {"text","url"}, omitted when there are none) and url (the alert's anchor on the profile's more-info page). BBB publishes no date field for an alert: any dates are part of text, in BBB's wording. alerts is an empty array when the profile has none. An entry with no text or type_id means only the alert list printed on the profile could be read. The key is absent only on a response served from a cache entry written before the field existed.
profile_under_review: true means BBB is updating the profile. Its page then shows "This business profile is under review." (returned in notice) in place of the rating and accreditation. rating is NR, rating_reasons holds BBB's sentence saying why, and accredited is left out of the response, because BBB's page does not state it while the review lasts; do not read a missing accredited as false. Every other field BBB still shows (name, category, phone, address, counts, alerts) is returned as usual. This is BBB's state for the profile, so the same request returns the same answer until the review ends.
Not included: the full customer-reviews list (see bbb-business-reviews) and the fuller per-factor rating reasons / full service-area list (see bbb-business-more-info).
Example alerts entry (from a profile with a pattern-of-complaint alert, text shortened):
{"id":"0_-6","type_id":8104,"title":"Pattern of Complaint","text":"BBB files contain a pattern of complaints from consumers which allege billing issues. ...\nOn April 9, 2024, BBB sent correspondence to EpicVin requesting their voluntary cooperation ...","url":"https://www.bbb.org/us/fl/aventura/profile/auto-services/epicvin-inc-0633-90570453/more-info#alert-0_-6"}
| Field | Filled in, of 7 checked | Values in the sample |
|---|---|---|
| day | 7 | “Monday” and 6 other values |
| hours | 7 | 7:00 AM - 4:00 PM (6), Closed (1) |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| url | string | Yes | BBB business profile URL, from a bbb-search result's url or hq_profile_url | https://www.bbb.org/us/tx/austin/profile/plumber/calixto-plumbing-0825-1000223803 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/bbb/business?url=https%3A%2F%2Fwww.bbb.org%2Fus%2Ftx%2Faustin%2Fprofile%2Fplumber%2Fcalixto-plumbing-0825-1000223803" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"name": "Calixto Plumbing",
"url": "https://www.bbb.org/us/tx/austin/profile/plumber/calixto-plumbing-0825-1000223803",
"canonical_url": "https://www.bbb.org/us/tx/austin/profile/plumber/calixto-plumbing-0825-1000223803",
"category": "Plumber",
"categories": [
"Plumber",
"Plumbing Renovation",
"Commercial Plumber"
],
"rating": "A+",
"rating_reasons": [
"Customer Reviews are not used in the calculation of the BBB Letter Grade Rating."
],
"more_info_url": "https://www.bbb.org/us/tx/austin/profile/plumber/calixto-plumbing-0825-1000223803/more-info#bbb-rating",
"accredited": true,
"accredited_since": "1/16/2024",
"years_in_business": "3",
"phone": "(512) 945-3143",
"website": "https://calixtoplumbing.com/",
"address": "8410 Georgian Dr # B, Austin, TX 78753-6003",
"local_bbb": "BBB Heart of Texas",
"local_bbb_url": "https://www.bbb.org/local-bbb/bbb-serving-the-heart-of-texas",
"bbb_file_opened": "1/16/2024",
"business_started": "3/14/2023",
"business_incorporated": "3/14/2023",
"entity_type": "Limited Liability Company (LLC)",
"business_management": "Mr. Omar Calixto Cordoba, Owner/Manager",
"licensing_note": "This business is in an industry that may require professional licensing, bonding or registration. BBB encourages you to check with the appropriate agency to be certain any requirements are currently being met.",
"latest_reviews": [
{
"author": "Karey R",
"quote": "This company charged me $2800 to replace a water heater. That was outrageous!"
}
],
"source_url": "https://www.bbb.org/us/tx/austin/profile/plumber/calixto-plumbing-0825-1000223803"
}
}Request schema
No body schema
Response schema
#/definitions/bbb.businessResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | bbb.BusinessResponse | No | ||||
| data.accredited | boolean | No | ||||
| data.accredited_since | string | No | 1/16/2024 | |||
| data.additional_phone_numbers | array | No | ||||
| data.additional_websites | array | No | ||||
| data.address | string | No | ||||
| data.alerts | array | No | Alerts lists the notices BBB attaches to the profile (pattern of complaints, investigation results, licensing findings). It is an empty list when the profile has none. An alert parsed without Text means only the profile's alert list could be read. | |||
| data.alerts[].id | string | No | 0_-6 | ID is BBB's identifier for the alert on this profile, also the anchor in URL. | ||
| data.alerts[].links | array | No | Links are the hyperlinks inside the notice, in order. | |||
| data.alerts[].links[].text | string | No | ||||
| data.alerts[].links[].url | string | No | ||||
| data.alerts[].text | string | No | Text is the complete notice as plain text, one paragraph per line. | |||
| data.alerts[].title | string | No | Pattern of Complaint | Title is BBB's heading for the alert. | ||
| data.alerts[].type_id | integer | No | 8104 | TypeID is BBB's numeric alert type. Seen so far: 8104 Pattern of Complaint, 8108 Alert, 8111 Licensing. It is passed through as published, not validated against a fixed list. | ||
| data.alerts[].url | string | No | URL is the alert's own anchor on the profile's more-info page. | |||
| data.alternate_names | array | No | ||||
| data.average_review_rating | number | No | 1.7 | |||
| data.bbb_file_opened | string | No | ||||
| data.business_incorporated | string | No | ||||
| data.business_management | string | No | ||||
| data.business_started | string | No | ||||
| data.canonical_url | string | No | https://www.bbb.org/us/tx/austin/profile/plumber/calixto-plumbing-0825-1000223803 | BBB's own address for the profile, from the page. It differs from url when BBB has since changed the address, for example after moving the business to another local BBB: the business number at the end stays the same and the four-digit local BBB number before it changes. | ||
| data.categories | array | No | ||||
| data.category | string | No | Plumber | |||
| data.complaints_closed_last_12_months | integer | No | 701 | |||
| data.complaints_closed_last_3_years | integer | No | 943 | |||
| data.entity_type | string | No | Limited Liability Company (LLC) | |||
| data.hours | array | No | Hours is genuinely conditional per-location -- confirmed both absent (embedded state JSON "operatingHours":null on some profiles) and present as a full 7-day table on others. An empty list here is a real result, not a parser failure. | |||
| data.hours[].day | string | No | Monday | |||
| data.hours[].hours | string | No | 8:00 AM - 5:00 PM | |||
| data.image_url | string | No | ||||
| data.latest_reviews | array | No | ||||
| data.latest_reviews[].author | string | No | ||||
| data.latest_reviews[].quote | string | No | ||||
| data.latest_reviews[].url | string | No | ||||
| data.licensing_note | string | No | ||||
| data.local_bbb | string | No | ||||
| data.local_bbb_url | string | No | ||||
| data.more_info_url | string | No | ||||
| data.name | string | No | ||||
| data.notice | string | No | This business profile is under review. | |||
| data.phone | string | No | ||||
| data.products_and_services | array | No | ||||
| data.profile_under_review | boolean | No | ProfileUnderReview is true when BBB is updating the profile. The page then shows "This business profile is under review." (Notice) in place of the rating and accreditation, so Rating is "NR", RatingReasons holds BBB's sentence saying why, and "accredited" is left out of the JSON: the page does not say, and false would be a claim BBB is not making. Seen live 2026-10-12. The state is BBB's and lasts until the review ends, so asking again returns the same answer. | |||
| data.rating | string | No | A+ | |||
| data.rating_reasons | array | No | ||||
| data.social_media | array | No | ||||
| data.source_url | string | No | ||||
| data.total_complaints | integer | No | 943 | TotalComplaints, the two closed-complaint counts, TotalReviews and AverageReviewRating are the counts BBB embeds in the profile page. A count is left out when BBB did not publish it, so 0 is a real zero. TotalComplaints is the figure the complaints page shows for the last three years; use bbb-business-complaints for the list. | ||
| data.total_reviews | integer | No | 195 | |||
| data.url | string | No | ||||
| data.website | string | No | ||||
| data.years_in_business | string | No | 3 | |||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 500 | Internal Server Error | #/definitions/app.Response |
| 503 | Service Unavailable | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/bbb/business?url=https%3A%2F%2Fwww.bbb.org%2Fus%2Ftx%2Faustin%2Fprofile%2Fplumber%2Fcalixto-plumbing-0825-1000223803" \
-H "x-api-key: $CRAWLORA_API_KEY"