Discover/Ocado API
live

Ocado APIocado.com ↗

Access Ocado UK's grocery catalog via 6 endpoints: search products, fetch nutrition tables, get autocomplete suggestions, and retrieve cart data.

Endpoint health
verified 15h ago
get_cart
get_related_products
search_products
search_products_with_nutrition
get_search_suggestions
6/6 passing latest checkself-healing
Endpoints
6
Updated
22d ago

What is the Ocado API?

The Ocado API gives developers structured access to Ocado UK's grocery catalog across 6 endpoints, covering product search, full product detail, nutrition tables, autocomplete suggestions, related products, and cart state. The search_products endpoint returns current prices, promotions, availability, images, and category facets for up to 300 items per call. The get_product_details endpoint adds allergen information, storage instructions, ingredient lists, customer ratings, and per-product nutrition data.

This call costs2 credits / call— charged only on success
Try it
Search term (e.g. 'milk', 'bread', 'chicken breast')
Optional category filter: a category_id from search_products.categories[*].category_id (UUID string) or a category name exactly as it appears in search_products.categories[*].name, e.g. 'Fresh & Chilled Food' (one shape; any level of the tree such as 'Vegetables' or 'Aubergines' is accepted). Omit for an unfiltered search.
Maximum number of results to return (1-300)
→ api.parse.bot/scraper/44d2a146-f43b-415b-8494-308caaef06cf/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/44d2a146-f43b-415b-8494-308caaef06cf/search_products?query=milk&max_results=5' \
  -H 'X-API-Key: $PARSE_API_KEY'
All endpoints · 6 totalmissing one? ·

Full-text search over Ocado's grocery catalog, optionally narrowed to one category. Returns decorated product listings with current prices, promotions, availability, and images, grouped by type (featured, cluster). Items with group_type 'featured' are sponsored placements the site shows regardless of the category filter; callers who want strictly in-category results can drop them. Every response also carries `categories`: the site's category facet tree for the current result set, flattened to {category_id, name, path, product_count}. When no category filter is given this is the full tree for the query; when a category is applied it lists only that category's sub-categories (empty for a leaf category). The category filter accepts either a category_id from `categories` (one round trip) or a category name, which is matched case-insensitively against the facet names for this query (two round trips: one to resolve the name, one to search). A name not present in the facet tree for the query returns an empty product list together with the categories that are available; an id the site rejects returns a stale_input error. Pagination is not exposed — use max_results to control volume (up to 300).

