BBB API endpoint
Returns published BBB article metadata, author names, body text, and useful links from a canonical public article URL on www.bbb.org or bbb.org. If BBB merges a story into another BBB article, the response contains the target article's id and source_url plus the original requested_url. Returns a permanent 404 when BBB moves the URL to an evergreen /all/ page or outside bbb.org, when BBB redirects the URL back to itself so it cannot be loaded, or when the URL resolves to a published non-article type such as an event; safe HTTPS destinations are named in the error and are never fetched.
/bbb/articleQuery parameters:
url (required): URL-encoded canonical HTTPS https://www.bbb.org/article/... or https://bbb.org/article/... URL. Article links returned by bbb_news are accepted, including their BBB backurl query.The response includes the published article's title, summary, author names, dates, topic labels, main image, stripped article body text, and useful HTTP(S) links from the body. Page navigation, ads, and other site chrome are not included. requested_url is the canonical URL supplied by the caller; source_url is the BBB URL whose article content was returned. When BBB merges one story into another article, the endpoint returns that target article with its id and source_url; both may differ from requested_url. Use the returned id as the article identity. The endpoint accepts public article pages only; blocked or unrecognized pages return a typed upstream error.
Errors:
404 when the requested URL resolves to a published BBB content type other than Article (for example, an event); the error is BBB page is not a published article. This is permanent; do not retry it.404 when BBB has moved the article to an evergreen page under https://www.bbb.org/all/... (holiday, home improvement and tax hubs, scam studies): the newsroom may still list the old URL, which now redirects there. The error reads BBB has moved this article to <new URL>, which is not a newsroom article page.404 when BBB has moved the article outside bbb.org; an HTTPS destination without credentials or an explicit port is named as BBB has moved this article to <new URL>, outside bbb.org, and the destination is not fetched. Other destination shapes are reported as BBB has moved this article outside bbb.org without exposing the URL. Do not retry these answers.404 when BBB redirects the article back to itself (BBB redirects this article back to itself, so it cannot be loaded from BBB). BBB answers a few articles whose address contains a registered-trademark sign (®) this way, and a browser cannot open them either. Retrying does not help; the answer is cached for six hours, so repeat calls return quickly.id and source_url, and keeps the original requested_url in the response.503 when BBB blocked every attempt. Retry after 10 to 30 seconds.| Field | Filled in, of 3 checked | Values in the sample |
|---|---|---|
| text | 3 | median 21 characters |
| url | 3 | bbb.org and 1 other host |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| url | string | Yes | Canonical BBB article URL on www.bbb.org or bbb.org | https://www.bbb.org/article/news-releases/34935-bbb-scam-alert-dont-be-fooled-by-free-gas-and-grocery-card-postcards | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/bbb/article?url=https%3A%2F%2Fwww.bbb.org%2Farticle%2Fnews-releases%2F34935-bbb-scam-alert-dont-be-fooled-by-free-gas-and-grocery-card-postcards" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"requested_url": "https://www.bbb.org/article/news-releases/34935-bbb-scam-alert-dont-be-fooled-by-free-gas-and-grocery-card-postcards",
"source_url": "https://www.bbb.org/article/news-releases/34935-bbb-scam-alert-dont-be-fooled-by-free-gas-and-grocery-card-postcards",
"id": "34935",
"type": "Article",
"title": "BBB Scam Alert: Don't be fooled by \"free\" gas and grocery card postcards",
"published_at": "2026-07-30T14:55:16.418174Z",
"modified_at": "2026-07-30T14:55:09.523089Z",
"authors": [
{
"name": "Better Business Bureau",
"url": "https://www.bbb.org"
}
],
"topics": [
"News Releases"
],
"body": "We received multiple reports through our BBB Scam Tracker page.",
"links": [
{
"text": "BBB Scam Tracker page",
"url": "https://www.bbb.org/scamtracker"
}
]
}
}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.ArticleResponse | No | ||||
| data.authors | array | No | ||||
| data.authors[].name | string | No | ||||
| data.authors[].url | string | No | ||||
| data.body | string | No | ||||
| data.id | string | No | ||||
| data.image | bbbnews.Image | No | Image record, 4 fields: alt_text, caption, credit, url. Described under Get a BBB evergreen page API. | |||
| data.links | array | No | ||||
| data.links[].text | string | No | ||||
| data.links[].url | string | No | ||||
| data.modified_at | string | No | ||||
| data.published_at | string | No | ||||
| data.requested_url | string | No | ||||
| data.source_url | string | No | ||||
| data.summary | string | No | ||||
| data.title | string | No | ||||
| data.topics | array | No | ||||
| data.type | string | No | ||||
| 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/article?url=https%3A%2F%2Fwww.bbb.org%2Farticle%2Fnews-releases%2F34935-bbb-scam-alert-dont-be-fooled-by-free-gas-and-grocery-card-postcards" \
-H "x-api-key: $CRAWLORA_API_KEY"