Ocado Scraper — UK Groceries Products & Prices
Pricing
from $2.00 / 1,000 result scrapeds
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
Maintained by CommunityActor 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/unitstring. - Ratings — average star rating and review count, where Ocado shows them.
Input
| Field | Type | Required | Description |
|---|---|---|---|
searchQuery | String | No | Search Ocado by keyword (e.g. milk). Default: milk. |
categoryUrl | String | No | A full Ocado category URL (copy from the address bar after clicking a category on ocado.com). When set, searchQuery is ignored. |
maxProducts | Integer | No | Maximum number of products to return. Default: 20. |
proxyConfiguration | Object | Yes (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
| Field | Description |
|---|---|
name | Product name |
brand | Brand name |
price | Current shelf price in GBP |
currency | Always GBP |
pricePerUnit | Price per unit (e.g. £0.73/litre) |
originalPrice | Strike-through price when discounted (rarely populated by Ocado) |
discount | Promotion text, e.g. Everyday Savers |
packSize | Pack size description, e.g. 2.272L, 400g |
ean | Barcode/GTIN. Always empty — see Limitations. |
productId | Ocado's retailer product ID (also the trailing segment of the product URL) |
sku | Ocado's internal product UUID |
inStock | Whether the product is available for sale |
rating | Average review rating (0–5) |
reviewCount | Number of reviews |
imageUrl | Primary product image URL |
category | Full category breadcrumb path |
url | Link to the product page |
scrapedAt | ISO timestamp of the scrape |
How to scrape Ocado data
- 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. - Set Max Products to the number of products you want.
- Keep the default Proxy Configuration (Residential, GB) — this is required, not optional (see Limitations).
- 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
maxProductsvalues 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
eanfield 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.