Asda Products Search API
Enter a product or ingredient name and retain pack sizes when comparing the results.
- 1–10 credits per call
- Failed calls are free
- Updated
- asda.products.search
{ "page": { "algolia_page": 0, "hits_per_page": 5, "nb_hits": 383, "nb_pages": 77, "page": 1 }, "items": [ { "name": "British Milk Semi Skimmed 2 Pints", "price": 1.2, "avg_rating": 4.3486, "brand": "ASDA", "category": "Chilled Food > Milk, Butter, Cream & Eggs > Fresh Milk > Semi Skimmed Milk", "cin": "538241", "currency": "GBP", "gtin": "20411985", "id": "23423", "image_id": "20411985", "image_url": "https://asdagroceries.scene7.com/is/image/asdagroceries/20411985", "in_stock": true, "offer": "Dropped", "pack_size": "2 PINT", "price_per_uom": "£1.06/LT", "price_per_uom_unit": "LT", "price_per_uom_value": 1.06195, "rating_count": 284, "sales_type": "Each", "status": "A", "url": "https://www.asda.com/groceries/product/538241", "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" } }, { "name": "British Whole Milk 2 Pints", "price": 1.2, "avg_rating": 4.0949, "brand": "ASDA", "category": "Chilled Food > Milk, Butter, Cream & Eggs > Fresh Milk > Whole Milk", "cin": "538239", "currency": "GBP", "gtin": "20411992", "id": "23421", "image_id": "20411992", "image_url": "https://asdagroceries.scene7.com/is/image/asdagroceries/20411992", "in_stock": true, "offer": "Dropped", "pack_size": "2 PINT", "price_per_uom": "£1.06/LT", "price_per_uom_unit": "LT", "price_per_uom_value": 1.06195, "rating_count": 137, "sales_type": "Each", "status": "A", "url": "https://www.asda.com/groceries/product/538239", "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" } } ]}
| # | Product | Product ID | CIN | Brand | Pack | Pack price | Currency | Previous price | Price label | Unit price |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | British Milk Semi Skimmed 2 Pints | 23423 | 538241 | ASDA | 2 PINT | 1.2 | GBP | Dropped | £1.06/LT | |
| 2 | British Whole Milk 2 Pints | 23421 | 538239 | ASDA | 2 PINT | 1.2 | GBP | Dropped | £1.06/LT | |
| 3 | British Milk Skimmed 2 Pints | 23422 | 538240 | ASDA | 2 PINT | 1.2 | GBP | Dropped | £1.06/LT | |
| 4 | Arla Filtered Fresh Semi Skimmed Milk 1L Fresher for Longer | 32088739 | 2041527 | Cravendale | 1L | 1.64 | GBP | Dropped | £1.64/LT | |
| 5 | Long Life Semi Skimmed Milk 6 x 1 Litre | 910000392661 | 3516819 | ASDA | 6X1L | 6 | GBP | 6.14 | Dropped | £1.00/LT |
What you send
The input
object of the request, with every field the endpoint accepts.
- 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 |
|---|---|---|---|---|
| query | string | yes | Search query. | milk |
| 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. |
|
| 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. | 1 |
| store_id | string | no | Asda store id used for stock boosting and in_stock flags Default: 4565. |
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. | British Milk Semi Skimmed 2 Pints |
| items[].id | string | ASDA identifier; preserve it as text. | 23423 |
| items[].cin | string | Catalog item number, retained separately from the product ID. | 538241 |
| items[].brand | string | Brand supplied by the catalog; absent stays unknown. | ASDA |
| items[].pack_size | string | ASDA’s pack-size expression; keep it alongside unit prices. | 2 PINT |
| items[].price | number | Ordinary pack amount in the stated currency, before any separate multibuy calculation. | 1.2 |
| items[].currency | string | Currency code for monetary values. | GBP |
| items[].offer | string | Ordinary price state: List, Rollback or Dropped; multibuy terms are separate. | Dropped |
| items[].price_per_uom | string | Original unit-price display, which can use pounds or pence. | £1.06/LT |
| items[].price_per_uom_value | number | Unit amount expressed in pounds. | 1.06 |
| 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. | true |
| items[].gtin | string | Barcode-like value read from the catalog image name where available; keep it as text. | 20411985 |
| items[].rating_count | integer | Number of ratings, not individual reviews. | 284 |
| items[].avg_rating | number | Average supplied when ratings exist. | 4.35 |
| items[].category | string | Product’s category hierarchy as returned. | Chilled Food > Milk, Butter, Cream & Eggs > Fresh Milk > Semi S… |
| items[].url | string | ASDA product page linked by the catalog. | https://www.asda.com/groceries/product/538241 |
| items[].image_id | string | ASDA's image ID for the product picture. | 20411985 |
| items[].image_url | string | Link to the product image. | https://asdagroceries.scene7.com/is/image/asdagroceries/20411985 |
| 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. | 1215339438036 |
| items[].taxonomy.SHELF_NAME | string | The shelf name, such as Whole Milk. | Semi Skimmed 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. | 383 |
| page.nb_pages | integer | How many pages of results there are in total. | 77 |
| 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.products.search", "input": { "hits_per_page": 5, "include_raw": false, "page": 1, "query": "milk", "store_id": "4565" }}'
import jsonimport osimport requestspayload = json.loads(r'''{ "capability": "asda.products.search", "input": { "hits_per_page": 5, "include_raw": false, "page": 1, "query": "milk", "store_id": "4565" }}''')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.products.search", "input": { "hits_per_page": 5, "include_raw": false, "page": 1, "query": "milk", "store_id": "4565" }}),});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
Using Upscrape, search ASDA for milk in store 4565 with five results. Compare matching litre-based unit prices, retaining pack sizes and product IDs. Leave missing stock flags unknown.
More from the Asda API
The same data from other platforms
Asda Products Search API FAQ
The short answers. The docs have the long ones.
How much does the Asda Products Search 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 query. 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.products.search, 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.