Morrisons Products Search API
Search Morrisons Groceries by keyword.
Sendquery
Returnsnamebrandpriceratingavailableretailer_product_id
Get Morrisons grocery prices, unit prices, offers, ratings, categories and store details as clean JSON. Search by keyword, read one product or an offer, or list stores.
| # | Name | Brand | Price | Unit price | Rating | Ratings | Available | Product ID | Product id | Url |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Morrisons Whole British Milk 4 Pints | Morrisons | 1.65 | 72.6 | 3.4 | 41 | true | 103103141 | 3ec356e2-e29b-47c6-a405-3729d743d77d | https://groceries.morrisons.com/products/morrisons-whole-britis… |
| 2 | Morrisons British Whole Milk 4 Pint | Morrisons | 1.65 | 72.6 | 2.9 | 11 | true | 113239405 | 1527fe28-f343-4328-a2bf-f6abd9e068a4 | https://groceries.morrisons.com/products/morrisons-british-whol… |
| 3 | Morrisons British Whole Milk 2 Pint | Morrisons | 1.20 | 1.06 | 3.4 | 5 | true | 103143451 | be536963-9603-4476-8f14-e2eaa0282e8e | https://groceries.morrisons.com/products/morrisons-british-whol… |
| 4 | Morrisons British Whole Milk 2 Pint | Morrisons | 1.20 | 1.06 | 4 | 4 | true | 113240377 | 8701fb36-18d7-461d-b167-415a3b51b94e | https://groceries.morrisons.com/products/morrisons-british-whol… |
| 5 | Morrisons Long Life British Whole Milk | Morrisons | 6.00 | 1.00 | 4.8 | 8 | true | 103113892 | cb84116a-abaa-4f3e-adf2-517487783dc1 | https://groceries.morrisons.com/products/morrisons-long-life-br… |
| 6 | Morrisons Whole British Milk 1 Pint | Morrisons | 0.85 | 1.50 | 0 | 0 | true | 114155772 | c02b0e02-b9c2-47ba-bb60-126f6c71a6a3 | https://groceries.morrisons.com/products/morrisons-whole-britis… |
| 7 | Cravendale Filtered Fresh Whole Milk Fresher for Longer 2L | Cravendale | 2.65 | 1.33 | 4.8 | 123 | true | 103050730 | 4de05f8c-cbb5-40cb-a807-9d41db58d0c5 | https://groceries.morrisons.com/products/cravendale-filtered-fr… |
| 8 | Morrisons British Whole Milk 6 Pint | Morrisons | 2.40 | 70.4 | 3.7 | 9 | true | 113239430 | 11ffe63b-6d78-42af-b9d8-05431cfb02ef | https://groceries.morrisons.com/products/morrisons-british-whol… |
| 9 | Morrisons British Whole Milk 6 Pints | Morrisons | 2.40 | 70.4 | 4.1 | 17 | true | 103042852 | a3caaded-4b21-4636-ba5e-9508d6cb0960 | https://groceries.morrisons.com/products/morrisons-british-whol… |
| 10 | Morrisons Scottish Whole Milk 2 Pint | Morrisons | 1.20 | 1.06 | 0 | 0 | true | 103143514 | c7dbd3e8-8a8e-4b43-9c68-bc84c2e4b838 | https://groceries.morrisons.com/products/morrisons-scottish-who… |
| # | Name | Brand | Price | Rating | Available | Product id | Retailer product id | Url |
|---|---|---|---|---|---|---|---|---|
| 1 | Morrisons Squeezy Burger Relish (310g) | Morrisons | 1.75 | 3.4 | true | dc1cb091-8e98-4145-b603-9a064008039c | 105213678 | https://groceries.morrisons.com/products/morrisons-squeezy-burg… |
| 2 | Morrisons Sliced White Rolls 6 Pack | Morrisons | 0.95 | 2.4 | true | 702fe59d-abda-454a-81a8-3147e881c41c | 105694619 | https://groceries.morrisons.com/products/morrisons-sliced-white… |
| 3 | Morrisons British Iceberg Lettuce | Morrisons | 0.89 | 2.3 | true | fa34258d-fcd7-473d-9af0-eaaae6f80be1 | 108370943 | https://groceries.morrisons.com/products/morrisons-british-iceb… |
| 4 | Morrisons Salad Tomatoes 6 Pack | Morrisons | 0.99 | 2.7 | true | 86cc2465-a7ba-49c9-933f-00c3408aa2ac | 108389100 | https://groceries.morrisons.com/products/morrisons-salad-tomato… |
| 5 | Morrisons British 6 Quarter Pounder Burgers | Morrisons | 3.75 | 2.7 | true | 7f1a9127-c8c9-43f0-b91e-1c3373f41489 | 112527341 | https://groceries.morrisons.com/products/morrisons-british-6-qu… |
| 6 | Morrisons British Cheesy Slices 170g | Morrisons | 1.25 | 4.3 | true | efe212dd-90a3-429f-87be-67d00a5315d9 | 113072879 | https://groceries.morrisons.com/products/morrisons-british-chee… |
| # | Name | Region | Format | Type | Latitude | Longitude |
|---|---|---|---|---|---|---|
| 1 | Aberdeen - King Street | Scotland | supermarket | Morrisons | 57.15 | -2.1 |
| 2 | Aberdeen - King Street Petrol Station | Scotland | pfs | Gas Station | 57.15 | -2.1 |
| 3 | Abergavenny | Wales | supermarket | Morrisons | 51.82 | -3.02 |
| 4 | Aberystwyth | Wales | supermarket | Morrisons | 52.41 | -4.07 |
| 5 | Aberystwyth Petrol Station | Wales | pfs | Gas Station | 52.4 | -4.07 |
| 6 | Aberystwyth Petrol Station | Wales | pfs | Gas Station | 52.4 | -4.07 |
| 7 | Acocks Green | West Midlands | supermarket | Morrisons | 52.45 | -1.82 |
| 8 | Acomb | Yorkshire | supermarket | Morrisons | 53.95 | -1.13 |
| 9 | Acton | Greater London | supermarket | Morrisons | 51.51 | -0.27 |
| 10 | Airdrie | Scotland | supermarket | Morrisons | 55.87 | -3.98 |
What each one takes and what it returns. Open one for a real response, every input and every field.
Search Morrisons Groceries by keyword.
Sendquery
Returnsnamebrandpriceratingavailableretailer_product_id
Get one product from its ID or URL: current, original and unit price, availability, rating, offers and the product information sections.
Sendproduct_idorurl
Returnsproduct
Get an offer from its ID or URL, with the products in it.
Sendpromotion_idorurl
Returnsnamebrandpriceratingavailableproduct_id
List the products in a Morrisons category, with price, offer, rating and availability.
Sendcategory_id
Returnsnamepriceratingavailablebrandimage
Search Morrisons stores by name, address, service or region: address, location, opening times, departments and services.
Sendqueryorregion
Returnsnameregionstore_formatstore_typelocationaddress
Get the full Morrisons Groceries category tree with category IDs.
Returnsnamebreadcrumbscategory_idchildrenproduct_countretailer_category_id
Get the search suggestions Morrisons shows for a query.
Sendquery
Returnssuggestions
Track shelf and unit prices and the offers Morrisons runs on your products and your competitors'.
Products searchProduct detailPromotion detailMap a category's range, own-label against brands, with ratings and availability.
CategoriesCategory productsProducts searchSee which products and brands appear for the searches shoppers type.
Products searchSuggestions list searchList stores by region with their formats, hours, departments and services.
StoresEvery endpoint shows its price in credits before it runs. You buy credits once, with no subscription.
Credit packs| Per call | Endpoints |
|---|---|
| 1 credit | Product detailPromotion detailStoresCategoriesSuggestions list search |
| 3 credits | Category products |
| 5 credits | Products search |
One request shape for every Morrisons endpoint: the endpoint ID and its input. No SDK needed.
curl --request POST \ --url https://data.upscrape.com/execute \ --header "Authorization: Bearer $UPSCRAPE_API_KEY" \ --header "Content-Type: application/json" \ --header "Prefer: wait=30" \ --data '{ "capability": "morrisons.products.search", "input": { "query": "whole milk" }}'
import jsonimport osimport requestspayload = json.loads(r'''{ "capability": "morrisons.products.search", "input": { "query": "whole milk" }}''')response = requests.post( "https://data.upscrape.com/execute", headers={ "Authorization": f"Bearer {os.environ['UPSCRAPE_API_KEY']}", "Content-Type": "application/json", "Prefer": "wait=30", }, json=payload,)response.raise_for_status()print(json.dumps(response.json(), indent=2))
const response = await fetch("https://data.upscrape.com/execute", { method: "POST", headers: { "Authorization": `Bearer ${process.env.UPSCRAPE_API_KEY}`, "Content-Type": "application/json", "Prefer": "wait=30", }, body: JSON.stringify({ "capability": "morrisons.products.search", "input": { "query": "whole milk" }}),});if (!response.ok) { throw new Error(`Upscrape request failed: ${response.status}`);}console.log(JSON.stringify(await response.json(), null, 2));
{ "page": { "has_more": true, "page": 1, "returned": 50, "total_products": 52 }, "items": [ { "name": "Morrisons Whole British Milk 4 Pints", "available": true, "brand": "Morrisons", "product_id": "3ec356e2-e29b-47c6-a405-3729d743d77d", "retailer_product_id": "103103141", "url": "https://groceries.morrisons.com/products/morrisons-whole-british-milk-4-pints/103103141", "price": { "current": { "amount": "1.65", "amount_numeric": 1.65, "currency": "GBP" }, "unit": { "label": "fop.price.per.litre", "current": { "amount": "72.6", "amount_numeric": 72.6, "currency": "GBX" } } }, "rating": { "count": 41, "overall": 3.4 } }, { "name": "Morrisons British Whole Milk 4 Pint", "available": true, "brand": "Morrisons", "product_id": "1527fe28-f343-4328-a2bf-f6abd9e068a4", "retailer_product_id": "113239405", "url": "https://groceries.morrisons.com/products/morrisons-british-whole-milk-4-pint/113239405", "price": { "current": { "amount": "1.65", "amount_numeric": 1.65, "currency": "GBP" }, "unit": { "label": "fop.price.per.litre", "current": { "amount": "72.6", "amount_numeric": 72.6, "currency": "GBX" } } }, "rating": { "count": 11, "overall": 2.9 } } ]}
https://data.upscrape.com/mcp
Using Upscrape, search Morrisons for whole milk and make a table of name, brand, price and price per litre, cheapest per litre first.
With Upscrape, open Morrisons product 113113589 and tell me its price, what it was before, the price per kg, its rating and the offer on it.
Use Upscrape to open Morrisons offer 1010595828 and list what is in it, what it costs and when it ends.
The short answers. The docs have the long ones.
Morrisons does not offer a public API for its grocery prices. Upscrape reads the public Morrisons Groceries site and returns the data as JSON.
No. You send a keyword, a product, an offer or a region and get JSON back. Nothing runs on an account.
Products search, product detail, promotion detail, category products, stores, categories and suggestions list search. Each is its own endpoint with a published input schema, and the response is JSON.
Morrisons endpoints cost from 1 credit per successful call, each priced before it runs. You buy credits once, with no subscription, and paid credits never expire. New accounts get free credits to try it.
Yes. Connect any MCP client to the Upscrape MCP server with OAuth or an API key. The agent finds the Morrisons endpoint, checks its price and runs it with the same credits as the REST API.
Upscrape reads public pages only and needs no login. How you use the data is yours to decide under the laws that apply to you; we sign a data processing agreement for your legal review.
We fix the endpoint. Your request and the response fields stay the same.
Up to 100 free credits to start, no card needed.