Morrisons Categories API
Get the full Morrisons Groceries category tree with category IDs.
- 1 credit per call
- Failed calls are free
- Updated
- morrisons.categories.list
{ "raw": { "categories": [ { "name": "New", "categoryId": "1dfcd495-45fc-405d-a831-4c48ade8c2c5", "productCount": 0, "retailerCategoryId": "192077", "breadcrumbs": [], "childCategories": [ { "name": "New This Week", "categoryId": "cb7d594b-0696-4995-b3ca-8aa693886697", "productCount": 0, "retailerCategoryId": "193929", "breadcrumbs": [], "childCategories": [] } ] }, { "name": "Fruit & Veg", "categoryId": "094cee3b-0f6c-40f1-b5ab-08026d73b02c", "productCount": 0, "retailerCategoryId": "176738", "breadcrumbs": [], "childCategories": [ { "name": "Salads", "categoryId": "f0f1755b-87a5-4878-b27e-6b0ad4f12dbd", "productCount": 0, "retailerCategoryId": "176758", "breadcrumbs": [], "childCategories": [ { "name": "Avocados", "categoryId": "748cf4c7-88ce-4311-ac0a-60747553f518", "productCount": 0, "retailerCategoryId": "184005", "breadcrumbs": [], "childCategories": [] }, { "name": "Celery", "categoryId": "71318055-3bc9-4f58-9f4b-0cecec3173b0", "productCount": 0, "retailerCategoryId": "183982", "breadcrumbs": [], "childCategories": [] } ] }, { "name": "Vegetables", "categoryId": "0ba0c980-a60b-49c2-b7b7-389aeda6cb3f", "productCount": 0, "retailerCategoryId": "176756", "breadcrumbs": [], "childCategories": [ { "name": "Prepared Vegetables", "categoryId": "0f00c63d-b67d-4159-a09c-6d69786d2461", "productCount": 0, "retailerCategoryId": "183868", "breadcrumbs": [], "childCategories": [] }, { "name": "Vegetable Meal Kits", "categoryId": "ecb439e6-8e0a-4001-a108-228e718de8d0", "productCount": 0, "retailerCategoryId": "183871", "breadcrumbs": [], "childCategories": [] } ] } ] } ] }, "categories": [ { "name": "New", "category_id": "1dfcd495-45fc-405d-a831-4c48ade8c2c5", "product_count": 0, "retailer_category_id": "192077", "breadcrumbs": [], "children": [ { "name": "New This Week", "category_id": "cb7d594b-0696-4995-b3ca-8aa693886697", "product_count": 0, "retailer_category_id": "193929", "breadcrumbs": [], "children": [] } ] }, { "name": "Fruit & Veg", "category_id": "094cee3b-0f6c-40f1-b5ab-08026d73b02c", "product_count": 0, "retailer_category_id": "176738", "breadcrumbs": [], "children": [ { "name": "Salads", "category_id": "f0f1755b-87a5-4878-b27e-6b0ad4f12dbd", "product_count": 0, "retailer_category_id": "176758", "breadcrumbs": [], "children": [ { "name": "Avocados", "category_id": "748cf4c7-88ce-4311-ac0a-60747553f518", "product_count": 0, "retailer_category_id": "184005", "breadcrumbs": [], "children": [] }, { "name": "Celery", "category_id": "71318055-3bc9-4f58-9f4b-0cecec3173b0", "product_count": 0, "retailer_category_id": "183982", "breadcrumbs": [], "children": [] } ] }, { "name": "Vegetables", "category_id": "0ba0c980-a60b-49c2-b7b7-389aeda6cb3f", "product_count": 0, "retailer_category_id": "176756", "breadcrumbs": [], "children": [ { "name": "Prepared Vegetables", "category_id": "0f00c63d-b67d-4159-a09c-6d69786d2461", "product_count": 0, "retailer_category_id": "183868", "breadcrumbs": [], "children": [] }, { "name": "Vegetable Meal Kits", "category_id": "ecb439e6-8e0a-4001-a108-228e718de8d0", "product_count": 0, "retailer_category_id": "183871", "breadcrumbs": [], "children": [] } ] } ] } ]}
| # | Name | Product count | Category id | Retailer category id |
|---|---|---|---|---|
| 1 | New | 0 | 1dfcd495-45fc-405d-a831-4c48ade8c2c5 | 192077 |
| 2 | Fruit & Veg | 0 | 094cee3b-0f6c-40f1-b5ab-08026d73b02c | 176738 |
| 3 | Meat & Fish | 0 | 7fd143ec-3236-4177-94d1-aff4913c9a2e | 179549 |
Fields it returns
What each record in the response holds, with the values from the sample above.
| Field | Type | What it is | Example |
|---|---|---|---|
| categories[].children[].name | string | The subcategory's name. | New This Week |
| categories[].name | string | The name as Morrisons shows it. | New |
| categories[].breadcrumbs | array | The category path above the page. | empty in this sample |
| categories[].category_id | string | Morrisons' ID for the category; the category endpoint takes it. | 1dfcd495-45fc-405d-a831-4c48ade8c2c5 |
| categories[].children | array | Subcategories under this one. | 1 records |
| categories[].children[].breadcrumbs | array | The category path above it; usually empty here. | empty in this sample |
| categories[].children[].category_id | string | Morrisons' ID for the category; the category endpoint takes it. | cb7d594b-0696-4995-b3ca-8aa693886697 |
| categories[].children[].children | array | Subcategories under this one. | empty in this sample |
| categories[].children[].product_count | integer | How many products Morrisons reports; often 0 in this list. | 0 |
| categories[].children[].retailer_category_id | string | Morrisons' shop number for the category. | 193929 |
| categories[].product_count | integer | How many products Morrisons reports; often 0 in this list. | 0 |
| categories[].retailer_category_id | string | Morrisons' shop number for the category. | 192077 |
| categories | array | Morrisons' categories. | 3 records |
| raw | object | Morrisons' own category list, unchanged. | 1 fields |
| raw.categories | array | Morrisons' categories. | 3 records |
| raw.categories[].breadcrumbs | array | The category path above it; usually empty here. | empty in this sample |
| raw.categories[].categoryId | string | Morrisons' ID for the category. | 1dfcd495-45fc-405d-a831-4c48ade8c2c5 |
| raw.categories[].childCategories | array | Subcategories under this one. | 1 records |
| raw.categories[].name | string | The category's name. | New |
| raw.categories[].productCount | integer | How many products Morrisons reports; often 0 in this list. | 0 |
| raw.categories[].retailerCategoryId | string | Morrisons' shop number for the category. | 192077 |
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.categories.list", "input": {}}'
import jsonimport osimport requestspayload = json.loads(r'''{ "capability": "morrisons.categories.list", "input": {}}''')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.categories.list", "input": {}}),});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, get the Morrisons categories. Tell me what it costs before you run it, then show the results as a table.
More from the Morrisons API
The same data from other platforms
Morrisons Categories API FAQ
The short answers. The docs have the long ones.
How much does the Morrisons Categories API cost?
1 credit per successful call, shown before it runs. You buy credits once, and paid credits never expire.
What do I send?
Every input is optional; the input fields below list what each one does.
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.categories.list, 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.