Ocado Grocery Intelligence
Turn scoped Ocado grocery listings into structured product, price, promotion and availability datasets for UK retail intelligence.
NenoData helps pricing, category, FMCG and data teams collect and validate fields from agreed public or permissioned sources. Preserve product identity, pack size, displayed unit price, offer conditions and collection context so your team can compare records without losing what the original listing meant.
Source feasibility, available fields, postcode context, refresh cadence and delivery arrangements are confirmed during scoping.

A product price copied into a spreadsheet is only one part of a useful grocery observation. Pack size, unit price, promotion conditions, source URL and collection time determine whether that value can be compared accurately with another listing or an earlier observation.
Ocado's public promotion pages show product prices alongside per-kilogram or per-item figures, previous prices, offer labels and customer-rating information where displayed. The website also asks customers to choose a delivery location. These details need separate fields rather than being compressed into a single product-and-price export.
NenoData's existing Ocado service is designed around scoped sources, field validation and structured delivery. The purpose is to give grocery teams records that retain their source context—not imply that every catalogue field or delivery area is universally accessible.
A project starts with a field dictionary for the approved Ocado pages, categories and product set. The following is a scope-planning matrix, not a guarantee that every field is available for every product.
| Data group | Candidate fields | Collection rule |
|---|---|---|
| Product identity | Product title, brand, source product ID if exposed, URL | Preserve original source values |
| Catalogue | Category path, variant, pack size, quantity | Verify field visibility |
| Pricing | Listed GBP price, displayed unit price, previous price | Keep values separate |
| Promotions | Offer label, quantity threshold, offer conditions | Preserve original wording |
| Availability | Displayed stock or availability label | Record observation time |
| Location | Selected postcode or delivery-area context | Include where scoped and approved |
| Ratings | Aggregate rating and count where visible | Do not assume individual review access |
| Provenance | Source URL, page type, timestamp, validation status | Required in agreed schema |
None pre-confirmed — validate per source
No Ocado fields are marked Confirmed without engineering approval of representative source pages.
For a useful Ocado product dataset, identity and packaging information must remain connected to the price observation.
A proposed record can include the original product name, displayed brand, pack-size text, parsed quantity and unit, product URL, category, variant and source identifier where exposed.
This matters when comparing similarly named items. A 500g pack and a 750g pack may belong to the same product family, but they are not identical records. A reliable matching process should distinguish exact matches, approved attribute-based matches, ambiguous matches and unmatched products.
Brand classification should also preserve the actual source label. Ocado Own Range, M&S Food sold through Ocado and other branded groceries are not interchangeable categories.
Ocado's listings can display pack prices and unit prices such as price per kilogram or per item. Its offer pages also display promotional and previous-price information.
For comparisons, retain the displayed value first, then calculate any normalized value separately.
| Field | Why it matters |
|---|---|
| listed_price_gbp | Observed item or pack price |
| displayed_unit_price | Source's own unit-price text |
| unit_basis | kg, litre, item or other confirmed basis |
| pack_quantity | Quantity used in normalization |
| previous_price_gbp | Reference price only where shown |
| offer_text | Original visible offer |
| offer_type | Validated classification |
| minimum_quantity | Required multibuy quantity, if known |
| eligibility_conditions | Other publicly visible conditions |
| observed_at | Time of the observation |
Do not calculate comparable unit prices where quantity, basis or pack contents cannot be reliably established.
Unit-price normalization: For an illustrative 500g product costing £3.00, the calculated price is £6.00/kg. A 750g product costing £4.20 has a calculated price of £5.60/kg. These are mathematical examples, not Ocado observations. Do not calculate comparable unit prices where quantity, basis or pack contents cannot be reliably established.
A derived £2.50 single-item price must be clearly labelled as conditional on purchasing two qualifying items. Mixed-item offers and eligibility restrictions require additional care.
Multibuy accuracy: An offer such as "2 for £5" is a conditional basket offer. Preserve its quantity threshold and offer wording; do not replace the standard single-pack price with £2.50 unless the derived value is clearly identified as applying only when two qualifying items are purchased. Mixed-item offers and eligibility restrictions require additional care.
A proposed offer record should retain both the ordinary displayed price and the conditions of the promotion, with a calculated effective price only when the calculation is valid.
Ocado Retail operates Ocado.com as part of the M&S/Ocado joint venture. M&S Food became available through Ocado in September 2020, replacing the previous Waitrose own-label sourcing arrangement. Ocado Group's wider technology activities are a separate business and should not be confused with Ocado Retail grocery product data.
Current Ocado grocery listings — scope Ocado.com directly.
Available through Ocado.com since September 2020. Preserve brand attribution.
Current Waitrose data requires separate source coverage. Not part of Ocado.com since 2020.
Ocado Group's technology operations — treat separately from grocery catalogue data.
| Research need | Appropriate source approach |
|---|---|
| Current Ocado grocery listings | Scope Ocado.com |
| M&S Food products sold through Ocado | Scope the relevant Ocado listings and preserve brand attribution |
| Current Waitrose product data | Scope Waitrose as a separate source |
| Historical Ocado/Waitrose comparisons | Use dated, approved historical records |
| Ocado Group technology research | Treat separately from the grocery catalogue |
A current Ocado product dataset should not be described as a combined Ocado–Waitrose catalogue.
Ocado's website asks shoppers to choose a delivery location. A dataset should therefore record the location context used during collection when it affects the requested fields.
A proposed coverage matrix can distinguish the requested postcode, accessible product/category pages, visible availability labels, delivery-related fields and test status.
One tested postcode does not establish complete UK coverage. Delivery slots, service-area signals, account-dependent information and other conditional fields must be reviewed separately. Avoid interpreting a missing product at one observation point as a confirmed nationwide delisting.
| Coverage element | Handling |
|---|---|
| Requested postcode | Record in schema |
| Accessible product/category pages | Test per location |
| Visible availability labels | Conditional on delivery area |
| Delivery-related fields | Separate feasibility review |
| Test status | Document per postcode |
Product and catalogue monitoring
Track agreed products and categories with validated identity fields.
Price observations
Retain displayed pack and unit prices, with GBP and pence handled consistently.
Promotion monitoring
Capture offer labels and conditions rather than assuming every promotion is a simple percentage discount.
Availability observations
Record visible stock labels with source and time context.
Product matching
Compare equivalent products using validated identifiers, brand, variant and pack size.
Repeated collection
Build historical observations at an agreed, feasible cadence rather than claiming access to an existing complete historical archive.
Structured delivery
Prepare records for the approved file, API-ready or downstream destination.
All Ocado-specific collection details remain subject to source feasibility and field validation.
Grocery price benchmarking
Compare observed Ocado prices with appropriately matched products from other approved sources.
FMCG digital-shelf intelligence
Monitor product identity, visible assortment and pricing across agreed categories.
Promotion analysis
Examine multibuy mechanics, previous-price labels and observed offer changes.
Assortment comparison
Review product overlap and differences using consistent category and pack-size definitions.
Catalogue enrichment
Map verified brand, product and packaging attributes into internal datasets.
Repeated price observation
Retain dated records to support trend analysis without representing snapshots as transaction prices or actual sales performance.
The existing Ocado page and NenoData's describe requirements-led collection, cleaning, validation and structured delivery. managed data extraction service describe requirements-led collection, cleaning, validation and structured delivery.
Scope
Agree Ocado URLs or categories, fields, postcode context, sample requirements and cadence.
Extract
Review source feasibility and collect approved fields from the agreed surfaces.
Validate
Check product identity, pack sizes, unit-price logic, promotion conditions and missing values.
Deliver
Supply the agreed schema and destination, with recurring observations where supported.
Sample review should occur before production coverage and refresh commitments are finalised.
NenoData's existing Ocado page describes CSV, Excel, JSON, API integration and cloud or database delivery where scoped. Its separate Web Scraping API service describes managed structured delivery from approved sources.
| Delivery option | Intended use | Confirmation needed |
|---|---|---|
| CSV or Excel | Analyst review and batch comparison | Columns and data definitions |
| JSON | Product and offer records | Schema and field types |
| API-ready output | Application and data-pipeline consumption | Actual delivery mechanism |
| Scheduled files | Repeated observations | Feasible collection cadence |
| Cloud or database delivery | Existing reporting workflows | Supported destination |
NenoData's managed extraction or API-ready delivery is not an official Ocado API or partnership. The existing NenoData page expressly limits source access to approved public or permissioned sources and does not claim official Ocado affiliation or unrestricted API access.
| Area | Editorial boundary |
|---|---|
| Product coverage | Confirm approved categories and URLs |
| Product IDs and category paths | Include only where exposed |
| Unit-price calculations | Require valid quantities and units |
| Multibuy offers | Preserve quantity and eligibility conditions |
| Postcode coverage | Test agreed locations individually |
| Member-only pricing | Verify appropriate access and permission |
| Delivery slots | Do not assume public or universal visibility |
| Stock labels | Do not treat as exact fulfilment inventory |
| Ratings and reviews | Include only approved visible fields |
| Private accounts, orders and payment data | Excluded without appropriate authorisation |
| Historical prices | Build from retained permitted observations |
| Refresh frequency | Confirm source-specific feasibility |
Collection should be reviewed against source access conditions, authorisation, intended use and applicable requirements before rollout.
The current NenoData page already contains a clearly illustrative product schema. Retain the concept, but replace or supplement it with an approved real Ocado sample before using the page to demonstrate operational field coverage.
The following example is synthetic schema illustration only. It is not extracted Ocado data:
{
"source": "ocado.com",
"record_type": "product_price_observation",
"product_id": null,
"product_name": "Illustrative Grocery Product",
"brand": "Example Brand",
"pack_size_original": "500g",
"listed_price_gbp": null,
"displayed_unit_price": null,
"unit_basis": "kg",
"offer_text": null,
"offer_type": "unknown",
"minimum_quantity": null,
"postcode_context": null,
"availability_label": null,
"source_url": null,
"observed_at": null,
"validation_status": "illustrative_only"
}An approved sample should include actual source URLs, timestamps, product and pack-size evidence, visible price fields, promotion conditions where present, location context where applicable and a field-availability note. A synthetic schema is useful for agreeing structure, not proving live collection.
Share the Ocado product URLs or categories, brands, required price and promotion fields, relevant postcodes, intended comparison workflow and preferred delivery format.
NenoData can review source feasibility, agree the field dictionary and prepare a representative sample before confirming coverage, refresh frequency and delivery arrangements.
Explore our grocery delivery app scraping hub or browse all data extraction services.