BBB API endpoint
Returns one page from the evergreen library BBB keeps under https://www.bbb.org/all/ (tips, topic hubs such as tax or holiday advice, scam studies): its title, introduction, body text, links, main image and last-modified time. BBB folds older newsroom stories into these pages and redirects the old article URL, so the url can be either the evergreen page itself or an article URL that bbb-article reports as moved; requested_url, final_url and every redirect between them are returned. published_at is always present and is null, because BBB publishes no date for these pages: modified_at is when BBB last edited the page, not when a story it replaced was published, and the page may cover a wider topic than that story did. The original article ID is not on the page; article_id repeats the one in the requested article URL. Returns 404 when the page does not exist, when an article URL has not been moved (read it with bbb-article), and when BBB redirects the URL somewhere outside /all/; the error names the destination and the answer is permanent. Content BBB loads in the browser for the visitor's local BBB is not included.
/bbb/pageQuery parameters:
url (required): URL-encoded canonical https://www.bbb.org URL of either
https://www.bbb.org/all/<path> with no query string, orhttps://www.bbb.org/article/<type>/<id>-<slug>, that BBB has moved to an evergreen page. This is the URL bbb-article answers with 404 BBB has moved this article to ....BBB keeps a library of evergreen pages under /all/: consumer and business tips, topic hubs (tax, holiday, home improvement, identity theft), and scam studies. It folds older newsroom stories into these pages and redirects the old article URL to them. This endpoint reads the page and reports how the requested URL got there.
Response fields:
requested_url, final_url: the URL you asked for (without any query string) and the evergreen page the content was read from.redirects: every redirect between the two, in order, each with the url requested, the HTTP status and the location BBB answered. Empty when the requested URL is the evergreen page itself. One evergreen page can also redirect to another (/all/holiday to /all/holiday-hq).article_id: the numeric ID from the requested article URL, present only when an article URL was requested. The evergreen page itself does not carry the old article's ID.canonical_url: the address the page declares for itself.page_type: BBB's own name for the page template, passed through unchanged. It is not a fixed list; values seen so far include openmicrositepage, bannermarketing, bannermarketingsiderail, generallandingpage, singlepage and quizform.title, summary (the introduction under the title, when the page has one), description (the page's search description).published_at: always present and null. BBB publishes no publication date for these pages. A value appears only if BBB starts writing one into the page.modified_at: when BBB last edited the page, in UTC. It is not the date of a story the page replaced.image: the page's main image and its alt text, when it has one.body: the page text in reading order, one paragraph, heading, list item or table cell per block, separated by blank lines. The site header, footer and cookie notice are left out.links: the links in the page's introduction and body, each once, with their text.What a moved article gives you: the page BBB now serves in its place. That page may be the same advice under a new address or a wider hub covering the topic, and it has no publication date and no article ID, so treat it as a separate, undated record rather than as the original story.
Errors:
400 when url is not a canonical https://www.bbb.org/all/... or article URL, or an evergreen URL carries a query string.404 when the page does not exist, when the article URL has not been moved (BBB has not moved this article: ... read it with bbb-article), or when BBB redirects the URL to a page outside /all/ (BBB redirects this URL to <address>, which is not one of its evergreen pages). These answers are permanent, so do not retry them.503 when BBB blocked every attempt. Retry after 10 to 30 seconds.| Field | Filled in, of 21 checked | Values in the sample |
|---|---|---|
| text | 21 | “United States” and 20 other values |
| url | 21 | bbb.org and 2 other hosts |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| url | string | Yes | Canonical https://www.bbb.org URL of an evergreen page (/all/<path>, no query string) or of an article (/article/<type>/<id>-<slug>) that BBB has moved to one | https://www.bbb.org/all/consumer/tip/what-to-know-before-purchasing-a-gift-card | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/bbb/page?url=https%3A%2F%2Fwww.bbb.org%2Fall%2Fconsumer%2Ftip%2Fwhat-to-know-before-purchasing-a-gift-card" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"requested_url": "https://www.bbb.org/article/news-releases/14400-dont-get-scammed-out-of-a-gift-card-this-season",
"final_url": "https://www.bbb.org/all/consumer/tip/what-to-know-before-purchasing-a-gift-card",
"redirects": [
{
"url": "https://www.bbb.org/article/news-releases/14400-dont-get-scammed-out-of-a-gift-card-this-season",
"status": 301,
"location": "https://www.bbb.org/all/consumer/tip/what-to-know-before-purchasing-a-gift-card"
}
],
"article_id": "14400",
"canonical_url": "https://www.bbb.org/all/consumer/tip/what-to-know-before-purchasing-a-gift-card",
"page_type": "openmicrositepage",
"title": "What to know before purchasing a gift card",
"summary": "Discover BBB tips to protect your money when buying and using gift cards.",
"description": "Gift card scams like \"gift card draining\" can leave buyers with worthless cards.",
"published_at": null,
"modified_at": "2025-09-16T17:40:48Z",
"image": {
"url": "https://www.bbb.org/content/dam/0473-charlotte/gift%20cards.png",
"alt_text": "african american woman holding gift card smiling while looking at laptop"
},
"body": "Gift cards are a popular and convenient gift-giving option, but they are also a target for scammers.\n\nWhat you'll learn:",
"links": [
{
"text": "BBB Scam Tracker",
"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.PageResponse | No | ||||
| data.article_id | string | No | 14400 | The numeric ID in the requested URL when that was an article URL. The evergreen page does not carry it. | ||
| data.body | string | No | The page text in reading order: one paragraph, heading, list item or table cell per block, separated by blank lines. | |||
| data.canonical_url | string | No | https://www.bbb.org/all/consumer/tip/what-to-know-before-purchasing-a-gift-card | The address the page declares for itself. | ||
| data.description | string | No | The page's search description. | |||
| data.final_url | string | No | https://www.bbb.org/all/consumer/tip/what-to-know-before-purchasing-a-gift-card | The evergreen page the content was read from. | ||
| data.image | bbbnews.Image | No | ||||
| data.image.alt_text | string | No | ||||
| data.image.caption | string | No | ||||
| data.image.credit | string | No | ||||
| data.image.url | string | No | ||||
| data.links | array | No | The links in the introduction and body, each once. | |||
| data.links[].text | string | No | ||||
| data.links[].url | string | No | ||||
| data.modified_at | string | No | 2025-09-16T17:40:48Z | When BBB last edited the page, in UTC. Not the date of a story the page replaced. | ||
| data.page_type | string | No | openmicrositepage | BBB's own name for the page template, passed through unchanged. | ||
| data.published_at | string | No | Always null: BBB publishes no date for these pages. A value appears only if BBB starts writing one into the page. | |||
| data.redirects | array | No | Every redirect between requested_url and final_url, in order. Empty when the requested URL is the evergreen page itself. | |||
| data.redirects[].location | string | No | https://www.bbb.org/all/consumer/tip/what-to-know-before-purchasing-a-gift-card | The address BBB redirected to. | ||
| data.redirects[].status | integer | No | 301 | The HTTP status BBB answered with. | ||
| data.redirects[].url | string | No | https://www.bbb.org/article/news-releases/14400-dont-get-scammed-out-of-a-gift-card-this-season | The address that was requested. | ||
| data.requested_url | string | No | https://www.bbb.org/article/news-releases/14400-dont-get-scammed-out-of-a-gift-card-this-season | The URL that was asked for, without any query string. | ||
| data.summary | string | No | The introduction shown under the title, when the page has one. | |||
| data.title | string | No | What to know before purchasing a gift card | |||
| 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/page?url=https%3A%2F%2Fwww.bbb.org%2Fall%2Fconsumer%2Ftip%2Fwhat-to-know-before-purchasing-a-gift-card" \
-H "x-api-key: $CRAWLORA_API_KEY"