Ocado Categories API
Browse the public Ocado grocery category taxonomy to discover categories for shelf product listings.
ReturnsJSON; every field is in the API referenceCompare Ocado grocery products, prices, unit prices and public offers.
What each one takes and what it returns. Open one for a real response, every input and every field.
Browse the public Ocado grocery category taxonomy to discover categories for shelf product listings.
ReturnsJSON; every field is in the API referenceList products from a Ocado grocery category with published prices and supported listing continuation.
Sendcategory_id
Returnsitemsreturnedtotal_products
Refresh a Ocado product by its ID or official URL with published shelf prices, unit prices and offers.
Sendproduct_idorurl
Returnsproduct
Read public Ocado product reviews and rating summaries with supported filters and review pagination.
Sendproduct_idorurl
Returnsreview_countreviewsrating_averagerating_countrating_histogramreturned
Search public products by ingredient or name, with cursor continuation.
Sendquery
Returnsitemsreturned
Browse products and offers in the public Ocado promotions collection with published price and deal information.
Returnsitemspromotionsreturned
Every endpoint shows its price in credits before it runs. You buy credits once, with no subscription.
Credit packs| Per call | Endpoints |
|---|---|
| 1 credit | CategoriesProduct detailProduct reviews |
| 5 credits | Homepage feed |
| 8 credits | Category productsProducts searchPromotions |
One request shape for every Ocado endpoint: the endpoint ID and its input. No SDK needed.
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": "ocado.product.detail.get", "input": { "product_id": "606356011" }}'
import jsonimport osimport requestspayload = json.loads(r'''{ "capability": "ocado.product.detail.get", "input": { "product_id": "606356011" }}''')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": "ocado.product.detail.get", "input": { "product_id": "606356011" }}),});if (!response.ok) { throw new Error(`Upscrape request failed: ${response.status}`);}console.log(JSON.stringify(await response.json(), null, 2));
{ "product": { "name": "Arla BOB Semi-Skimmed Milk that Tastes like Whole", "available": true, "brand": "Arla", "gtin": null, "image": "https://www.ocado.com/images-v3/eafa5127-d256-497b-9609-4869092accd6/eeab8dca-610d-4f2f-8e42-31e353192a13/300x300.jpg", "pack_size": "2L", "retailer_product_id": "606356011", "url": "https://www.ocado.com/products/arla-bob-semi-skimmed-milk-that-tastes-like-whole/606356011", "price": { "amount": 2.5, "currency": "GBP" }, "unit_price": { "amount": 1.25, "currency": "GBP", "unit": "per_litre" }, "member_prices": [], "promotions": [ { "buy_quantity": 2, "description": "Buy any 2 for £4", "end": "2026-10-06", "id": "706e4ca7-e9da-4100-82b5-75107fa08a98", "start": null, "type": "multibuy", "for_price": { "amount": 4, "currency": "GBP" } } ] }}
https://data.upscrape.com/mcp
With Upscrape, get the Ocado product detail for product id "606356011". Tell me what it costs before you run it, then show the results as a table.
With Upscrape, get the Ocado product reviews for product id "606356011". Tell me what it costs before you run it, then show the results as a table.
The short answers. The docs have the long ones.
Categories, category products, homepage feed, product detail, product reviews, products search and promotions. Each is its own endpoint with a published input schema, and the response is JSON.
Ocado endpoints cost from 1 credit per successful call, each priced before it runs. You buy credits once, with no subscription, and paid credits never expire. New accounts get free credits to try it.
No. Upscrape reads the pages Ocado shows to any visitor, so you send the input the endpoint asks for and get the data back. Nothing runs on your account, and you share no password or cookie.
Yes. Connect any MCP client to the Upscrape MCP server with OAuth or an API key. The agent finds the Ocado endpoint, checks its price and runs it with the same credits as the REST API.
Upscrape reads public pages only and needs no login. How you use the data is yours to decide under the laws that apply to you; we sign a data processing agreement for your legal review.
We fix the endpoint. Your request and the response fields stay the same.
Up to 100 free credits to start, no card needed.