Ocado grocery data: catch-weight, offers & Fresh+
Model Ocado product and pack data with unit prices, catch-weight estimates, substitutions and slot-linked freshness—keeping listed values apart from delivery outcomes.
Ocado.com is operated by Ocado Retail.
This page covers the Ocado.com consumer grocery storefront. Ocado Retail describes its range as Ocado own-label, branded and Marks & Spencer products. Keep the retailer, brands sold through it and related Ocado services as separate entities.
Retailer and service identities
The same corporate name does not make these data scopes interchangeable.
| Entity | What it identifies | Keep distinct from |
|---|---|---|
| Ocado.com | Retail website and app for the grocery listings covered here. | A warehouse technology platform or a supplier record. |
| Ocado Retail Limited | Operator named in the purchase terms; Ocado.com is a trading name. | Ocado Group as a separate corporate technology source. |
| Ocado, M&S and other brands | Retail range or product-brand relationships within the storefront. | The retailer/operator field on a product record. |
| Ocado Zoom | A separately named same-day service with its own terms and limited operating areas. | The main Ocado.com range and delivery context. |
Start with the exact grocery pack.
An online grocery listing is more than a product name. Match the pack and the retail offer before comparing values; detail fields vary by category, and product information can change when packaging is reformulated.
Scroll to compare →
| Field group | Capture from its own source | Why the distinction matters |
|---|---|---|
| Retail identity | Product URL and its visible trailing path key; displayed title, brand and category path. | The numeric retailer page key is not automatically a supplier SKU or a global trade item number. |
| Brand and range | Whether the page identifies an Ocado own-label, M&S or another branded product. | A brand name and the retailer selling the product describe different relationships. |
| Pack and quantity | Raw pack text, count or net quantity, measurement unit and packaging form where shown. | A multipack, an individual unit and the same product in a different size are not like-for-like offers. |
| Retail and supplier identifiers | Keep the page path key, supplier SKU, retail EAN and outer-case barcode in separate fields; leave absent values unassigned. | Ocado's public page reviewed did not show an EAN in its text. Its September 2024 supplier manual separately describes retail SKU and barcode requirements. |
| Category facts | Ingredients, allergen statement, nutrition and serving basis, origin, storage, package type and manufacturer when displayed. | These details are category-dependent and may change; attribute their page or label source and observation date rather than treating them as permanent facts. |
| Retail offer | Displayed price, currency, price-per-unit basis, promotion label and observation time. | Keep an offer separate from product identity and do not turn one captured value into a current-price promise. |
Separate catch-weight estimates from final charges.
For products sold by weight, the purchase terms say the price is based on the applicable unit rate on the date the supplier weighs the item. The site also provides indicative per-unit and typical-weight guides, which should not be confused with a final order amount.
Catch-weight values are different observations
| Value | What Ocado says it represents | Store it as |
|---|---|---|
| Price per kg or other unit | The displayed rate used to price a variable-weight item. | A unit rate with its currency, basis and observation time. |
| Typical weight | An estimate shown to help a shopper plan. | An estimated quantity, not the weight delivered. |
| Typical price | A guide calculated from the item's average weight. | An estimated line value, not a fixed price or final charge. |
| Supplier-weighed quantity | The exact amount of the catch-weight product supplied. | A delivered quantity tied to the fulfilment event and unit. |
| Order amount | The actual order line amount is an order outcome; the terms base catch-weight pricing on the unit price when the supplier weighs the item. | Read it from authorized order evidence rather than calculating from the displayed estimate or inferring it from a public product page. |
Represent substitutions as order events.
A substitute creates a relationship between two product identities and a delivery decision. It is not a product variant, a public listing attribute or proof that the original item was delivered.
Requested, offered and delivered items
| Event part | Source-specific meaning | Record relationship |
|---|---|---|
| Requested item | The product originally placed in the shopper's order. | Preserve its product key and ordered pack. |
| Substitute offer | A replacement Ocado offers when the requested product is unavailable; the price may differ. | Link the offered product key to the requested line and keep its price basis. |
| Acceptance or rejection | Ocado says the customer may reject a substitute; a rejected substitute is not charged. | Store the actual decision and event time, not just a yes/no catalogue flag. |
| Delivered item and charge | The terms say an accepted substitute is charged at its full applicable price at the time of substitution. | Use the order evidence for the amount charged and any offer adjustment; do not infer promotions from catalogue data. |
| Evidence boundary | Substitution choices and receipts belong to an account order, not the public product page. | Only include the order event when supplied through an authorized first-party source. |
Treat Fresh+ as a slot-linked observation.
The Fresh+ Promise is tied to delivery timing. Ocado's current Fresh+ page labels its on-site freshness cue LIFE; preserve the exact display and date rather than turning it into a permanent shelf-life field.
Freshness fields that should not be collapsed
| Field | What the source says | Preserve |
|---|---|---|
| Displayed cue | The current Fresh+ page calls the icon LIFE and gives LIFE 3d+ as an example. | Raw label, displayed value, page URL and observation date. |
| Promised day count | The purchase terms describe the minimum days to the stamped use-by or best-by date from the day after delivery. | The count and its delivery-date baseline; do not treat it as a permanent shelf-life field. |
| Delivery slot | Ocado recommends booking the slot before filling the trolley for more accurate Fresh+ information. | The selected slot or a clear unknown state, without retaining a customer's full address. |
| Package date | If the expiry date on the package differs from the receipt information, the package date prevails under the terms. | The actual package date separately from a website promise or order receipt. |
Follow the right delivery or supplier path.
The delivery context can change what is available and which freshness information is shown. Supplier onboarding and existing supplier product updates have their own routes; neither is described as an open product feed.
Official routes by task
| Task | Ocado route | Data implication |
|---|---|---|
| Check delivery service | The purchase terms say Ocado may restrict delivery areas. | Keep service-area context coarse and dated; do not retain a customer's full address or imply nationwide availability. |
| Compare delivery offers | The terms say delivery charges depend on factors including basket value, date/time and delivery address. | Store a slot/area context with an offer observation; do not hard-code a fee or available slot. |
| Become a supplier | Supply Ocado routes prospective suppliers through an application and buyer review. | Use the supplier onboarding route for supplier discussions rather than interpreting public product pages as a feed. |
| Manage supplier information | Ocado Olive is a login portal for suppliers to communicate about product information and deliveries. | Treat account-held supplier records as a separate, permissioned source. |
| Prepare a supplier product record | The September 2024 supplier manual distinguishes retail units, SKU/EAN and case barcodes and calls for label-change updates. | Keep supplier identifiers separate from retail URL keys; confirm the current manual during onboarding. |
| Get accessibility help | Ocado's accessibility statement says it aims to meet WCAG 2.2 Level AA and links to contact support. | This is Ocado's stated target and support path, not an independent accessibility audit. |
Robots and terms answer different questions.
Ocado's current robots file provides narrow crawl instructions, while its posted terms separately describe reuse of site data. A sitemap reference or allowed URL path is not a product feed or permission to copy content.
What the public crawl surfaces establish
| Surface | Observed rule or destination | What not to infer |
|---|---|---|
| Sitemap references | robots.txt names a sitemap index and a content sitemap. The content sitemap lists help, policy, Fresh+ and accessibility content; the index was not readable in this check. | Do not assume that the index exposes every product URL or that sitemap inclusion grants reuse permission. |
| Product-related paths | The wildcard group blocks /api/ and then allows only the named related-products and similar-products paths. | Those two exceptions do not establish a general product catalogue API. |
| Transactional and filtered paths | Search, basket, account, delivery-slot and many filter/query paths are disallowed for general crawlers. | Do not interpret a page's public rendering or crawler access rule as authorization to collect it. |
| Posted reuse terms | Section 14.5 says site material, data and content may be used for personal order placement; other copying, publication, commercial exploitation, use or derivative works require prior written permission. | This is a summary of Ocado's posted terms, not legal advice or a conclusion about any particular use. |
Attach source and time to every field.
A useful Ocado record model links product, pack, offer, catch-weight, freshness, substitution and delivery-slot fields to their evidence source and observation time. A slot-linked delivery or substitution event is distinct from a permanent product attribute.
OcadoObservation (proposed model)
source: {storefront, operator, source_url, observed_at}
product: {retail_path_key, title, brand, range, category_path}
pack: {raw_pack_text, count, net_quantity, unit, package_type}
identifiers: {supplier_sku_if_authorized, retail_ean_if_present, case_barcode_if_present}
offer: {displayed_price, currency, unit_price, unit_basis, promotion_text, delivery_context}
catch_weight: {price_per_unit, typical_weight, typical_price, delivered_weight, receipt_amount}
freshness: {raw_display_label, day_value, selected_slot_context, package_date}
substitution_event: {requested_item, offered_item, delivered_item, decision, charged_amount}
evidence: {field_source_url, observation_time, source_label_or_document_version}Content reviewed 2026-10-07.