Morrisons Product Detail API
Get one product from its ID or URL: current, original and unit price, availability, rating, offers and the product information sections.
- 1 credit per call
- Failed calls are free
- Updated
- morrisons.product.detail.get
{ "product": { "name": "Lurpak Slightly Salted Spreadable Blend of Butter and Rapeseed Oil 400g", "available": true, "brand": "Lurpak", "description": "To create Lurpak® Spreadable, we blend pure Lurpak® butter with rapeseed oil making it spreadable straight from the fridge.<br>Try it on yo…", "retailer_product_id": "113113589", "size": "400g", "url": "https://groceries.morrisons.com/products/lurpak-slightly-salted-spreadable-blend-of-butter-and-rapeseed-oil-400g/113113589", "price": { "current": { "amount": "3.00", "amount_numeric": 3, "currency": "GBP" }, "original": { "amount": "4.25", "amount_numeric": 4.25, "currency": "GBP" }, "unit": { "label": "fop.price.per.kg", "current": { "amount": "7.50", "amount_numeric": 7.5, "currency": "GBP" }, "original": { "amount": "10.63", "amount_numeric": 10.63, "currency": "GBP" } } }, "rating": { "count": 70, "overall": 4.5 }, "details": [ { "title": "Product Information", "content": "To create Lurpak® Spreadable, we blend pure Lurpak® butter with rapeseed oil making it spreadable straight from the fridge.\nTry it on your …" }, { "title": "Country Of Origin", "content": "Denmark" } ], "promotions": [ { "description": "Now £3, Was £4.25" } ] }}
What you send
The input
object of the request, with every field the endpoint accepts.
| Field | Type | Required | What it does | Example |
|---|---|---|---|---|
| product_id | string | one of | The Morrisons product number, such as 107573440. | 113113589 |
| url | string | one of | The product's Morrisons page, as an alternative to the number. |
Fields it returns
What each record in the response holds, with the values from the sample above.
| Field | Type | What it is | Example |
|---|---|---|---|
| product.details[].title | string | Product Information | |
| product.details[].content | string | To create Lurpak® Spreadable, we blend pure Lurpak® butter with… | |
| product | object | The product. | 11 fields |
| product.name | string | The name as Morrisons shows it. | Lurpak Slightly Salted Spreadable Blend of Butter and Rapeseed … |
| product.brand | string | The product's brand. | Lurpak |
| product.size | string | The pack size. | 400g |
| product.available | boolean | Whether the product can be ordered now. | true |
| product.rating.overall | number | The average star rating. | 4.5 |
| product.rating.count | integer | How many ratings the product has. | 70 |
| product.description | string | The product description. | To create Lurpak® Spreadable, we blend pure Lurpak® butter with… |
| product.details | array | The product information sections, such as ingredients. | 15 records |
| product.price | object | The product's price. | 3 fields |
| product.price.current | object | The price now, with its currency. | 3 fields |
| product.price.original | object | The price before the offer. | 3 fields |
| product.price.unit | object | The price per unit, such as per kilogram. | 3 fields |
| product.promotions | array | The offers on the product. | 1 records |
| product.promotions[].description | string | Now £3, Was £4.25 | |
| product.rating | object | The product's rating. | 2 fields |
| product.retailer_product_id | string | Morrisons' shop number for the product. | 113113589 |
| product.url | string | The page on Morrisons' site. | https://groceries.morrisons.com/products/lurpak-slightly-salted… |
Call it from your code, or ask your agent
Set UPSCRAPE_API_KEY to your key and copy a working request.
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.product.detail.get", "input": { "product_id": "113113589" }}'
import jsonimport osimport requestspayload = json.loads(r'''{ "capability": "morrisons.product.detail.get", "input": { "product_id": "113113589" }}''')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.product.detail.get", "input": { "product_id": "113113589" }}),});if (!response.ok) { throw new Error(`Upscrape request failed: ${response.status}`);}console.log(JSON.stringify(await response.json(), null, 2));
https://data.upscrape.com/mcp
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.
More from the Morrisons API
The same data from other platforms
Morrisons Product Detail API FAQ
The short answers. The docs have the long ones.
How much does the Morrisons Product Detail API cost?
1 credit per successful call, shown before it runs. You buy credits once, and paid credits never expire.
What do I send?
Send product_id or url. The input fields below list every option with its type and limits.
Do I need a Morrisons login?
No. It reads public Morrisons data; nothing runs on your account.
Can my AI agent call it?
Yes, over MCP: the agent finds morrisons.product.detail.get, checks its price and runs it with the same credits as the REST API.
Your first Morrisons call is free.
Up to 100 free credits to start, no card needed.