Input
ParamTypeDescription
queryrequiredstringSearch term (e.g. 'milk', 'bread', 'chicken breast')
categorystringOptional category filter: a category_id from search_products.categories[*].category_id (UUID string) or a category name exactly as it appears in search_products.categories[*].name, e.g. 'Fresh & Chilled Food' (one shape; any level of the tree such as 'Vegetables' or 'Aubergines' is accepted). Omit for an unfiltered search.
max_resultsintegerMaximum number of results to return (1-300)
Response
{
  "type": "object",
  "fields": {
    "query": "string - the search term used",
    "category": "string - the matched category name when the filter was given as a name; null when filtered by id or unfiltered",
    "products": "array of product summary objects with product_id, retailer_product_id, name, brand, type, pack_size, price, unit_price, available, image_url, promotions, group_type, quantity_in_basket",
    "categories": "array of category facet objects {category_id (UUID usable as the category input), name, path (array of ancestor names ending with this category), product_count} for the current result set",
    "category_id": "string - the category UUID actually applied to the search, or null when unfiltered",
    "total_products": "integer - number of products returned"
  },
  "sample": {
    "data": {
      "query": "aubergine",
      "category": "Fresh & Chilled Food",
      "products": [
        {
          "name": "M&S Aubergine ",
          "type": "REGULAR",
          "brand": "M&S",
          "price": {
            "amount": "0.95",
            "currency": "GBP"
          },
          "available": true,
          "image_url": "https://www.ocado.com/images-v3/eafa5127-d256-497b-9609-4869092accd6/d780163e-6317-4c4f-9724-2843888559e7/300x300.jpg",
          "pack_size": null,
          "group_type": "cluster",
          "product_id": "9f05d197-1e62-4930-bb06-8b5e9774677d",
          "promotions": null,
          "unit_price": {
            "unit": "fop.price.per.each",
            "amount": "95.0"
          },
          "quantity_in_basket": 0,
          "retailer_product_id": "518543011"
        },
        {
          "name": "White Rabbit Gluten Free Aubergine Parmigiana Fresh Girasoli Pasta",
          "type": "REGULAR",
          "brand": "White Rabbit Pizza Co",
          "price": {
            "amount": "3.75",
            "currency": "GBP"
          },
          "available": true,
          "image_url": "https://www.ocado.com/images-v3/eafa5127-d256-497b-9609-4869092accd6/e210f549-77b8-42be-8367-659db8f9e98b/300x300.jpg",
          "pack_size": "250g",
          "group_type": "cluster",
          "product_id": "780c620c-beae-4513-9c87-396191ffcc46",
          "promotions": null,
          "unit_price": {
            "unit": "fop.price.per.kg",
            "amount": "15.00"
          },
          "quantity_in_basket": 0,
          "retailer_product_id": "670742011"
        }
      ],
      "categories": [
        {
          "name": "Vegetables",
          "path": [
            "Vegetables"
          ],
          "category_id": "93ca7a3f-f9a5-44dc-8b8a-6ddded9ca57b",
          "product_count": 7
        },
        {
          "name": "Courgettes & Aubergines",
          "path": [
            "Vegetables",
            "Courgettes & Aubergines"
          ],
          "category_id": "5dd99735-705d-4039-a503-76cd54a92160",
          "product_count": 7
        },
        {
          "name": "Pasta, Sauces & Stock",
          "path": [
            "Pasta, Sauces & Stock"
          ],
          "category_id": "9a3eb120-9104-4092-883c-d416c51c642b",
          "product_count": 1
        }
      ],
      "category_id": "01f3d930-813f-4038-983b-51bfcc7cb44e",
      "total_products": 15
    },
    "status": "success"
  }
}

About the Ocado API

Search and Browse the Catalog

The search_products endpoint accepts a free-text query and an optional category filter — either a UUID from categories[*].category_id in previous results or a plain category name. Responses include a products array of summary objects (name, brand, pack size, price, unit price, availability, images, promotions) and a categories array of facet objects you can pass back as filters. The group_type field distinguishes sponsored placements (featured) from organic results (cluster). Results are capped by the max_results parameter (1–300).

Product Detail and Nutrition

get_product_details takes a retailer_product_id (numeric string from search results) and returns the full product record: description, ingredients, allergens, storage instructions, an images array, a rating object (overall score and review count), and a nutrition array of {name, value} pairs. For applications that need nutrition data across many items at once, search_products_with_nutrition runs a catalog search and normalises each product's nutrition table to per 100 g or per 100 ml, reporting products_with_nutrition, products_without_nutrition_data, and products_lookup_failed counts so you know the coverage quality of the result set. Because this endpoint issues one detail lookup per product, the max_results parameter is capped at 50.

Suggestions, Related Products, and Cart

get_search_suggestions returns autocomplete strings for a given prefix; passing an empty query returns currently popular search terms. get_related_products accepts a retailer_product_id and returns two UUID arrays — related_product_ids for complementary items and similar_product_ids for alternatives — which you then resolve individually with get_product_details. get_cart exposes the current session's anonymous trolley: items, item_count, totals (retail price, post-promotion price, savings), and a checkout_info object that indicates whether the cart meets the minimum order threshold.

Reliability & maintenanceVerified

The Ocado API is a managed, monitored endpoint for ocado.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when ocado.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 ocado.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.

