morrisons.com APImorrisons.com ↗
Access Morrisons grocery data via 8 endpoints: search products, browse categories, fetch nutritional details, customer reviews, and live promotions.
curl -X GET 'https://api.parse.bot/scraper/4a18317c-6c6e-41eb-a4aa-70ff891f9db2/search_products?limit=10&query=milk' \ -H 'X-API-Key: $PARSE_API_KEY'
Search for products by keyword. Returns paginated product groups containing decorated product objects with names, prices, images, ratings, and promotions.
| Param | Type | Description |
|---|---|---|
| limit | integer | Maximum number of products to return. |
| queryrequired | string | Search keyword (e.g. 'milk', 'bread') |
{
"type": "object",
"fields": {
"productGroups": "array of product group objects, each containing a decoratedProducts array with product name, price, brand, promotions, ratings, and images"
},
"sample": {
"data": {
"productGroups": [
{
"type": "personalized",
"decoratedProducts": [
{
"name": "Morrisons British Semi Skimmed Milk 4 Pint",
"brand": "Morrisons",
"price": {
"amount": "1.65",
"currency": "GBP"
},
"available": true,
"productId": "721a6e29-4bab-43e1-a241-a34296dd606e",
"promotions": [
{
"type": "OFFER",
"description": "Price Match"
}
],
"retailerProductId": "113240422"
}
]
}
]
},
"status": "success"
}
}About the morrisons.com API
The Morrisons API provides 8 endpoints for querying Morrisons online supermarket data, covering product search, category navigation, detailed product pages, customer reviews, and active promotions. The get_product_detail endpoint returns nutritional fields, storage instructions, breadcrumbs, and promotion objects for a single product, while search_products delivers paginated product groups with prices, brand names, ratings, and promotion flags in a single call.
Product Search and Discovery
The search_products endpoint accepts a query string (e.g. 'milk', 'gluten free bread') and an optional limit integer. It returns productGroups, each containing a decoratedProducts array with fields including product name, price, brand, images, rating summary, and any attached promotions. The get_search_suggestions endpoint complements this by returning autocomplete strings for a partial query, useful for building search-ahead UIs.
Category Browsing
get_category_list returns the full Morrisons category tree as a nested array of objects with name, categoryId, retailerCategoryId, and productCount — no inputs required. To retrieve products within a node, pass the retailerCategoryId to get_products_by_category. That endpoint returns productGroups, a metadata.nextPageToken for pagination, and an additionalPageInfo object containing breadcrumb, available filters, and sortOptions.
Product Detail and Reviews
get_product_detail takes a numeric retailer_product_id and returns two primary objects: bopData (with detailedDescription, brand, return address, and storage/usage fields) and product (name, price, images, ratingSummary, categoryPath, and promotions). It also exposes bopPromotions as a dedicated array, plus relatedProducts and similarProducts ID lists. For review data, get_product_reviews accepts a UUID product_id and returns a reviews array with headline, rating, nickname, createdDate, comment text, and isVerifiedBuyer flag, alongside a ratingHistogram of five integers and a total reviewCount.
Promotions and Similar Products
get_promotions requires no inputs and returns currently active site-wide offers as productGroups with decoratedProducts, plus additionalPageInfo containing category and filter metadata. get_similar_products accepts a retailer_product_id and returns an array of UUID productId strings, which can be fed into get_product_detail to retrieve full data for algorithmically similar items.
- Build a grocery price tracker that monitors Morrisons product prices and promotion changes over time using
search_productsandget_product_detail. - Aggregate nutritional data across product categories by combining
get_products_by_categorywith thebopData.fieldsreturned byget_product_detail. - Populate a promotions feed or deal-alert service using the
productGroupsanddecoratedProductsfromget_promotions. - Drive a recipe ingredient sourcing tool by searching product names, prices, and brand fields via
search_products. - Analyse customer sentiment on grocery products using
get_product_reviewsfields:rating,headline,comments, andisVerifiedBuyer. - Implement category-aware navigation in a comparison app using the nested
childCategoriestree fromget_category_list. - Recommend substitute products by chaining
get_similar_productswithget_product_detailto surface alternatives with full price and nutrition data.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 250 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Morrisons have an official public developer API?+
What does `get_product_detail` return beyond basic name and price?+
get_product_detail returns a bopData object containing detailedDescription, a fields map with brand, return address, and storage/usage instructions, and a breadcrumbs array. The product object includes ratingSummary, categoryPath, images, and a promotions array. A separate bopPromotions array provides detailed promotion objects, and relatedProducts/similarProducts return associated product ID lists.How does pagination work across listing endpoints?+
get_products_by_category and get_promotions both return a metadata.nextPageToken field. Pass this token on subsequent requests to retrieve the next page of results. get_product_reviews uses a metadata.nextPage field for the same purpose. The limit parameter on search_products and get_products_by_category controls page size.Does the API cover Morrisons store locations or click-and-collect availability?+
Can I retrieve a product's full review history in one call?+
get_product_reviews returns a paginated subset of reviews per call alongside a reviewCount total and a ratingHistogram. Full history retrieval requires iterating through pages using the metadata.nextPage value. Review content is limited to the fields returned per review object: headline, rating, nickname, createdDate, comments, and isVerifiedBuyer — review images or retailer responses are not currently included. You can fork the API on Parse and revise it to add those fields if the source exposes them.