Morrisons Scraper — Full UK Grocery Catalog & Prices
Pricing
Pay per usage
Morrisons Scraper — Full UK Grocery Catalog & Prices
Scrape the complete Morrisons UK groceries catalog: product names, brands, GBP prices, price per unit, categories, images, ratings, promotions and availability. Optional nutrition, ingredients and allergens. No login or cookies required.
Pricing
Pay per usage
Rating
0.0
(0)
Developer
Studio Amba
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Morrisons Scraper
Scrape the complete Morrisons UK groceries catalog — every product, with prices, categories, images, ratings and availability. No login, no cookies, no account required.
Morrisons (groceries.morrisons.com) runs on the Ocado Smart Platform. This actor talks directly to the site's public product API, so it returns clean structured data fast and reliably — not brittle HTML scraping.
Why use this actor?
Grocery buyers, price-comparison sites, market researchers and brand teams need a full, current view of what a major UK supermarket sells and at what price. This actor pulls the entire Morrisons catalog (around 30,000 products) in a single run, deduplicated across every department, so you get one clean product feed instead of a partial sample.
- Complete catalog, provably. The actor walks every department and cross-checks its unique product count against the Morrisons product sitemap, so you can verify coverage rather than trust it.
- No cookies, no login. The data comes from the site's open API. Nothing to authenticate, no session to keep alive.
- GBP prices and price-per-unit. Every product carries its current sell price and a normalised unit price (per each, per kg, per litre, etc.).
How to scrape Morrisons data
- Add the actor to your Apify account.
- Leave every field on its default to pull a quick 100-product sample, or set
Max products to
0to scrape the complete catalog (~30,000 products). - Optionally set a Category filter to scope the run to one department (for
example
Fruit & VegorBeer, Wines & Spirits), or set a Search query (for exampleheinz baked beans) to search the catalog by keyword instead of browsing categories. Search query takes priority over the category filter. - Optionally tick Fetch nutrition, ingredients & allergens for deeper per-product detail (slower — one extra request per product).
- Run the actor. Results stream into the dataset and can be exported as JSON, CSV, Excel or fed to an API.
The Morrisons API is open and needs no proxy, but a UK residential proxy is prefilled and recommended for large runs.
Input
| Field | Type | Required | Description |
|---|---|---|---|
maxProducts | Integer | No | Max products to return. 0 = the complete catalog (~30,000). Default 100. |
category | String | No | Limit to one department or sub-category (e.g. Fruit & Veg) or a Morrisons categoryId. Empty = all departments. Ignored when searchQuery is set. |
searchQuery | String | No | Search the catalog for a keyword (e.g. heinz baked beans) instead of browsing categories. Overrides category when set. |
enrichDetails | Boolean | No | Fetch nutrition, ingredients, allergens and country of origin per product. Default false. |
proxyConfiguration | Object | No | Proxy settings. GB residential prefilled. Optional for small runs. |
Get the complete catalog
{"maxProducts": 0,"enrichDetails": false,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"],"apifyProxyCountry": "GB"}}
Search by keyword
{"searchQuery": "heinz baked beans","maxProducts": 50}
Output
Each result contains:
| Field | Type | Example |
|---|---|---|
name | String | "Morrisons British Strawberries 350g" |
brand | String | "Morrisons" |
price | Number | 2.49 |
currency | String | "GBP" |
pricePerUnit | String | "£7.11/kg" |
productId | String | "108413093" |
url | String | Full product page URL |
availability | String | "in stock" |
inStock | Boolean | true |
category | String | "Cucumber" |
categories | Array | ["Fruit & Veg", "Salads", "Cucumber"] |
imageUrl | String | Primary product image URL |
imageUrls | Array | All product image URLs |
packSize | String | "350g" |
alcohol | Boolean | false |
isNew | Boolean | false |
promotion | String | "Price Match" |
rating | Number | 3.6 |
reviewCount | Number | 25 |
productDescription | String | Only when enrichment is enabled |
ingredients | String | Only when enrichment is enabled |
nutrition | String | Only when enrichment is enabled |
allergens | String | Only when enrichment is enabled |
countryOfOrigin | String | Only when enrichment is enabled |
scrapedAt | String | ISO 8601 timestamp |
Example output
{"name": "Morrisons Whole Cucumber","brand": "Morrisons","price": 0.99,"currency": "GBP","pricePerUnit": "£0.99/each","productId": "108413093","url": "https://groceries.morrisons.com/products/morrisons-whole-cucumber/108413093","availability": "in stock","inStock": true,"category": "Cucumber","categories": ["Fruit & Veg", "Salads", "Cucumber"],"imageUrl": "https://groceries.morrisons.com/images-v3/.../300x300.jpg","imageUrls": ["https://groceries.morrisons.com/images-v3/.../500x500.jpg"],"packSize": null,"alcohol": false,"isNew": false,"promotion": "Price Match","rating": 3.6,"reviewCount": 25,"scrapedAt": "2026-07-03T12:00:00.000Z"}
Cost estimate
A full catalog run (around 30,000 products) needs roughly 200 listing requests and finishes in a couple of minutes of compute — the API returns 200 fully populated products per request. Enabling nutrition/ingredients enrichment adds one request per product, so a full enriched run is much heavier. For price and catalog data, leave enrichment off.
Completeness
The actor deduplicates products by their Morrisons product ID across every
department, then compares the unique count to the Morrisons product sitemap and
writes a COMPLETENESS_REPORT to the run's key-value store. That gives you a
verifiable coverage figure for the run instead of an unprovable claim.
Limitations
- No EAN / GTIN barcodes. Morrisons does not expose barcodes anywhere in its
data — only its own numeric
productId. If you need barcodes, this site can't supply them. - Prices are the online groceries prices. Morrisons runs a single national online price, but in-store prices can differ.
- Promotions are captured as a description (e.g. "Price Match", "Buy 3 for £5") rather than an explicit was-price.
- Data is scraped from the public website and may change without notice.
- Respect the website's terms of service and use responsibly.
Need this data on a schedule, or a custom version?
We run this scraper as a managed service for businesses: scheduled runs, deduplication, delta detection, and delivery to your inbox, Google Sheets, or API — maintenance included. We can also build a custom version with your exact fields and filters, or combine multiple sources into one feed.
See studioamba.dev/services or email hello@studioamba.dev for a free data sample. We maintain 300+ European web scrapers and answer within one business day.