Last verified
15h ago
Latest check
6/6 endpoints passing
Maintenance
Monitored & self-healing
Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Build a grocery price tracker that monitors price and unit_price fields across product categories over time.
  • Create a nutrition comparison tool using search_products_with_nutrition to rank products by per-100g calorie or macro values.
  • Power a type-ahead search widget with get_search_suggestions, falling back to trending terms when the input is empty.
  • Generate 'customers also buy' recommendation widgets using related_product_ids from get_related_products.
  • Audit promotional coverage across a category by scanning the promotions field in search_products results.
  • Build an allergen filter for shoppers by extracting the allergens field from get_product_details across a search result set.
  • Validate cart eligibility before checkout by reading checkout_info.above_threshold and checkout_info.minimum_threshold from get_cart.
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo2005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min
Team$300/mo20,000300 req/min
Company$1,000/mo100,000500 req/min

Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.

Frequently asked questions
Does Ocado offer an official developer API?+
Ocado does not publish a public developer API for its retail grocery catalog. The product data, pricing, and nutrition information accessible here are not available through an officially documented third-party API endpoint from Ocado.
How does `search_products` handle sponsored vs organic results?+
Each product object in the products array includes a group_type field. Items with group_type equal to featured are sponsored placements; items with group_type equal to cluster are organic results. You can filter client-side on this field to separate the two.
Does the API cover Ocado's full product range, including items only visible when logged in?+
The API covers the publicly visible catalog — product listings, prices, promotions, nutrition, and availability. Items or personalised offers that require an active Ocado account and login are not exposed. You can fork this API on Parse and revise it to add an authenticated session endpoint if that data is needed.
Does `search_products_with_nutrition` guarantee a nutrition table for every result?+
No. The response includes three counters that describe coverage: products_with_nutrition (normalised successfully), products_without_nutrition_data (the source lists no nutrition table for that item), and products_lookup_failed (detail fetch failed). Expect partial coverage, especially for fresh produce and some own-label items.
Can I retrieve order history or saved lists through this API?+
Not currently. The API covers anonymous cart state via get_cart, product search, and product detail. Order history, saved shopping lists, and account-level data are not included. You can fork this API on Parse and revise it to add those endpoints if your use case requires them.
Page content last updated . Spec covers 6 endpoints from ocado.com.
Related APIs in Food DiningSee all →
tesco.com API
Search and browse Tesco's complete grocery catalog to find products with detailed nutritional information, ingredient lists, and customer reviews. Explore product suggestions via autocomplete and browse items organized by category to make informed shopping decisions.
aldi.co.uk API
Search and browse Aldi UK's product catalog with detailed information about items, categories, and real-time suggestions to help you find exactly what you're looking for. Get instant access to product details, pricing, and category navigation across Aldi's full range of groceries and goods.
waitrose.com API
Search Waitrose & Partners' online grocery catalog to find products with detailed information including pricing, current promotions, and availability. Get autocomplete suggestions for faster browsing and access complete product details to compare items and find the best deals.
sainsburys.co.uk API
Access Sainsbury's grocery catalogue: search products by keyword, browse the full category hierarchy, retrieve detailed product information, and discover trending searches.
carrefour.eu API
Search and browse Carrefour's European online product catalog to access pricing, promotions, availability, and detailed product information including nutritional data. Retrieve comprehensive product details across categories to compare prices and find current deals in real-time.
wholefoodsmarket.com API
Search for grocery products, browse weekly sales, and find store locations at Whole Foods Market. Returns pricing, availability, ingredients, and nutritional information.
pnp.co.za API
Search for groceries, browse products by category, and discover current specials at Pick n Pay stores, while accessing detailed product information, store locations, and fresh produce availability all in one place.
carrefour.be API
Search and browse Carrefour Belgium's grocery catalog to find products with detailed nutritional information, ingredients, and pricing. Explore product categories and discover items that match your shopping needs.