Nana Express Products API
Every product in a Nana store category: name, brand, price, selling unit, stock and the most you can order.
Sendstore_idandcategory_id
Returnsnamebrandpriceselling_unitin_stockmax_quantity
Read a Nana Express store's grocery range: its category tree, then every product in a category with price, brand, pack size, stock and how many you can buy. Send a store and a category, get JSON back.
| # | Product | Brand | Price (SAR) | Sold by | In stock | Most per order | Currency | Item unit | Pid | Id |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Fresh HASHI Meat With Bones - 1Kg | Nana Products | 50.5 | Kilo | true | 28 | SAR | PCs | PID10314271 | INVP04a641de-9139-41bd-9b2b-dd4c594cf304 |
| 2 | Minced Beef Fresh | Tamimi Markets | 36.25 | Kilo | true | 8 | SAR | Donate | PID10247929 | INVP06fad861-7875-49f9-bb10-55b502861fd2 |
| 3 | Zood Goat Meat Cubes with Bone - 500g | Zod | 36 | Gram | true | 73 | SAR | PCs | PID10314274 | INVP0c8844d8-4fbe-45cb-87ab-68cbd0b13bdb |
| 4 | Goat Meat Cubes with Bone - 1kg | Nana Products | 64 | Kilo | true | 44 | SAR | PCs | PID10314277 | INVP3018328b-7970-4280-bf8a-e07f167030eb |
| 5 | Fresh HASHI Meat With Bones - 1Kg | Nana Products | 50.5 | Kilo | true | 99 | SAR | PCs | PID10314276 | INVP4a6c8176-908e-46c0-8d6c-f32a6c1af5ec |
| 6 | Siniora Fresh Beef Meat Strips 200 G | siniora | 42 | Gram | true | 11 | SAR | PCs | PID10286064 | INVP59bd1a6d-4232-4c5c-97d2-9e0ea40443d2 |
| 7 | Naeimi Fresh Lamb Meat - 1kg | Nana Products | 110.25 | Kilo | true | 8 | SAR | PCs | PID10314272 | INVP7027c3ce-9a30-485e-a59b-ee05eff94339 |
| 8 | Zod Chilled Beef Cubes - 500g | Zod | 23 | جرام | true | 13 | SAR | حبة | PID10316528 | INVP7190f239-aa70-4702-bfaf-a3ed945741e7 |
| # | Category | ID | Product count |
|---|---|---|---|
| 1 | Chilled Meat | COL7214322072 | |
| 2 | Water & Ice | COL1139197048 | 39 |
| 3 | Rice, Pasta & Grains | COL6082763880 | 129 |
| 4 | Chips & Savory Snacks | COL5580083228 | 107 |
| 5 | Chocolate & Cake | COL4850933640 | 152 |
| 6 | Biscuits & Cookies | COL6012070401 | 260 |
| 7 | Candies & Gums | COL1006788405 | 165 |
| 8 | Coffee | COL1106239060 | 78 |
| 9 | Nuts & Dried Fruits | COL7691324107 | 21 |
| 10 | Carbonated & Energy Drinks | COL1167091990 | 158 |
What each one takes and what it returns. Open one for a real response, every input and every field.
Every product in a Nana store category: name, brand, price, selling unit, stock and the most you can order.
Sendstore_idandcategory_id
Returnsnamebrandpriceselling_unitin_stockmax_quantity
A Nana store's category tree, each category with its subcategories and how many products they hold.
Sendstore_id
Returnsnameidchildren
Follow what your products and your rivals' cost in a Nana store, and when they run out.
ProductsSee how a Nana store organises its shelves and how many products sit in each category.
CategoriesProductsOne request shape for every Nana Express 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": "nana.products.list", "input": { "category_id": "COL7214322072", "store_id": "STR00002232" }}'
import jsonimport osimport requestspayload = json.loads(r'''{ "capability": "nana.products.list", "input": { "category_id": "COL7214322072", "store_id": "STR00002232" }}''')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": "nana.products.list", "input": { "category_id": "COL7214322072", "store_id": "STR00002232" }}),});if (!response.ok) { throw new Error(`Upscrape request failed: ${response.status}`);}console.log(JSON.stringify(await response.json(), null, 2));
{ "products": [ { "name": "Fresh HASHI Meat With Bones - 1Kg", "price": 50.5, "brand": "Nana Products", "currency": "SAR", "id": "INVP04a641de-9139-41bd-9b2b-dd4c594cf304", "in_stock": true, "item_unit": "PCs", "max_quantity": 28, "pid": "PID10314271", "selling_unit": "Kilo" }, { "name": "Minced Beef Fresh", "price": 36.25, "brand": "Tamimi Markets", "currency": "SAR", "id": "INVP06fad861-7875-49f9-bb10-55b502861fd2", "in_stock": true, "item_unit": "Donate", "max_quantity": 8, "pid": "PID10247929", "selling_unit": "Kilo" } ]}
https://data.upscrape.com/mcp
Using Upscrape, list the products in Nana store STR00002232's Chilled Meat category (COL7214322072). Make a table of product, brand, price and stock.
With Upscrape, list the categories of Nana store STR00002232 with their subcategories and how many products each holds.
The short answers. The docs have the long ones.
Nana does not offer a public API for its grocery catalog. Upscrape reads the public Nana store and returns categories and products as JSON.
You send the store's ID. When you ask for access, tell us the areas you need and we help you find their stores.
Access to Nana and its pricing are arranged with us directly. Tell us what you need, and we set it up for your account.
Products and categories. Each is its own endpoint with a published input schema, and the response is JSON.
No. Upscrape reads the pages Nana Express shows to any visitor, so you send the input the endpoint asks for and get the data back. Nothing runs on your account, and you share no password or cookie.
Yes. Connect any MCP client to the Upscrape MCP server with OAuth or an API key. The agent finds the Nana Express 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.