Asda Category Products API
Copy category, department and aisle names from the category tree, then page through the matching products.
- 1–10 credits per call
- Failed calls are free
- Updated
- asda.category.products.list
{ "page": { "algolia_page": 0, "hits_per_page": 5, "nb_hits": 109, "nb_pages": 22, "page": 1 }, "items": [ { "name": "Organic Fresh Whole Milk 3.52 Pints/2L", "price": 2.34, "avg_rating": 5, "brand": "Dale Farm", "category": "Chilled Food > Milk, Butter, Cream & Eggs > Fresh Milk > Whole Milk", "cin": "1767599", "currency": "GBP", "gtin": "5000245006640", "id": "12970572", "image_id": "5000245006640", "image_url": "https://asdagroceries.scene7.com/is/image/asdagroceries/5000245006640", "in_stock": false, "offer": "List", "pack_size": "2L", "price_per_uom": "£1.17/LT", "price_per_uom_unit": "LT", "price_per_uom_value": 1.17, "rating_count": 1, "sales_type": "Each", "status": "A", "url": "https://www.asda.com/groceries/product/1767599", "taxonomy": { "AISLE_ID": "1215339434886", "AISLE_NAME": "Fresh Milk", "CAT_ID": "1215660378320", "CAT_NAME": "Chilled Food", "DEPT_ID": "1215339432024", "DEPT_NAME": "Milk, Butter, Cream & Eggs", "SHELF_ID": "1215339437949", "SHELF_NAME": "Whole Milk" } }, { "name": "Organic Semi-Skimmed 1 Litre", "price": 1.62, "avg_rating": 5, "brand": "Graham's", "category": "Chilled Food > Milk, Butter, Cream & Eggs > Fresh Milk > Semi Skimmed Milk", "cin": "7306256", "currency": "GBP", "gtin": "5025840001050", "id": "1000361202367", "image_id": "5025840001050", "image_url": "https://asdagroceries.scene7.com/is/image/asdagroceries/5025840001050", "in_stock": false, "offer": "List", "pack_size": "1L", "price_per_uom": "£1.62/LT", "price_per_uom_unit": "LT", "price_per_uom_value": 1.62, "rating_count": 5, "sales_type": "Each", "status": "A", "url": "https://www.asda.com/groceries/product/7306256", "taxonomy": { "AISLE_ID": "1215339434886", "AISLE_NAME": "Fresh Milk", "CAT_ID": "1215660378320", "CAT_NAME": "Chilled Food", "DEPT_ID": "1215339432024", "DEPT_NAME": "Milk, Butter, Cream & Eggs", "SHELF_ID": "1215339438036", "SHELF_NAME": "Semi Skimmed Milk" } } ]}
| # | Product | Product ID | CIN | Brand | Pack | Pack price | Currency | Price label | Unit price | Unit amount |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Organic Fresh Whole Milk 3.52 Pints/2L | 12970572 | 1767599 | Dale Farm | 2L | 2.34 | GBP | List | £1.17/LT | 1.17 |
| 2 | Organic Semi-Skimmed 1 Litre | 1000361202367 | 7306256 | Graham's | 1L | 1.62 | GBP | List | £1.62/LT | 1.62 |
| 3 | Cornish Whole Milk 1 Litre | 910000456050 | 3660004 | Trewithen Dairy | 1L | 1.52 | GBP | List | £1.52/LT | 1.52 |
| 4 | Cornish Semi-Skimmed Milk 2 Litres | 910000455787 | 3660002 | Trewithen Dairy | 2L | 2.28 | GBP | List | £1.14/LT | 1.14 |
| 5 | Organic Fresh Semi-Skimmed Milk 3.52 Pints/2L | 12970570 | 1767595 | Dale Farm | 2L | 2.34 | GBP | List | £1.17/LT | 1.17 |
What you send
The input
object of the request, with every field the endpoint accepts.
- Category, department and aisle take the names the categories endpoint returns. An aisle needs its department, and a department needs its category.
- Lists include delisted products unless you turn on the active-only option.
- Up to 60 products come back a page, 24 by default, and pages start at 1. Keep the page size the same as you move through the pages.
| Field | Type | Required | What it does | Example |
|---|---|---|---|---|
| category | string | yes | Exact top-level category name returned by asda.categories.list | Chilled Food |
| active_only | boolean | no | Return only products ASDA lists as active (STATUS "A"). Default false keeps delisted products (STATUS "I") so listings are complete. Default: false. |
|
| aisle | string | no | Optional exact aisle name; department is required when aisle is set | Fresh Milk |
| department | string | no | Optional exact department name within the category | Milk, Butter, Cream & Eggs |
| hits_per_page | integer | no | Number of results per page. From 1 to 60. Default: 24. |
5 |
| include_raw | boolean | no | Include ASDA's unprocessed Algolia response under raw (large: ~150 KB per 60 products). Set false for normalized fields only. Default: true. |
false |
| page | integer | no | 1-based results page At least 1. Default: 1. |
|
| store_id | string | no | Asda store id used for stock boosting and in_stock flags Default: 4565. |
Fields it returns
What each record in the response holds, with the values from the sample above.
| Field | Type | What it is | Example |
|---|---|---|---|
| items[].name | string | Name of the returned product or taxonomy node. | Organic Fresh Whole Milk 3.52 Pints/2L |
| items[].id | string | ASDA identifier; preserve it as text. | 12970572 |
| items[].cin | string | Catalog item number, retained separately from the product ID. | 1767599 |
| items[].brand | string | Brand supplied by the catalog; absent stays unknown. | Dale Farm |
| items[].pack_size | string | ASDA’s pack-size expression; keep it alongside unit prices. | 2L |
| items[].price | number | Ordinary pack amount in the stated currency, before any separate multibuy calculation. | 2.34 |
| items[].currency | string | Currency code for monetary values. | GBP |
| items[].offer | string | Ordinary price state: List, Rollback or Dropped; multibuy terms are separate. | List |
| items[].price_per_uom | string | Original unit-price display, which can use pounds or pence. | £1.17/LT |
| items[].price_per_uom_value | number | Unit amount expressed in pounds. | 1.17 |
| items[].price_per_uom_unit | string | Unit basis for the numeric amount, such as LT or KG. | LT |
| items[].status | string | A means active; I means delisted. This is separate from stock. | A |
| items[].in_stock | boolean | Stock flag for the request’s store; absence is unknown. | false |
| items[].gtin | string | Barcode-like value read from the catalog image name where available; keep it as text. | 5000245006640 |
| items[].rating_count | integer | Number of ratings, not individual reviews. | 1 |
| items[].avg_rating | integer | Average supplied when ratings exist. | 5 |
| items[].category | string | Product’s category hierarchy as returned. | Chilled Food > Milk, Butter, Cream & Eggs > Fresh Milk > Whole … |
| items[].url | string | ASDA product page linked by the catalog. | https://www.asda.com/groceries/product/1767599 |
| items[].image_id | string | ASDA's image ID for the product picture. | 5000245006640 |
| items[].image_url | string | Link to the product image. | https://asdagroceries.scene7.com/is/image/asdagroceries/5000245… |
| items[].sales_type | string | How the product is sold, such as Each or by weight. | Each |
| items[].taxonomy | object | Where the product sits in ASDA's catalogue, from category down to shelf. | 8 fields |
| items[].taxonomy.AISLE_ID | string | ASDA's ID for the aisle the product sits in. | 1215339434886 |
| items[].taxonomy.AISLE_NAME | string | The aisle name, such as Fresh Milk. | Fresh Milk |
| items[].taxonomy.CAT_ID | string | ASDA's ID for the top-level category. | 1215660378320 |
| items[].taxonomy.CAT_NAME | string | The top-level category name, such as Chilled Food. | Chilled Food |
| items[].taxonomy.DEPT_ID | string | ASDA's ID for the department. | 1215339432024 |
| items[].taxonomy.DEPT_NAME | string | The department name, such as Milk, Butter, Cream & Eggs. | Milk, Butter, Cream & Eggs |
| items[].taxonomy.SHELF_ID | string | ASDA's ID for the shelf. | 1215339437949 |
| items[].taxonomy.SHELF_NAME | string | The shelf name, such as Whole Milk. | Whole Milk |
| items | array | The products returned. | 5 records |
| page | object | Page details for the results: size, totals and position. | 5 fields |
| page.algolia_page | integer | The results page number in ASDA's own search, counted from 0. | 0 |
| page.hits_per_page | integer | How many products each page holds. | 5 |
| page.nb_hits | integer | How many products match in total. | 109 |
| page.nb_pages | integer | How many pages of results there are in total. | 22 |
| page.page | integer | Page details for the results: size, totals and position. | 1 |
Call it from your code, or ask your agent
Set UPSCRAPE_API_KEY to your key and copy a working request.
curl --request POST \ --url https://data.upscrape.com/execute \ --header "Authorization: Bearer $UPSCRAPE_API_KEY" \ --header "Content-Type: application/json" \ --header "Prefer: wait=30" \ --data '{ "capability": "asda.category.products.list", "input": { "aisle": "Fresh Milk", "category": "Chilled Food", "department": "Milk, Butter, Cream & Eggs", "hits_per_page": 5, "include_raw": false }}'
import jsonimport osimport requestspayload = json.loads(r'''{ "capability": "asda.category.products.list", "input": { "aisle": "Fresh Milk", "category": "Chilled Food", "department": "Milk, Butter, Cream & Eggs", "hits_per_page": 5, "include_raw": false }}''')response = requests.post( "https://data.upscrape.com/execute", headers={ "Authorization": f"Bearer {os.environ['UPSCRAPE_API_KEY']}", "Content-Type": "application/json", "Prefer": "wait=30", }, json=payload,)response.raise_for_status()print(json.dumps(response.json(), indent=2))
const response = await fetch("https://data.upscrape.com/execute", { method: "POST", headers: { "Authorization": `Bearer ${process.env.UPSCRAPE_API_KEY}`, "Content-Type": "application/json", "Prefer": "wait=30", }, body: JSON.stringify({ "capability": "asda.category.products.list", "input": { "aisle": "Fresh Milk", "category": "Chilled Food", "department": "Milk, Butter, Cream & Eggs", "hits_per_page": 5, "include_raw": false }}),});if (!response.ok) { throw new Error(`Upscrape request failed: ${response.status}`);}console.log(JSON.stringify(await response.json(), null, 2));
https://data.upscrape.com/mcp
With Upscrape, get the Asda category products for aisle "Fresh Milk", category "Chilled Food" and department "Milk, Butter, Cream & Eggs". Tell me what it costs before you run it, then show the results as a table.
More from the Asda API
The same data from other platforms
Asda Category Products API FAQ
The short answers. The docs have the long ones.
How much does the Asda Category Products API cost?
1–10 credits per successful call, shown before it runs. You buy credits once, and paid credits never expire.
What do I send?
Send category. The input fields below list every option with its type and limits.
Do I need an Asda login?
No. It reads public Asda data; nothing runs on your account.
Can my AI agent call it?
Yes, over MCP: the agent finds asda.category.products.list, checks its price and runs it with the same credits as the REST API.
Your first Asda call is free.
Up to 100 free credits to start, no card needed.