BBB API endpoint
Returns one page of BBB newsroom cards from a canonical BBB newsroom URL. Three scopes are accepted, each with an optional topic: the US or Canada newsroom (/us/news), a state, province or city newsroom (/us/ca/news, /us/ca/san-francisco/news), and one local BBB chapter's own newsroom (/local-bbb/<chapter>/news, the news_url returned by bbb-local-bbbs and bbb-local-bbb). The list is whatever BBB shows on that page: a city or chapter whose local BBB publishes its own stories returns those, and other cities, other chapters and the state pages checked so far return the same list as the country newsroom, so compare total and the first items with the country newsroom before treating a list as local. A chapter URL also returns local_bbb_id and local_bbb_name. Items preserve BBB's type and include Article stories, events, and Near Me related-service cards when present. Near Me URLs are restricted to BBB's /near-me/<slug> paths. Every page carries total_pages and has_more: request page + 1 while has_more is true and stop when it is false; a page past the end returns 404. Event dates and links are preserved when present.
/bbb/newsQuery parameters:
url (required): URL-encoded canonical BBB newsroom or topic URL. Use the page query inside the encoded URL for pagination, such as https://www.bbb.org/us/news/scams?page=2.Accepted newsroom URLs, each with an optional topic segment from bbb_news_topics:
| Scope | URL shape | Example |
|---|---|---|
| Country | /us/news, /ca/news | https://www.bbb.org/us/news/investigations |
| State or province | /<country>/<state>/news | https://www.bbb.org/us/ca/news |
| City | /<country>/<state>/<city>/news | https://www.bbb.org/us/ca/san-francisco/news?page=2 |
| Local BBB chapter | /local-bbb/<chapter>/news | https://www.bbb.org/local-bbb/golden-gate-better-business-bureau/news |
<state> is the two-letter code and <city> the city slug BBB uses in its own URLs, the same values as in a business profile URL. A chapter newsroom URL is the news_url returned by bbb_local_bbbs and bbb_local_bbb, which is how to go from an office to its newsroom.
Which stories a regional or chapter URL returns is decided by BBB, and the endpoint returns that page as it is. Where the local BBB publishes its own stories, a city or chapter URL returns them (on 2026-10-12, San Francisco returned 226 stories and its chapter's own newsroom 79). Where it does not, BBB shows the country newsroom's list instead: on the same day /us/ca/news, /us/tx/news, /us/ca/los-angeles/news and two California chapter newsrooms all returned the same 943 stories, in the same order, as /us/news. To tell the two apart, compare total and the first item ids with the country newsroom. A topic URL under a chapter can still be local when the unfiltered list is not. The response echoes the scope: state and city for a regional URL, local_bbb_id and local_bbb_name for a chapter URL.
Response fields:
source_url: the newsroom URL that was read, page query included.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.topic: the topic name; present for a topic URL.page, page_size: the page returned and BBB's page size. A page can hold fewer than page_size items with more pages after it.total: BBB's count of stories in the list. It can be slightly higher than the number of stories the pages hold (a list reporting 30 held 27 on 2026-10-13), so do not use it to decide where the list ends.total_pages: the number of pages BBB serves for the list, read from BBB's own pager; at least 1.has_more: true while a later page exists. Request page + 1 next and stop when it is false; that way a page past the end is never requested.items: BBB's newsroom cards on the page, in source order. type is Article for a story; an event record carries an event type, event_start_date and event_url; a related local-service card has type Near Me and a BBB /near-me/<slug> URL.The endpoint returns BBB's current result count, page metadata, topic, and newsroom cards. Each item includes its upstream type and title, plus its canonical URL, summary, modification time, and image when present. Article links may use either www.bbb.org or bbb.org; both hosts are accepted by bbb-article. Near Me cards link to BBB's related local-service pages; they are preserved as BBB lists them and do not carry event fields. Event records retain event_start_date and event_url; the currently captured US Events page is explicitly empty (numFound=0). A malformed card or an upstream challenge is returned as a typed upstream error rather than an empty result.
A chapter URL whose chapter BBB does not know returns 404. A page beyond total_pages returns 404 with BBB newsroom page not found in the data field (a newsroom that does not exist reads BBB newsroom resource not found). An upstream page request beyond the page count returns 404 when BBB reports the requested page number, a positive total, and no items. An empty result on an in-range page with a positive total is treated as an upstream error.
| Field | Filled in, of 10 checked | Values in the sample |
|---|---|---|
| id | 10 | |
| title | 10 | median 71 characters |
| type | 10 | Article in all 10 |
| url | 10 | bbb.org |
| summary | 10 | median 134 characters |
| modified_date | 10 | 2024-09-11 to 2026-10-06 |
| image | 10 |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| url | string | Yes | Canonical https://www.bbb.org newsroom URL: /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. Append a topic segment from bbb-news-topics to narrow it and ?page=N (1 to 1000) to page; no other query key is accepted | https://www.bbb.org/us/news/scams?page=2 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/bbb/news?url=https%3A%2F%2Fwww.bbb.org%2Fus%2Fnews%2Fscams%3Fpage%3D2" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"source_url": "https://www.bbb.org/us/news/scams?page=2",
"country": "us",
"topic": "Scams",
"page": 2,
"page_size": 10,
"total": 279,
"total_pages": 28,
"has_more": true,
"items": [
{
"id": "32431",
"title": "BBB Scam Alert: Use caution when searching for weight loss products online",
"type": "Article",
"url": "https://www.bbb.org/article/scams/32431-bbb-scam-alert-use-caution-when-searching-for-weight-loss-products-online",
"summary": "BBB warns about deepfake celebrity endorsements promoting GLP-1 weight loss products.",
"modified_date": "2026-01-08T15:43:50.8391253Z"
}
]
}
}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.NewsResponse | 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.has_more | boolean | No | true | True while a later page exists; request page + 1 next and stop when it is false. | ||
| data.items | array | No | BBB's newsroom cards on this page, in source order. Near Me cards are preserved with type "Near Me". | |||
| data.items[].event_start_date | string | No | ||||
| data.items[].event_url | string | No | ||||
| data.items[].id | string | No | 32431 | BBB's id of the story, event, or related local-service card. | ||
| data.items[].image | bbbnews.Image | No | Image record, 4 fields: alt_text, caption, credit, url. Described under Get a BBB evergreen page API. | |||
| data.items[].modified_date | string | No | ||||
| data.items[].summary | string | No | ||||
| data.items[].title | string | No | ||||
| data.items[].type | string | No | Article | BBB's content type: Article for a story, an event type for an event, or Near Me for a related local-service card. | ||
| data.items[].url | string | No | Canonical BBB article URL, event URL, or related-service URL, according to Type. | |||
| 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.page | integer | No | 2 | Page number that was returned, 1-based. | ||
| data.page_size | integer | No | 10 | BBB's page size. A page can hold fewer items than this with more pages after it. | ||
| data.source_url | string | No | https://www.bbb.org/us/news/scams?page=2 | The newsroom URL that was read, page query included. | ||
| data.state | string | No | ca | Two-letter state or province code; present for a state or city URL. | ||
| data.topic | string | No | Scams | Topic name; present for a topic URL. | ||
| data.total | integer | No | 279 | BBB's count of stories in the list. It can be slightly higher than the number of stories the pages hold. | ||
| data.total_pages | integer | No | 28 | Number of pages BBB serves for the list, from its own pager; at least 1. | ||
| 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?url=https%3A%2F%2Fwww.bbb.org%2Fus%2Fnews%2Fscams%3Fpage%3D2" \
-H "x-api-key: $CRAWLORA_API_KEY"