Ocado Scraper — UK Groceries Products & Prices avatar

Ocado Scraper — UK Groceries Products & Prices

Pricing

from $2.00 / 1,000 result scrapeds

Go to Apify Store
Ocado Scraper — UK Groceries Products & Prices

Ocado Scraper — UK Groceries Products & Prices

Scrape products, prices, price per unit, offers and stock status from ocado.com, the UK's largest online-only supermarket. Search by keyword or browse a category. No login or cookies required.

Pricing

from $2.00 / 1,000 result scrapeds

Rating

0.0

(0)

Developer

Studio Amba

Studio Amba

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Scrape the product catalog of Ocado, the UK's largest online-only supermarket. Get product names, prices, price per unit, offers, ratings, images and stock status as clean structured JSON. No login, no cookies, no browser automation.

Search by keyword or browse a category. Built for price monitoring, promotion tracking, assortment analysis and market research across the UK grocery sector.

What it does

This actor reads Ocado's own product API directly (the same JSON backend the ocado.com website calls), so you get accurate live prices and offers without rendering pages in a browser. It's fast, stable and cheap to run.

  • Keyword search — pass a term (milk, chicken, pasta) and get matching products.
  • Category browse — pass a full Ocado category URL to pull a specific department or shelf.
  • Offers — current promotion text (e.g. "Everyday Savers") is captured alongside the regular price.
  • Price per unit — Ocado's per-litre/per-kg unit price, converted to a readable £X.XX/unit string.
  • Ratings — average star rating and review count, where Ocado shows them.

Input

FieldTypeRequiredDescription
searchQueryStringNoSearch Ocado by keyword (e.g. milk). Default: milk.
categoryUrlStringNoA full Ocado category URL (copy from the address bar after clicking a category on ocado.com). When set, searchQuery is ignored.
maxProductsIntegerNoMaximum number of products to return. Default: 20.
proxyConfigurationObjectYes (prefilled)Apify Proxy settings. Must be Residential + GB — see Limitations.

Output

Each product is one record:

{
"name": "Ocado British Whole Milk 4 Pints",
"brand": "Ocado",
"price": 1.65,
"currency": "GBP",
"pricePerUnit": "£0.73/litre",
"discount": "Everyday Savers",
"packSize": "2.272L",
"productId": "78920011",
"sku": "7af52d5a-b86e-47a5-9047-aa1d222b365f",
"inStock": true,
"rating": 3.9,
"reviewCount": 180,
"imageUrl": "https://www.ocado.com/images-v3/.../300x300.jpg",
"category": "Fresh & Chilled Food > Dairy & Eggs > Milk > Fresh Milk > Whole",
"url": "https://www.ocado.com/products/ocado-british-whole-milk-4-pints/78920011",
"scrapedAt": "2026-07-14T19:37:31.515Z"
}

Fields

FieldDescription
nameProduct name
brandBrand name
priceCurrent shelf price in GBP
currencyAlways GBP
pricePerUnitPrice per unit (e.g. £0.73/litre)
originalPriceStrike-through price when discounted (rarely populated by Ocado)
discountPromotion text, e.g. Everyday Savers
packSizePack size description, e.g. 2.272L, 400g
eanBarcode/GTIN. Always empty — see Limitations.
productIdOcado's retailer product ID (also the trailing segment of the product URL)
skuOcado's internal product UUID
inStockWhether the product is available for sale
ratingAverage review rating (0–5)
reviewCountNumber of reviews
imageUrlPrimary product image URL
categoryFull category breadcrumb path
urlLink to the product page
scrapedAtISO timestamp of the scrape

How to scrape Ocado data

  1. Open the actor and set your Search Query (for example milk) — or leave it empty and paste a Category URL to browse a department instead.
  2. Set Max Products to the number of products you want.
  3. Keep the default Proxy Configuration (Residential, GB) — this is required, not optional (see Limitations).
  4. Click Start. When the run finishes, download the dataset as JSON, CSV or Excel, or pull it from the API.

Input example

{
"searchQuery": "chicken",
"maxProducts": 100,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "GB"
}
}

Browsing a category

{
"categoryUrl": "https://www.ocado.com/categories/fresh-chilled-food/dairy-eggs/milk/fresh-milk/whole/56428ac7-7c31-4ec5-b8f8-f2a2fed6246d",
"maxProducts": 50
}

Common use cases

  • Price monitoring — track Ocado prices over time and compare against Tesco, Sainsbury's, Asda, Morrisons, Waitrose and Aldi.
  • Promotion tracking — capture current offers and promotion mechanics.
  • Assortment analysis — see which products and brands a category carries.
  • Market research — build a dataset of UK grocery prices for analysis.

Tips

  • One search request returns up to 300 products (Ocado's own server-side limit — verified live, requests above that are rejected). Larger maxProducts values page through the API automatically.
  • Category browsing pulls Ocado's sitewide merchandising feed and filters it down to your category client-side, so it scans more pages than a plain search for the same yield — use search where you can.
  • Prices change frequently; run on a schedule to keep your data fresh.

Cost estimate

This actor makes roughly one HTTP request per 300 products (search mode) via Apify's Residential proxy, so the compute cost per result is low — comparable to other JSON-API-based grocery scrapers in this catalog (Albert Heijn, Sainsbury's). Category-mode runs cost more per result because of the client-side filtering pass described above.

Limitations

  • No EAN/barcode. Ocado does not expose GTIN/EAN anywhere accessible: not in the listing API, not in the product page's structured data (schema.org JSON-LD), and not in the product page's full internal state (description, nutrition table, storage info). This was verified directly against live responses, not assumed. The ean field is kept in the output for schema parity with sibling grocery scrapers but is always empty.
  • Residential GB proxy is required, not optional. Ocado's product API sits behind AWS WAF and geo-gates non-UK IPs (confirmed live: a non-UK IP gets an HTTP 202 bot challenge on the same endpoint that returns a clean 200 through a UK residential IP). Datacenter and non-GB proxies will fail or get throttled.
  • Category browsing is best-effort. Ocado's category endpoint returns a general merchandising feed (featured + on-offer items across the whole site), not a strict filtered grid, so this actor filters client-side by matching each product's own category breadcrumb. This is accurate but scans more raw product rows than a plain keyword search for the same number of matches.
  • Data is scraped from the public website and may change without notice.
  • Respect Ocado's terms of service and use responsibly.

FAQ

Does this need an Ocado account or delivery postcode? No. The actor only reads public catalog data. No account, password, cookies, or delivery address is required.

Can I get the barcode (EAN)? No — Ocado does not publish it anywhere on the site or its API, for any product. This is a site limitation, not a missing feature.

Why do I need a Residential + GB proxy specifically? Ocado's product API blocks or challenges non-UK traffic. A UK residential IP is the only proxy type confirmed to get clean, un-challenged responses.

Is this legal? The actor collects publicly available product information. You are responsible for using the data in line with Ocado's terms and applicable law.

Disclaimer

This actor is an independent tool and is not affiliated with, endorsed by, or connected to Ocado Group plc or Ocado Retail Ltd. All product data belongs to its respective owners.