ASDA APIasda.com ↗
Access ASDA's grocery catalog via API. Search products, browse categories, get pricing, promotions, and customer reviews. 6 endpoints, GBP pricing included.
What is the ASDA API?
The ASDA API provides 6 endpoints for querying ASDA's online grocery catalog, including full-text product search, category browsing, and per-product review data. The search_products endpoint returns paginated results with fields like price, original_price, price_per_unit, rating, and review_count, making it straightforward to build price trackers, grocery comparison tools, or inventory monitors against one of the UK's largest supermarket chains.
curl -X GET 'https://api.parse.bot/scraper/2fda71be-d876-4595-b859-b1dacfb5a8a0/search_products?page=0&limit=5&query=milk' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace asda-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: ASDA Groceries SDK — search, browse categories, get details and reviews."""
from parse_apis.asda_groceries_api import Asda, CategoryType, ProductNotFound
client = Asda()
# Search for products by keyword — limit= caps total items fetched.
for product in client.products.search(query="butter", limit=5):
print(product.name, f"£{product.price}", product.availability)
# Get one product's full details via .first() then drill into reviews.
product = client.products.search(query="milk", limit=1).first()
if product:
detail = client.products.get(id=product.id)
print(detail.name, detail.brand, f"£{detail.price}", detail.package_size)
for review in detail.reviews.list(limit=3):
print(review.rating, review.user, review.text[:60] if review.text else "")
# Browse categories and filter by type using the enum.
for cat in client.categories.list(limit=10):
if cat.type == CategoryType.DEPARTMENT:
print(cat.name, cat.id)
# Drill into a category's products.
category = client.categories.list(limit=1).first()
if category:
for p in category.products(limit=3):
print(p.name, f"£{p.price}", p.category)
# Typed error handling for a missing product.
try:
client.products.get(id="nonexistent_product_id_99999")
except ProductNotFound as exc:
print(f"Product not found: {exc.product_id}")
# Browse rollback (price reduction) offers.
for deal in client.products.rollbacks(limit=3):
print(deal.name, f"£{deal.price}", f"was £{deal.original_price}" if deal.original_price else "")
print("exercised: products.search / products.get / reviews.list / categories.list / category.products / products.rollbacks")
Full-text search over ASDA's grocery catalog. Returns paginated product listings matching the keyword query. Results include pricing, availability, promotions, and ratings. Pagination is 0-indexed.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number (0-indexed) |
| limit | integer | Max results per page (1-50) |
| queryrequired | string | Search keyword (e.g. 'milk', 'butter', 'bread') |
{
"type": "object",
"fields": {
"page": "integer current page number",
"items": "array of product objects with id, cin, name, brand, price, original_price, price_per_unit, uom, package_size, rating, review_count, availability, promotions, image_url, url, category, is_frozen",
"total": "integer total number of matching products",
"total_pages": "integer total number of pages"
},
"sample": {
"data": {
"page": 0,
"items": [
{
"id": "20504",
"cin": "165468",
"uom": null,
"url": "https://www.asda.com/groceries/product/semi-skimmed-milk/british-milk-semi-skimmed-4-pints/20504",
"name": "British Milk Semi Skimmed 4 Pints",
"brand": "ASDA",
"price": 1.65,
"rating": 4.1874,
"category": "Semi Skimmed Milk",
"image_url": "https://ui.assets-asda.com/dm/asda/20337087?defaultImage=asda-ghs-less&resMode=sharp2&id=v16pY1&fmt=jpg&fit=constrain,1&wid=288&hei=288",
"is_frozen": false,
"promotions": [],
"availability": "In Stock",
"package_size": "4 PINT",
"review_count": 1035,
"original_price": null,
"price_per_unit": null
}
],
"total": 176,
"total_pages": 36
},
"status": "success"
}
}About the ASDA API
What the API Covers
The API surfaces ASDA's grocery catalog across six endpoints. search_products accepts a query string plus optional page and limit parameters (1–50 results per page, 0-indexed) and returns an array of product objects that include id, cin, name, brand, price, original_price, price_per_unit, uom, package_size, rating, and review_count, along with total and total_pages for pagination. get_category_products works identically but accepts a category_id instead of a keyword query.
Category Hierarchy and Product Detail
list_categories returns a flat list of every category in ASDA's taxonomy — top categories, departments, aisles, and shelves — each with an id, name, type, and parent_id for reconstructing the hierarchy. Feed any id from that response into get_category_products to browse that shelf or aisle. get_product_details takes a single product_id and returns enriched fields not present in list results: url, image_url, category (shelf name), and uom. If the ID does not exist, the endpoint returns input_not_found.
Reviews and Promotions
get_product_reviews returns up to 20 of the most recent reviews for a given product, sorted by submission date descending. Each review object includes title, text, rating, date, user, is_recommended, and helpful_votes. The response also carries aggregate stats: total_reviews, average_rating, and rating_distribution as an array of RatingValue/Count pairs. get_rollback_offers lists products currently on Rollback (price reductions), with original_price alongside the current price so the discount is immediately calculable.
The ASDA API is a managed, monitored endpoint for asda.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when asda.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official asda.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Track Rollback price reductions across ASDA's catalog using
get_rollback_offersand comparingpricevsoriginal_price - Build a UK grocery price comparison tool by searching the same keyword across multiple supermarket APIs and aligning on
price_per_unit - Monitor specific product prices over time using
get_product_detailswith a storedproduct_id - Analyse customer sentiment on ASDA own-brand products by aggregating
rating_distributionfromget_product_reviews - Populate a recipe-cost calculator by fetching ingredient prices via
search_productsand extractingprice_per_unitanduom - Reconstruct ASDA's full category tree from
list_categoriesand map product counts per shelf usingget_category_products - Identify top-rated products within a department by sorting
get_category_productsresults byratingandreview_count
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does ASDA have an official public developer API?+
What does `get_product_reviews` return, and how many reviews come back per call?+
title, text, rating, date, user, is_recommended, and helpful_votes. The response also includes aggregate fields: total_reviews, average_rating, and rating_distribution (an array of RatingValue/Count objects covering the 1–5 star breakdown).Does `search_products` support filtering by brand, dietary attribute, or price range?+
query, page, and limit. Brand and dietary filtering are not available as distinct parameters. You can fork this API on Parse and revise it to add filter parameters if your use case requires them.Is product availability or stock status returned by any endpoint?+
search_products and get_category_products endpoints include availability in the product objects alongside pricing. Granular stock levels (e.g. exact unit counts or fulfilment-centre availability) are not exposed. You can fork the API on Parse and revise it to surface additional availability fields if needed.How does pagination work across the listing endpoints?+
search_products, get_category_products, and get_rollback_offers — use 0-indexed pagination. Pass page=0 for the first page. Each response includes total (total matching items) and total_pages so you can iterate through the full result set. The limit parameter accepts values between 1 and 50.