Independent source guide

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.

Retailer and service identities
EntityWhat it identifiesKeep distinct from
Ocado.comRetail website and app for the grocery listings covered here.A warehouse technology platform or a supplier record.
Ocado Retail LimitedOperator named in the purchase terms; Ocado.com is a trading name.Ocado Group as a separate corporate technology source.
Ocado, M&S and other brandsRetail range or product-brand relationships within the storefront.The retailer/operator field on a product record.
Ocado ZoomA 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 →

Start with the exact grocery pack.
Field groupCapture from its own sourceWhy the distinction matters
Retail identityProduct 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 rangeWhether 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 quantityRaw 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 identifiersKeep 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 factsIngredients, 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 offerDisplayed 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

Catch-weight values are different observations
ValueWhat Ocado says it representsStore it as
Price per kg or other unitThe displayed rate used to price a variable-weight item.A unit rate with its currency, basis and observation time.
Typical weightAn estimate shown to help a shopper plan.An estimated quantity, not the weight delivered.
Typical priceA guide calculated from the item's average weight.An estimated line value, not a fixed price or final charge.
Supplier-weighed quantityThe exact amount of the catch-weight product supplied.A delivered quantity tied to the fulfilment event and unit.
Order amountThe 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

Requested, offered and delivered items
Event partSource-specific meaningRecord relationship
Requested itemThe product originally placed in the shopper's order.Preserve its product key and ordered pack.
Substitute offerA 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 rejectionOcado 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 chargeThe 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 boundarySubstitution 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

Freshness fields that should not be collapsed
FieldWhat the source saysPreserve
Displayed cueThe 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 countThe 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 slotOcado 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 dateIf 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

Official routes by task
TaskOcado routeData implication
Check delivery serviceThe 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 offersThe 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 supplierSupply 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 informationOcado 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 recordThe 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 helpOcado'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

What the public crawl surfaces establish
SurfaceObserved rule or destinationWhat not to infer
Sitemap referencesrobots.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 pathsThe 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 pathsSearch, 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 termsSection 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.

Example
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.