Morrisons Scraper — UK grocery prices GBP avatar

Morrisons Scraper — UK grocery prices GBP

Pricing

from $0.21 / 1,000 products

Go to Apify Store
Morrisons Scraper — UK grocery prices GBP

Morrisons Scraper — UK grocery prices GBP

Morrisons Scraper for UK grocery prices in GBP on groceries.morrisons.com: pack size, unit price, brand, offers, image and URL. Morrisons prices by keyword on the public store JSON. Residential GB proxy recommended. No login. PPE per product.

Pricing

from $0.21 / 1,000 products

Rating

0.0

(0)

Developer

Noah Adler

Noah Adler

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

13 days ago

Last modified

Share

Morrisons scraper for UK grocery prices on groceries.morrisons.com: title, GBP price, pack size, unit price, brand, offer text, image and product URL — one clean Dataset row per product.

HTTP-only (curl_cffi + Chrome TLS). Calls the public storefront product-pages search JSON used by the Morrisons groceries SPA (Ocado Smart Platform). No Playwright. No login.

Proxy: Default Apify RESIDENTIAL with country GB. Datacenter IPs sometimes get 403 — soft-fail error row (honest), not fake empty success.

Keywords: morrisons scraper · morrisons prices · UK grocery scraper · morrisons products · supermarket prices UK


What this Actor does

StepAction
1Accept query (or extract q= from a Morrisons search URL) + maxItems
2GET storefront search JSON for that keyword
3Read decoratedProducts (name, price, pack, unit price, offers, image)
4Normalize GBP amounts → Dataset
5Paginate with nextPageToken until maxItems

Input

FieldRequiredDescription
queryYes*Keyword (e.g. milk, baked beans)
searchUrlNoFull …/search?q=… URL (extracts keyword only)
maxItemsNo1–200 (default 40)
proxyConfigurationNoDefault RESIDENTIAL; Actor injects GB if country empty

*Or a searchUrl that includes q=.

Example

{
"query": "milk",
"maxItems": 25,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"],
"apifyProxyCountry": "GB"
}
}

Output example

{
"productId": "721a6e29-4bab-43e1-a241-a34296dd606e",
"retailerProductId": "113240422",
"title": "Morrisons British Semi Skimmed Milk 4 Pint",
"brand": "Morrisons",
"price": 1.65,
"currency": "GBP",
"packSize": "2.272L",
"unitPrice": 72.6,
"unitPriceCurrency": "GBX",
"unitName": "PER_LITRE",
"offerText": "Unbeatable Price",
"rating": 3.2,
"reviewCount": 22,
"imageUrl": "https://groceries.morrisons.com/images-v3/…/300x",
"detailUrl": "https://groceries.morrisons.com/products/morrisons-british-semi-skimmed-milk-4-pint/113240422",
"query": "milk",
"scrapedAt": "2026-10-02T16:00:00Z",
"error": false,
"errorMessage": null
}

unitPrice may be in pence (GBX) when Morrisons returns that currency for per-litre / per-kg lines — check unitPriceCurrency.


Limits

  • Search results only (no nutrition / ingredients enrichment in v0.1).
  • Ratings appear when Morrisons returns a review count; not every SKU has them.
  • Source site: groceries.morrisons.com Terms & Conditions of Sale (consumer grocery). Not my.morrisons.com account ToU.
  • UK database rights still apply; use for your own analysis / comparison workflows.
  • robots.txt disallows /api/ for some bots — this Actor uses the same storefront JSON path the website loads in-browser.

Pricing

Pay-per-event: small start fee + one charge per product row written to the Dataset.