Boot Barn scraper API for AI agents and code
datawebot returns Boot Barn product pages as structured JSON, with the same fields for every shop: title, price, original price, availability, rating, image and link, plus details such as brand, variants and identifiers when a product page shows them. It runs from your AI agent over MCP or from code over REST on bootbarn.com in United States, at 1 credit per product page, and failed requests are free.
Fields you get
Every Boot Barn product comes back in these fields; a field is null when the page doesn't show it. Each endpoint below also lists its raw record schema.
| Field | Type | Description |
|---|---|---|
product_id | string or null | Opaque id. Pass it to get_product (or capability "product") to read the product again. |
title | string | Product title as the shop shows it. |
url | string or null | The product page on the shop. |
shop | string or null | The shop’s hostname, without www. |
price | object or null | amount (number), currency (ISO 4217, or null when the shop doesn’t say) and text (the shop’s own wording when it is the same amount, else null). |
original_price | object or null | The price before a discount, in the same shape as price. |
rating | number or null | Average rating, on the shop’s own scale. |
review_count | integer or null | Number of reviews or ratings. |
image_url | string or null | Main product image. |
availability | string or null | in_stock, out_of_stock, or the shop’s own stock wording. |
sponsored | boolean or null | true for an ad the shop marks as sponsored; null when the page doesn’t say. |
How to run it
From your agent, after connecting it once with the setup prompt (agent setup), ask in plain words:
Use datawebot to extract https://www.bootbarn.com/cody-james-cush-core-mens-major-performance-western-boots---broad-square-toe/2000442696.html?dwvar_2000442696_color=200 and give me each product's title, price and link as JSON.From code, send one request with your API key. The answer has the same shape for every shop; if it says "status": "working", read it again with GET /v1/requests/{id}.
curl https://api.datawebot.com/v1/requests \
-H "Authorization: Bearer $DATAWEBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"capability":"product","url":"https://www.bootbarn.com/cody-james-cush-core-mens-major-performance-western-boots---broad-square-toe/2000442696.html?dwvar_2000442696_color=200","format":"structured"}'Product details
One Boot Barn (US) product page in the color URL form Search returns (/<slug>/<id>.html?dwvar_<id>_color=<code>): title, displayed USD price equal to the schema.org Offer, struck-through price, MPN and master Offer availability. No size, SKU or stock is selected.
- ID
bootbarn.product_details- Version
1- Price
- 1 credit / page
- State
- Available
- Typical time
- About 30 s (estimate)
What it does
Reads one product page and returns that product. Works on bootbarn.com; other hosts are rejected before anything runs.
Input
One page URL per request, shaped like https://www.bootbarn.com/cody-james-cush-core-mens-major-performance-western-boots---broad-square-toe/2000442696.html?dwvar_2000442696_color=200.
Price
1 credit / page. Failed requests are free; a page that loaded but had nothing on it still costs credits. Set max_credits to refuse anything dearer before it runs.
Output
The default, "format": "structured". Every shop answers in the same fields, mapped from the page to the product@1 schema. Fields are null when the page doesn't show them, and a record that can't be mapped is read best-effort from its raw fields. The product is in product.
| Field | Type | Description |
|---|---|---|
product_id | string or null | Opaque id. Pass it to get_product (or capability "product") to read the product again. |
title | string | Product title as the shop shows it. |
url | string or null | The product page on the shop. |
shop | string or null | The shop’s hostname, without www. |
price | object or null | amount (number), currency (ISO 4217, or null when the shop doesn’t say) and text (the shop’s own wording when it is the same amount, else null). |
original_price | object or null | The price before a discount, in the same shape as price. |
rating | number or null | Average rating, on the shop’s own scale. |
review_count | integer or null | Number of reviews or ratings. |
image_url | string or null | Main product image. |
availability | string or null | in_stock, out_of_stock, or the shop’s own stock wording. |
sponsored | boolean or null | true for an ad the shop marks as sponsored; null when the page doesn’t say. |
product.details, when the shop's page maps to product@1:
| Field | Type | Description |
|---|---|---|
brand | string or null | Brand as the page names it. |
category_path | array of strings | Breadcrumb categories, top first. |
description | string or null | Plain-text description. |
feature_bullets | array of strings | Listed features. |
price_min, price_max | number or null | Lowest and highest variant price. |
discount_label | string or null | Discount wording, such as "-20%". |
stock | integer or null | Units in stock, when the page shows a number. |
sold_count, sold_count_basis | integer or null; "total", "monthly" or null | Units sold, and whether that is a total or per month. |
identifiers | array of {type, value} | asin, parent_asin, walmart_item_id, gtin, mpn, isbn or source_sku. |
specs_raw | array of {name, value} | The specification table as shown. |
images, image_count | array of {url, alt}; integer | Every product image. |
option_names | array of strings | Option names such as Size or Colour. |
variants, variant_count | array (up to 100); integer or null | Each variant: id, name, options, sku, final_price, price_before_discount, discount_label, available, stock, image_url. |
seller | object or null | id, name, url and type (official or marketplace). |
rating_scale | number or null | The top of the rating scale, such as 5. |
warnings | array of strings | Fields the page didn’t give, such as currency_missing. |
{
"request_id": "string",
"status": "done",
"product": {
"product_id": "string or null",
"title": "string",
"url": "string or null",
"shop": "string or null",
"price": {
"amount": "number",
"currency": "string or null",
"text": "string or null"
},
"original_price": {
"amount": "number",
"currency": "string or null",
"text": "string or null"
},
"rating": "number or null",
"review_count": "integer or null",
"image_url": "string or null",
"availability": "string or null",
"sponsored": "boolean or null",
"details": {
"brand": "string or null",
"variants": [
"…"
],
"…": "…"
}
},
"meta": {
"as_of": "date-time",
"country": "string",
"credits_used": "integer",
"credits_left": "integer"
}
}Over the Jobs API, GET /v1/jobs/{id}/results?format=structured returns the full product@1 records.
With "format": "raw", the answer keeps the structured fields and adds raw: this endpoint's own records, unchanged, one per item, in the schema below. It is the data the endpoint extracted from the page, not the page's HTML. Same price as structured.
| Field | Type | Description |
|---|---|---|
id | string required | Pattern ^[0-9A-Z]+$ |
url | string (uri) required | Pattern ^https://www\.bootbarn\.com/[^/?#]+/[0-9A-Z]+\.html\?dwvar_[0-9A-Z]+_color=[0-9A-Za-z]{1,20}$ |
title | string required | — |
color_code | string required | Color code from the URL; not a selected size |
size | null required | No size is selected |
selected_sku | null required | — |
stock | null required | Stock is not confirmed |
price | string required | Displayed current price |
original_price | string or null required | Struck-through original price when shown |
currency | "USD" required | — |
offer_availability | string required | Master schema.org Offer availability as sent; not selected-size purchasability |
mpn | string or null required | — |
{
"id": "string",
"url": "string (uri)",
"title": "string",
"color_code": "string",
"size": null,
"selected_sku": null,
"stock": null,
"price": "string",
"original_price": "string or null",
"currency": "USD",
"offer_availability": "string",
"mpn": "string or null"
}Over the Jobs API, results are raw by default; format=both gives each raw record with its structured form.
Request
Read a product page with capability: "product"; it runs this endpoint for the page's shop. Set format to "raw" for the raw records too.
curl https://api.datawebot.com/v1/requests \
-H "Authorization: Bearer $DATAWEBOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"capability":"product","url":"https://www.bootbarn.com/cody-james-cush-core-mens-major-performance-western-boots---broad-square-toe/2000442696.html?dwvar_2000442696_color=200","format":"structured"}'get_product {
"url": "https://www.bootbarn.com/cody-james-cush-core-mens-major-performance-western-boots---broad-square-toe/2000442696.html?dwvar_2000442696_color=200",
"format": "structured"
}If the answer says "status": "working", read it again with GET /v1/requests/{id} (MCP: get_results) after check_after_seconds.
Limits
- One page URL per request, on bootbarn.com only; other hosts are rejected before anything runs.
- Prices and stock are read when the request runs (
meta.as_of); datawebot keeps no price history, so schedule and store repeat reads yourself. - Fields the page doesn't show come back null; nothing is filled in or guessed.
- Up to 30 requests a minute per account.
Questions about the Boot Barn scraper API
Does Boot Barn have an official API?
datawebot does not use one. It reads Boot Barn's pages and returns them as structured JSON, so you need no Boot Barn developer account or partner key. Whether Boot Barn offers its own API, and on what terms, is for Boot Barn to say.
Can I scrape Boot Barn with Python?
Yes. Send the POST /v1/requests call shown on this page from Python with any HTTP client, such as requests or httpx: the same JSON body, with your API key in the Authorization header. The products come back in the answer's products field (product for a product page).
Is it legal to scrape Boot Barn?
It depends on where you are, Boot Barn's terms and what you do with the data. You stay responsible for how you use what datawebot returns. This is not legal advice; read our guide to robots.txt and legal considerations, and ask a lawyer about your case.
What does a Boot Barn scraper API call cost?
1 credit per product page. Failed requests are free; a page that loaded but had nothing on it still costs credits. Every account starts with 200 free credits, and credit packs start at 10,000 credits for $10, with no subscription.
Start with 200 free credits
Connect your agent with one setup prompt, or create an API key, and run Boot Barn requests right away. No card and no subscription.
Connect your agent See pricing