Starbucks API endpoint
Use Crawlora's Starbucks Product Detail API to extract supported public Starbucks data as structured JSON. This page includes request parameters, cURL examples, response schema, error behavior, credit cost, and a Playground link for testing before integration.
/starbucks/product/{product_number}/{form}Returns one Starbucks product's full detail: name, description, product type, image, Rewards star cost, customization options, and every size with its own nutrition panel (serving size, calories, calories from fat, and per-fact values for total fat with saturated and trans fat subfacts, cholesterol, sodium, total carbohydrates, protein, and caffeine). product_number is the numeric id from a /starbucks/menu result or a product page URL. form is that product's form; allowed values are hot, iced, single, packaged, whole-bean, and via. store_number optionally scopes availability to one store. Starbucks does not expose dollar pricing on this surface, so no price is returned; star_cost is the Rewards star cost. market selects which country catalog to resolve against, one of us or ca, defaulting to us. Each size also carries its default_recipe, the standard build, which is the required starting point for the /starbucks/product/{product_number}/{form}/nutrition endpoint. An unknown product number, or a form that product is not sold in, returns not found. Developers commonly use this endpoint for data enrichment, monitoring, research dashboards, internal automation, and agent-native workflows that need repeatable structured public web data. Authentication uses the documented Crawlora headers, and usage is metered with the credit cost shown on this page.
Request parameters are generated from the active endpoint catalog. Required values must be sent before Crawlora can call the upstream public web data source.
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| product_number (path) | string | Yes | Starbucks numeric product id | ||
| form (path) | string | Yes | Product form. One of: hot, iced, single, packaged, whole-bean, via Allowed values: hot, iced, single, packaged, whole-bean, via | ||
| store_number | string | No | Starbucks store number to scope availability to, e.g. 101-54 | ||
| market | string | No | us | Starbucks country site to read. One of: us, ca. Defaults to us Allowed values: us, ca | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/starbucks/product/%3Cproduct_number%3E/%3Cform%3E?market=us" \ -H "x-api-key: $CRAWLORA_API_KEY"
Send your scraping API key in the x-api-key header. Use the console API Keys page to rotate or select the active key.
Endpoint usage is metered in credits. The plan prices, included credits, limits, and overage rates below match the active backend billing configuration.
| Plan | Price | Included credits | Daily cap | Rate limit | Overage |
|---|---|---|---|---|---|
| Free | $0/mo | 2,000 | 500 daily credits | 5/min | No overage |
| Starter | $9/mo | 20,000 | 5,000 daily credits | 15/min | $0.75/1,000 overage credits when enabled |
| Growth | $29/mo | 100,000 | 25,000 daily credits | 45/min | $0.45/1,000 overage credits when enabled |
| Pro | $79/mo | 400,000 | No daily cap | 120/min | $0.30/1,000 overage credits |
| Business | $199/mo | 1,200,000 | No daily cap | 300/min | $0.20/1,000 overage credits |
| Enterprise | $499/mo | 5,000,000 | No daily cap | 1,000/min | $0.12/1,000 overage credits |
This endpoint is executed through Crawlora's managed scraping infrastructure.
- Each size carries a `default_recipe`: the standard build for that size, as a list of modifiers with `sku`, `name`, `form_code`, and `option_product_number`. This is the required starting point for `POST /starbucks/product/{product_number}/{form}/nutrition`, which wants the complete modifier set rather than a change-set. `form_code` describes how a modifier behaves: `one` is a pick-exactly-one slot (the milk), `qty` is a countable (espresso shots, syrup pumps), and `modifier`/`yes-no` are toggles. - **No price.** Starbucks does not expose dollar pricing on this surface — it is store- and session-scoped behind its authenticated ordering flow. `star_cost` is the Starbucks Rewards star cost and is the only price-like value available. - Each entry in `sizes` carries its own `nutrition` panel: `serving_size`, `calories`, `calories_from_fat`, and a `facts` list. Facts cover Total Fat (with Saturated Fat and Trans Fat as `subfacts`), Cholesterol, Sodium, Total Carbohydrates, Protein, and **Caffeine**. - `daily_percent_value` is Starbucks' own preformatted percentage, e.g. `"15%"`. - Nutrition values are normalized to strings because the upstream mixes numbers and strings for the same field. - `options` lists the customization categories Starbucks offers for the product, e.g. Milk, Flavors, Espresso. - `product_type` on this endpoint uses a different vocabulary from the menu tree's (`beverages` here versus `Beverage` there); treat it as an upstream label rather than a stable enum. - An unknown `product_number`, or a `form` that product is not sold in, returns a not-found error. Example response: ```json { "code": 200, "msg": "OK", "data": { "product_number": "418", "form": "hot", "name": "Pumpkin Spice Latte", "description": "Our signature Espresso Roast and steamed milk with the celebrated flavor combination of pumpkin, cinnamon, nutmeg and clove. Enjoy it topped with whipped cream and real pumpkin-pie spices.", "product_type": "beverages", "image_url": "https://cloudassets.starbucks.com/is/image/sbuxcorp/PumpkinSpiceLatteV1", "in_catalog": true, "star_cost": 200, "options": [ { "name": "Milk" }, { "name": "Flavors" } ], "sizes": [ { "size_code": "Short", "sku": "183885", "nutrition": { "serving_size": "8 fl oz", "calories": "210", "calories_from_fat": "80", "facts": [ { "name": "Total Fat", "value": "9 g", "unit_of_measure": "g", "daily_percent_value": "11%", "subfacts": [ { "name": "Saturated Fat", "value": "5 g", "unit_of_measure": "g", "daily_percent_value": "25%" }, { "name": "Trans Fat", "value": "0 g", "unit_of_measure": "g" } ] }, { "name": "Caffeine", "value": "150 mg", "unit_of_measure": "mg" } ] } } ], "source_url": "https://www.starbucks.com/apiproxy/v1/ordering/418/hot", "fetched_at": "2026-08-30T10:31:11Z" } } ```
Crawlora does not silently return bad data when the upstream page cannot be used.
| Status | Common failure case |
|---|---|
| 400 | Invalid input or missing required parameter |
| 429 | Plan or endpoint rate limit exceeded |
| 500 | Internal execution error |
| 502 | Upstream platform failed, returned unusable HTML, or served a challenge page that could not be resolved |
When possible, Crawlora returns structured error context so your integration can retry, back off, or inspect the request.
| 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 |
{
"code": 200,
"msg": "OK",
"data": {
"product_number": "418",
"form": "hot",
"name": "Pumpkin Spice Latte",
"description": "Our signature Espresso Roast and steamed milk with the celebrated flavor combination of pumpkin, cinnamon, nutmeg and clove. Enjoy it topped with whipped cream and real pumpkin-pie spices.",
"product_type": "beverages",
"image_url": "https://cloudassets.starbucks.com/is/image/sbuxcorp/PumpkinSpiceLatteV1",
"in_catalog": true,
"star_cost": 200,
"options": [
{
"name": "Milk"
},
{
"name": "Flavors"
}
],
"sizes": [
{
"size_code": "Short",
"sku": "183885",
"nutrition": {
"serving_size": "8 fl oz",
"calories": "210",
"calories_from_fat": "80",
"facts": [
{
"name": "Total Fat",
"value": "9 g",
"unit_of_measure": "g",
"daily_percent_value": "11%",
"subfacts": [
{
"name": "Saturated Fat",
"value": "5 g",
"unit_of_measure": "g",
"daily_percent_value": "25%"
},
{
"name": "Trans Fat",
"value": "0 g",
"unit_of_measure": "g"
}
]
},
{
"name": "Caffeine",
"value": "150 mg",
"unit_of_measure": "mg"
}
]
}
}
],
"source_url": "https://www.starbucks.com/apiproxy/v1/ordering/418/hot",
"fetched_at": "2026-08-30T10:31:11Z"
}
}Request schema
No body schema
Response schema
#/definitions/starbucks.productResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | starbucks.ProductResponse | No | ||||
| data.description | string | No | ||||
| data.fetched_at | string | No | ||||
| data.form | string | No | ||||
| data.image_url | string | No | ||||
| data.in_catalog | boolean | No | ||||
| data.market | string | No | ||||
| data.name | string | No | ||||
| data.options | array | No | Options are the customization choices Starbucks offers for this product, e.g. milk, syrups, espresso shots. | |||
| data.options[].name | string | No | ||||
| data.options[].type | string | No | ||||
| data.product_number | string | No | ||||
| data.product_type | string | No | ||||
| data.sizes | array | No | ||||
| data.sizes[].default_recipe | array | No | DefaultRecipe is the size's standard build -- the modifiers a plain order of this size already includes. It is exposed because it is the required input to the nutrition-calculate endpoint: that endpoint wants the FULL modifier set, not a delta, so a caller starts from this list, changes what they want, and posts the whole thing back. | |||
| data.sizes[].default_recipe[].form_code | string | No | FormCode describes how the modifier behaves: "one" is a pick-exactly-one slot (the milk), "qty" is a countable (espresso shots, syrup pumps), "modifier"/"yes-no" are toggles. | |||
| data.sizes[].default_recipe[].name | string | No | ||||
| data.sizes[].default_recipe[].option_product_number | string | No | OptionProductNumber identifies the option in the product's own options tree. | |||
| data.sizes[].default_recipe[].sku | string | No | SKU is the value to send as a nutrition-calculate modifier sku. | |||
| data.sizes[].display_name | string | No | ||||
| data.sizes[].nutrition | starbucks.Nutrition | No | ||||
| data.sizes[].nutrition.calories | string | No | ||||
| data.sizes[].nutrition.calories_from_fat | string | No | ||||
| data.sizes[].nutrition.facts | array | No | ||||
| data.sizes[].nutrition.facts[].daily_percent_value | string | No | ||||
| data.sizes[].nutrition.facts[].name | string | No | ||||
| data.sizes[].nutrition.facts[].subfacts | array | No | ||||
| data.sizes[].nutrition.facts[].unit_of_measure | string | No | ||||
| data.sizes[].nutrition.facts[].value | string | No | ||||
| data.sizes[].nutrition.serving_size | string | No | ||||
| data.sizes[].size_code | string | No | ||||
| data.sizes[].sku | string | No | ||||
| data.source_url | string | No | ||||
| data.star_cost | integer | No | ||||
| data.store_number | string | No | ||||
| msg | string | No | OK |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/starbucks/product/%3Cproduct_number%3E/%3Cform%3E?market=us" \
-H "x-api-key: $CRAWLORA_API_KEY"Crawlora is designed for responsible structured public web data workflows. Customers are responsible for using Crawlora in compliance with applicable laws, third-party rights, target-platform rules, and Crawlora terms.
Read Crawlora terms