BBB API endpoint
Returns the complete topic navigation shown by a BBB newsroom page, including its active topic. The page can be the US or Canada newsroom, a state, province or city newsroom, or one local BBB chapter's newsroom; the returned topic URLs stay in that scope, and a chapter has its own topic set.
/bbb/news/topicsQuery parameters:
url (required): URL-encoded canonical BBB newsroom URL. Use https://www.bbb.org/us/news or https://www.bbb.org/ca/news, a state or city newsroom such as https://www.bbb.org/us/ca/news or https://www.bbb.org/us/ca/san-francisco/news, a local BBB chapter newsroom such as https://www.bbb.org/local-bbb/golden-gate-better-business-bureau/news, or any canonical topic URL returned by this endpoint.The returned topic URLs stay in the scope of the supplied URL. A state or city newsroom has the same topics as its country. A local BBB chapter has its own, usually shorter, topic set, which can include topics the country newsroom does not have (Auto and Family were listed for one US chapter on 2026-10-12). The response echoes state and city for a regional URL and local_bbb_id and local_bbb_name for a chapter URL.
The result reflects the topic navigation for that source page and includes its active topic, which BBB omits from availableTopics. Topic names and links can differ by market; callers should use the returned URLs when calling bbb_news. As observed on 2026-10-08, the US/Canada union is Business, Events, Family, Home, Investigations, News Releases, Scams, Shopping, Technology, Tips, and Warnings. Family was listed for Canada only and Warnings for the US only.
Response fields:
source_url: the newsroom URL that was read.country: us or ca.state, city: the state or province code and the city slug; present for a state or city URL.local_bbb_id, local_bbb_name: the local BBB chapter; present for a chapter URL.topics: every topic the page lists, in name order, each with name, slug and the url to pass to bbb_news.| Field | Filled in, of 10 checked | Values in the sample |
|---|---|---|
| name | 10 | “Business” and 9 other values |
| slug | 10 | |
| url | 10 | bbb.org |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| url | string | Yes | Canonical https://www.bbb.org newsroom URL, optionally with a topic segment: /us/news or /ca/news; /<country>/<state>/news or /<country>/<state>/<city>/news with country us or ca, the two-letter region code from bbb-regions and the city slug from a business profile URL; or a chapter's news_url from bbb-local-bbbs | https://www.bbb.org/us/news | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/bbb/news/topics?url=https%3A%2F%2Fwww.bbb.org%2Fus%2Fnews" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"source_url": "https://www.bbb.org/us/news/scams",
"country": "us",
"topics": [
{
"name": "Business",
"slug": "business",
"url": "https://www.bbb.org/us/news/business"
},
{
"name": "Scams",
"slug": "scams",
"url": "https://www.bbb.org/us/news/scams"
}
]
}
}Request schema
No body schema
Response schema
Inline response schema
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | Code is the HTTP status code or a custom code used to indicate the result of the request @example 200 | |||
| data | bbbnews.TopicsResponse | No | ||||
| data.city | string | No | san-francisco | City slug; present for a city URL. | ||
| data.country | string | No | us, ca | us | Country of the newsroom: us or ca. | |
| data.local_bbb_id | string | No | 1116 | Id of the local BBB chapter; present for a chapter URL. | ||
| data.local_bbb_name | string | No | Name of the local BBB chapter; present for a chapter URL. | |||
| data.source_url | string | No | https://www.bbb.org/us/news | The newsroom URL that was read. | ||
| data.state | string | No | ca | Two-letter state or province code; present for a state or city URL. | ||
| data.topics | array | No | Every topic the page lists, in name order, the active one included. | |||
| data.topics[].name | string | No | Scams | Topic name as BBB shows it. | ||
| data.topics[].slug | string | No | scams | Topic path segment. | ||
| data.topics[].url | string | No | https://www.bbb.org/us/news/scams | Newsroom URL of the topic in the requested scope; pass it to bbb-news. | ||
| msg | unknown | No | Msg is the message that describes the result of the request @example "Request successful" |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/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/news/topics?url=https%3A%2F%2Fwww.bbb.org%2Fus%2Fnews" \
-H "x-api-key: $CRAWLORA_API_KEY"