Best Buy API endpoint
Returns one page (up to 24) of one Best Buy keyword search's product listing (sku, title, url, image, price, rating, review count). q is free-text search keywords, e.g. "laptop". page is the optional 1-indexed page number (defaults to 1); requesting a page past the last one returns an empty products list, not an error.
/bestbuy/searchNotable response behavior:
page echoes the page actually returned. total is the search's own total result count across all pages; count is how many products this response actually carries (up to 24).price, rating, and review_count are omitted (zero-valued) when the upstream did not carry that field for a given product; this happens occasionally and is not itself an error condition.404 on page 1. Requesting a page past the last real page returns a normal 200 with an empty products list, not an error.page must be between 1 and 500; anything outside that range returns 400.| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| q | string | Yes | Search keywords | laptop | |
| page | integer | No | 1 | 1-indexed page number, defaults to 1 | 1 |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/bestbuy/search?q=laptop&page=1" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"query": "laptop",
"page": 1,
"total": 6286,
"count": 2,
"source_url": "https://www.bestbuy.com/site/searchpage.jsp?st=laptop&intl=nosplash",
"fetched_at": "2026-08-15T10:00:00Z",
"products": [
{
"sku": "6673590",
"title": "ASUS - ROG Zephyrus G16 16\" OLED 3K Gaming Laptop",
"url": "https://www.bestbuy.com/product/asus-rog-zephyrus-g16/JJGHGSJZR6",
"image_url": "https://pisces.bbystatic.com/image2/BestBuy_US/images/products/6673590.jpg",
"price": 4399.99,
"rating": 4.6,
"review_count": 28
}
]
}
}Request schema
No body schema
Response schema
#/definitions/bestbuy.searchResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | bestbuy.SearchResponse | No | ||||
| data.count | integer | No | 24 | |||
| data.fetched_at | string | No | ||||
| data.page | integer | No | 1 | |||
| data.products | array | No | ||||
| data.products[].image_url | string | No | ||||
| data.products[].price | number | No | 799.99 | |||
| data.products[].rating | number | No | 4.6 | |||
| data.products[].review_count | integer | No | 28 | |||
| data.products[].sku | string | No | 6673590 | |||
| data.products[].title | string | No | ||||
| data.products[].url | string | No | ||||
| data.query | string | No | laptop | |||
| data.source_url | string | No | ||||
| data.total | integer | No | 6286 | |||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 404 | Not Found | #/definitions/app.Response |
| 429 | Too Many Requests | #/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/bestbuy/search?q=laptop&page=1" \
-H "x-api-key: $CRAWLORA_API_KEY"