Zepto data, ready when you are.
A product's price and stock at one dark store, right now, from Zepto.
- See the price before every call
- Pay only for records that come back
- No subscription. Your balance never expires
What you can get.
- $0.0009per recordTry it →
Products
Full product detail at one store. Price, MRP, discount, stock count, rating, seller, manufacturer, specifications. By product URL.
- $0.0009per recordTry it →
Search
Search the app as a shopper at that store would. Listings with price, MRP, stock and rank.
- $0.0009per recordTry it →
Category
One category page at one store. Names must be the app's own menu names; a name that is not on the menu is refused and nothing is charged.
What the data looks like.
| productName | brand | price | mrp | discountPct | packSize | inStock | category | rank | rating | ratingCount | productId | variantId | storeId | vendorProductId | images | productUrl | details |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Tomato, Hybrid | Fresh | 32 | 40 | 20 | 500 g | true | Vegetables | 1 | 4.3 | 1,200 | 1563872094 | 1783170642 | 1613790522 | 2511739480 |
| https://www.zeptonow.com/tomato-hybrid-1000 |
|
| Onion | Fresh | 38 | 45 | 16 | 1 kg | true | Vegetables | 2 | 4.3 | 1,200 | 1331370611 | 1288289772 | 2237783320 | 2449101274 |
| https://www.zeptonow.com/onion-1001 |
|
| Coriander Leaves | Fresh | 12 | 15 | 20 | 100 g | true | Vegetables | 3 | 4.3 | 1,200 | 3984202258 | 270675423 | 2427032466 | 2665141668 |
| https://www.zeptonow.com/coriander-leaves-1002 |
|
For developers
API reference.
One endpoint, POST /v1/zepto. Open an operation to see its fields.
Productsproducts
Full product detail at one store. Price, MRP, discount, stock count, rating, seller, manufacturer, specifications. By product URL.
| Field | Type | Meaning |
|---|---|---|
| subjects * | list of string · 1-10 items | Product URLs at that store. |
| store * | object | |
| store.storeId | string | The dark store's own id, when a previous answer or a store URL gave you one. The most exact way to name a store; wins over the others. |
| store.city | string | The city the pincode is in ("Agra"). Helps the pincode resolve to the right store; ignored when storeId or lat/lon are given. |
| store.pincode | string | A 6-digit Indian postal code ("282003"); the nearest serving store is used. Give city too when the pincode is ambiguous. |
| store.lat | number | Latitude in decimal degrees, with lon: the store serving that point. |
| store.lon | number | Longitude in decimal degrees; only read together with lat. |
Response fields, each row of data
| Field | Type |
|---|---|
| productId | string |
| variantId | string |
| storeScope | string |
| storeId | string |
| vendorProductId | string |
| productName | string |
| brand | string |
| price | number |
| mrp | number |
| discountPct | number |
| packSize | string |
| inStock | boolean |
| stockCount | integer |
| rating | number |
| ratingCount | integer |
| category | string |
| rank | integer |
| sponsored | boolean |
| images | list of string |
| productUrl | string |
| description | string |
| countryOfOrigin | string |
| manufacturer | string |
| seller | string |
| specifications | any |
| latitude | number |
| longitude | number |
| details | object |
Every field is present on every row: a value the source had nothing for is null, an empty list is []. details is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is {} when there is nothing more.
curl -X POST https://apiforagents.dev/v1/zepto \
-H "Authorization: Bearer $AFA_KEY" \
-H "Content-Type: application/json" \
-d '{"op":"products","subjects":["https://www.zepto.com/pn/<product-name>/pvid/<id>"],"store":{"city":"Bengaluru","pincode":"560001"}}'Example response rows
[
{
"productName": "Tomato, Hybrid",
"brand": "Fresh",
"price": 32,
"mrp": 40,
"discountPct": 20,
"packSize": "500 g",
"inStock": true,
"category": "Vegetables",
"rank": 1,
"rating": 4.3,
"ratingCount": 1200,
"productId": "1563872094",
"variantId": "1783170642",
"storeId": "1613790522",
"vendorProductId": "2511739480",
"images": [
"https://img.zeptonow.com/tomato-hybrid.jpg"
],
"productUrl": "https://www.zeptonow.com/tomato-hybrid-1000",
"details": {}
},
{
"productName": "Onion",
"brand": "Fresh",
"price": 38,
"mrp": 45,
"discountPct": 16,
"packSize": "1 kg",
"inStock": true,
"category": "Vegetables",
"rank": 2,
"rating": 4.3,
"ratingCount": 1200,
"productId": "1331370611",
"variantId": "1288289772",
"storeId": "2237783320",
"vendorProductId": "2449101274",
"images": [
"https://img.zeptonow.com/onion.jpg"
],
"productUrl": "https://www.zeptonow.com/onion-1001",
"details": {}
}
]An example to show the shape. The rows show the most used fields; a live row carries every field in the table above.
Searchsearch
Search the app as a shopper at that store would. Listings with price, MRP, stock and rank.
| Field | Type | Meaning |
|---|---|---|
| query * | string · ≤300 chars | |
| store * | object | |
| store.storeId | string | The dark store's own id, when a previous answer or a store URL gave you one. The most exact way to name a store; wins over the others. |
| store.city | string | The city the pincode is in ("Agra"). Helps the pincode resolve to the right store; ignored when storeId or lat/lon are given. |
| store.pincode | string | A 6-digit Indian postal code ("282003"); the nearest serving store is used. Give city too when the pincode is ambiguous. |
| store.lat | number | Latitude in decimal degrees, with lon: the store serving that point. |
| store.lon | number | Longitude in decimal degrees; only read together with lat. |
| limit | integer · 1-100 |
Response fields, each row of data
| Field | Type |
|---|---|
| productId | string |
| variantId | string |
| storeScope | string |
| storeId | string |
| vendorProductId | string |
| productName | string |
| brand | string |
| price | number |
| mrp | number |
| discountPct | number |
| packSize | string |
| inStock | boolean |
| stockCount | integer |
| rating | number |
| ratingCount | integer |
| category | string |
| rank | integer |
| sponsored | boolean |
| images | list of string |
| productUrl | string |
| description | string |
| countryOfOrigin | string |
| manufacturer | string |
| seller | string |
| specifications | any |
| latitude | number |
| longitude | number |
| details | object |
Every field is present on every row: a value the source had nothing for is null, an empty list is []. details is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is {} when there is nothing more.
curl -X POST https://apiforagents.dev/v1/zepto \
-H "Authorization: Bearer $AFA_KEY" \
-H "Content-Type: application/json" \
-d '{"op":"search","query":"Tata Salt","store":{"city":"Delhi","pincode":"110001"},"limit":20}'Example response rows
[
{
"productName": "Dish Wash Liquid, Lemon",
"brand": "Shinex",
"price": 99,
"mrp": 115,
"discountPct": 14,
"packSize": "500 ml",
"inStock": true,
"category": "Cleaning",
"rank": 1,
"rating": 4.3,
"ratingCount": 1200,
"productId": "213580421",
"variantId": "381638891",
"storeId": "4133013222",
"vendorProductId": "3270065864",
"images": [
"https://img.zeptonow.com/dish-wash-liquid-lemon.jpg"
],
"productUrl": "https://www.zeptonow.com/dish-wash-liquid-lemon-1000",
"details": {}
},
{
"productName": "Dish Wash Bar",
"brand": "Shinex",
"price": 30,
"mrp": 30,
"discountPct": 0,
"packSize": "200 g",
"inStock": true,
"category": "Cleaning",
"rank": 2,
"rating": 4.3,
"ratingCount": 1200,
"productId": "1242557009",
"variantId": "962932821",
"storeId": "265047964",
"vendorProductId": "4128143963",
"images": [
"https://img.zeptonow.com/dish-wash-bar.jpg"
],
"productUrl": "https://www.zeptonow.com/dish-wash-bar-1001",
"details": {}
}
]An example to show the shape. The rows show the most used fields; a live row carries every field in the table above.
Categorycategory
One category page at one store. Names must be the app's own menu names; a name that is not on the menu is refused and nothing is charged.
| Field | Type | Meaning |
|---|---|---|
| category * | string · ≤80 chars | The top-level aisle as the app names it ("Dairy, Bread & Eggs"). |
| subCategory * | string · ≤80 chars | The shelf inside it, again as the app names it ("Milk"). Both are required: the listing is one shelf at one store. |
| store * | object | |
| store.storeId | string | The dark store's own id, when a previous answer or a store URL gave you one. The most exact way to name a store; wins over the others. |
| store.city | string | The city the pincode is in ("Agra"). Helps the pincode resolve to the right store; ignored when storeId or lat/lon are given. |
| store.pincode | string | A 6-digit Indian postal code ("282003"); the nearest serving store is used. Give city too when the pincode is ambiguous. |
| store.lat | number | Latitude in decimal degrees, with lon: the store serving that point. |
| store.lon | number | Longitude in decimal degrees; only read together with lat. |
| limit | integer · 1-100 |
Response fields, each row of data
| Field | Type |
|---|---|
| productId | string |
| variantId | string |
| storeScope | string |
| storeId | string |
| vendorProductId | string |
| productName | string |
| brand | string |
| price | number |
| mrp | number |
| discountPct | number |
| packSize | string |
| inStock | boolean |
| stockCount | integer |
| rating | number |
| ratingCount | integer |
| category | string |
| rank | integer |
| sponsored | boolean |
| images | list of string |
| productUrl | string |
| description | string |
| countryOfOrigin | string |
| manufacturer | string |
| seller | string |
| specifications | any |
| latitude | number |
| longitude | number |
| details | object |
Every field is present on every row: a value the source had nothing for is null, an empty list is []. details is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is {} when there is nothing more.
curl -X POST https://apiforagents.dev/v1/zepto \
-H "Authorization: Bearer $AFA_KEY" \
-H "Content-Type: application/json" \
-d '{"op":"category","category":"Atta Rice Oil Dals","subCategory":"Atta","store":{"city":"Bengaluru","pincode":"560001"},"limit":50}'Example response rows
[
{
"productName": "Potato Chips, Salted",
"brand": "Crunchio",
"price": 20,
"mrp": 20,
"discountPct": 0,
"packSize": "52 g",
"inStock": true,
"category": "Snacks",
"rank": 1,
"rating": 4.3,
"ratingCount": 1200,
"productId": "1498328296",
"variantId": "2377874407",
"storeId": "3345945435",
"vendorProductId": "1303579314",
"images": [
"https://img.zeptonow.com/potato-chips-salted.jpg"
],
"productUrl": "https://www.zeptonow.com/potato-chips-salted-1000",
"details": {}
},
{
"productName": "Roasted Peanuts",
"brand": "Nutbox",
"price": 55,
"mrp": 60,
"discountPct": 8,
"packSize": "200 g",
"inStock": true,
"category": "Snacks",
"rank": 2,
"rating": 4.3,
"ratingCount": 1200,
"productId": "877985001",
"variantId": "2418411808",
"storeId": "3612682689",
"vendorProductId": "4241202604",
"images": [
"https://img.zeptonow.com/roasted-peanuts.jpg"
],
"productUrl": "https://www.zeptonow.com/roasted-peanuts-1001",
"details": {}
}
]An example to show the shape. The rows show the most used fields; a live row carries every field in the table above.
Historyhistoryfree
The stored price/stock series of products already held at a store. Free.
| Field | Type | Meaning |
|---|---|---|
| subjects * | list of string · 1-10 items | |
| store * | object | |
| store.storeId | string | The dark store's own id, when a previous answer or a store URL gave you one. The most exact way to name a store; wins over the others. |
| store.city | string | The city the pincode is in ("Agra"). Helps the pincode resolve to the right store; ignored when storeId or lat/lon are given. |
| store.pincode | string | A 6-digit Indian postal code ("282003"); the nearest serving store is used. Give city too when the pincode is ambiguous. |
| store.lat | number | Latitude in decimal degrees, with lon: the store serving that point. |
| store.lon | number | Longitude in decimal degrees; only read together with lat. |
| metric | enum | price · mrp · discount_pct · stock_count · rating · rating_count |
| days | integer · 1-730 |