Morrisons Scraper
Pricing
from $2.50 / 1,000 products
Morrisons Scraper
[💰 $2.5 / 1K] Extract Morrisons grocery products by keyword, category, or product URL — name, brand, price, unit price, size, offers, ratings, images, and availability. Optional customer reviews.
Pricing
from $2.50 / 1,000 products
Rating
0.0
(0)
Developer
SolidCode
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
12 days ago
Last modified
Categories
Share
Pull live grocery data from Morrisons — prices, unit prices, pack sizes, multibuy and "Price Match" offers, star ratings, availability, product images, and customer reviews — by keyword search, category page, or individual product URL. Built for retail and CPG analysts, price-comparison platforms, and FMCG brands who need to track Morrisons shelf prices and promotions at scale without building and maintaining their own data pipeline.
Why This Scraper?
- Three ways to target products — keyword search (e.g. "baked beans"), a Morrisons category page URL, or a list of specific product URLs. Mix all three in one run.
- Up to 300 products per search or category — captures the full Morrisons listing depth for any term or aisle in a single query, ad placements stripped out automatically.
- Normalized unit pricing — every product carries a comparable unit price plus its measure (per kg, per litre, or per item), so you can compare value across pack sizes without manual maths.
- Promotion and "Price Match" capture — detects whether a product is on offer, the offer wording (e.g. "Buy 3 for £10", "Price Match"), and the pre-offer "was" price when published.
- Optional customer reviews — pull individual reviews per product with author, star rating, headline, full review text, and date, newest first.
- Star rating plus review count — the summary overall rating and total number of ratings come on every product, even with reviews turned off.
- Pack size and brand on every row — pack/size description (e.g. "4 x 410g") and brand name for clean catalog building and matching.
- Direct product image and link — a full-resolution product image URL and a canonical Morrisons product URL for every result.
- Availability flag — a true/false in-stock signal so you can filter out delisted or temporarily unavailable lines.
Use Cases
Price Intelligence
- Track Morrisons prices for a basket of products on a recurring schedule
- Compare unit prices (per kg, per litre, per item) across competing pack sizes
- Benchmark Morrisons against other supermarkets in price-comparison tools
- Detect price changes and "was/now" movements over time
Promotion Monitoring
- Spot which products are on offer and capture the exact offer wording
- Monitor "Price Match" lines and multibuy deals as they launch
- Measure promotion frequency and depth by brand or category
- Alert when a tracked product goes on or comes off offer
Product Catalog Building
- Build a structured Morrisons catalog with name, brand, size, and image
- Map products to category paths for taxonomy and assortment analysis
- Keep an enriched product feed fresh for marketplaces and apps
- Match Morrisons SKUs to your own product master by name and pack size
Brand & Review Analysis
- Collect customer reviews to mine sentiment and recurring complaints
- Track star ratings and review volume for your own and rival brands
- Identify highly rated products in a category for merchandising
- Measure review growth on newly launched lines
Competitive Research
- Audit a competitor brand's full range across Morrisons categories
- Track availability to detect range changes and delistings
- Quantify shelf presence by brand within a category
- Feed assortment and pricing data into market dashboards
Getting Started
Simple Keyword Search
The quickest way to start — one search term:
{"searchQueries": ["baked beans"]}
Search Multiple Terms with Reviews
{"searchQueries": ["semi skimmed milk", "sourdough"],"maxResultsPerInput": 100,"includeReviews": true,"maxReviewsPerProduct": 20}
Scrape a Category and Specific Products
{"categoryUrls": ["https://groceries.morrisons.com/categories/fruit-veg/176738"],"productUrls": ["https://groceries.morrisons.com/products/morrisons-bananas-loose/108001234"],"maxResultsPerInput": 0}
Input Reference
What to Scrape
Provide at least one of these three. You can combine all of them in a single run.
| Parameter | Type | Default | Description |
|---|---|---|---|
searchQueries | string[] | ["baked beans"] | Product keywords to search for on Morrisons, such as 'baked beans', 'semi skimmed milk', or 'sourdough'. Each query is scraped separately. Leave empty if you only use category or product URLs. |
categoryUrls | string[] | [] | Morrisons category or browse page URLs (e.g. https://groceries.morrisons.com/categories/...). Every product listed under the category will be collected, up to the result limit. |
productUrls | string[] | [] | Direct Morrisons product page URLs (e.g. https://groceries.morrisons.com/products/...). Use this to scrape a specific list of known products. |
Options
| Parameter | Type | Default | Description |
|---|---|---|---|
maxResultsPerInput | integer | 50 | Maximum number of products to collect for each search query and each category URL. Morrisons returns at most 300 products per search or category, so set 0 to collect all available products up to that limit. Product URLs are always scraped in full regardless of this limit. |
includeReviews | boolean | false | When enabled, collect individual customer reviews for each product (review text, rating, author, date). This visits each product page and increases run time and cost. When off, only the summary rating and rating count are returned. |
maxReviewsPerProduct | integer | 20 | Maximum number of customer reviews to collect per product. Only applies when 'Include Customer Reviews' is enabled. Set to 0 for all available reviews — note that best-selling products can have hundreds of reviews, which makes runs noticeably slower and more expensive. The default of 20 keeps runs fast and predictable. |
Output
Each product is one row. Here's a representative result with reviews enabled:
{"query": "baked beans","sourceUrl": null,"name": "Heinz Beanz In Tomato Sauce","brand": "Heinz","productId": "108001234","price": 1.40,"originalPrice": 1.75,"unitPrice": 0.34,"unitPriceMeasure": "per item","unitSize": "4 x 415g","onOffer": true,"offerDescription": "Price Match","imageUrl": "https://groceries.morrisons.com/productImages/108/108001234_0_640x640.jpg","productUrl": "https://groceries.morrisons.com/products/heinz-beanz-in-tomato-sauce/108001234","categoryPath": ["Food Cupboard", "Tinned & Canned Food", "Baked Beans"],"rating": 4.6,"ratingCount": 512,"available": true,"attributes": ["Vegetarian", "Gluten Free"],"reviews": [{"author": "Sarah M","rating": 5,"title": "Family favourite","text": "Always the best beans, never buy anything else.","date": "2026-05-18"}],"scrapedAt": "2026-06-02T14:30:00Z"}
Core Fields
| Field | Type | Description |
|---|---|---|
name | string | Full product name |
brand | string | Brand name |
productId | string | Morrisons product identifier |
unitSize | string | Pack or size description (e.g. "4 x 415g") |
available | boolean | Whether the product is currently in stock |
attributes | string[] | Product labels such as Vegetarian, Gluten Free, Vegan |
categoryPath | string[] | Category breadcrumb from department to sub-aisle |
imageUrl | string | Full-resolution product image URL |
productUrl | string | Canonical Morrisons product page URL |
scrapedAt | string | ISO timestamp of data extraction |
Pricing & Offers
| Field | Type | Description |
|---|---|---|
price | number | Current price in GBP |
originalPrice | number | Pre-offer "was" price, when published |
unitPrice | number | Comparable unit price in GBP |
unitPriceMeasure | string | Unit basis: "per kg", "per litre", or "per item" |
onOffer | boolean | Whether the product is currently on a promotion |
offerDescription | string | Offer wording (e.g. "Buy 3 for £10", "Price Match") |
Ratings & Provenance
| Field | Type | Description |
|---|---|---|
rating | number | Overall average star rating |
ratingCount | number | Total number of ratings |
query | string | The search keyword that produced this row (null for URL inputs) |
sourceUrl | string | The category or product URL that produced this row (null for keyword searches) |
Reviews
Populated only when includeReviews is enabled. reviews is an array of objects, each with these fields:
| Field | Type | Description |
|---|---|---|
author | string | Reviewer display name |
rating | number | Star rating the reviewer gave (1-5) |
title | string | Review headline |
text | string | Full review text |
date | string | Date the review was posted |
Tips for Best Results
- Start small — set
maxResultsPerInputto 20-50 on your first run to confirm the data matches your needs, then scale up. - Cap reviews on best-sellers — popular Morrisons products can have hundreds of reviews. Keep
maxReviewsPerProductat 20 (the default) for fast, predictable runs; only set it to 0 when you genuinely need every review. - Leave reviews off for pure price tracking — when you only need prices, unit prices, and offers, keep
includeReviewsoff for the fastest, cheapest runs. The summaryratingandratingCountare always included anyway. - Compare on unit price, not shelf price — use
unitPricewithunitPriceMeasureto compare value across different pack sizes instead of the headlineprice. - Use category URLs for whole-aisle audits — paste a category page URL to sweep up an entire aisle (up to 300 products) in one go, rather than guessing keywords.
- Set
maxResultsPerInputto 0 to go deep — when you want the complete listing for a term or category, set it to 0 and the run collects everything Morrisons returns, up to its 300-product ceiling. - Watch
onOfferandoriginalPricetogether — multibuy deals like "Buy 3 for £10" setonOfferandofferDescriptionbut may have no single "was" price, sooriginalPricecan be null on those lines.
Pricing
From $2.50 per 1,000 products + $0.30 per 1,000 reviews. You're charged per product returned, plus per review collected when reviews are enabled — see the Pricing tab. No compute or time-based charges, just a small fixed per-run start fee. When reviews are turned off, you only ever pay the product rate.
Discount tiers apply automatically through Apify's loyalty tiers — Bronze, Silver, and Gold subscribers pay progressively less on both events:
| Per 1,000 | No discount | Bronze | Silver | Gold |
|---|---|---|---|---|
| Products | $3.00 | $2.80 | $2.65 | $2.50 |
| Reviews | $0.36 | $0.34 | $0.32 | $0.30 |
Example total cost (at the Gold rate)
| What you run | Products | Reviews collected | Total |
|---|---|---|---|
| 1,000 products, no reviews | 1,000 | 0 | $2.50 |
| 1,000 products × 20 reviews each | 1,000 | 20,000 | $8.50 |
| 100 best-sellers × 200 reviews each | 100 | 20,000 | $6.25 |
Reviews are returned embedded inside each product row, and you only pay for the reviews actually collected. Cap maxReviewsPerProduct on best-sellers — or leave includeReviews off entirely — to keep both runs and costs predictable.
Integrations
Export data in JSON, CSV, Excel, XML, or RSS. Connect to 1,500+ apps via:
- Zapier / Make / n8n — Workflow automation
- Google Sheets — Direct spreadsheet export
- Slack / Email — Notifications on new results
- Webhooks — Trigger custom APIs on run completion
- Apify API — Full programmatic access
Legal & Ethical Use
This actor is designed for legitimate price intelligence, market research, and product catalog use. You are responsible for complying with applicable laws and Morrisons' Terms of Service. Collect only publicly available product information, do not use the data for spam or any illegal purpose, and handle any personal data in customer reviews responsibly and in line with privacy regulations.