Zepto API & Scraper
Zepto serves every delivery location from one dark store, so its range, prices and stock change from one neighbourhood to the next.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
Every call therefore takes one location, as a 6-digit PIN code or a latitude and longitude, and answers for the store that serves it. `search` takes a search term and returns the products Zepto shows there: selling price and MRP in rupees, Zepto's own discount percent and rupee saving, pack size, unit and weight, the live stock count, how many one order may take, the dark store id, brand, category, rating and a sponsored flag. `product` takes the product_variant_id from any search row and returns that product at the same store: whether the store carries it at all, price, MRP, order limit, description, manufacturer and address, country of origin, FSSAI licence, shelf life and every image. `store` tells you whether Zepto delivers to a location, which dark stores serve it, whether the store is open right now and its opening hours.
What a Zepto field actually contains
Fields that read differently from how they look. Every row was measured against live Zepto responses on 2026-10-15.
| Field | What it holds |
|---|---|
| location | The PIN code or point the answer is for, with the address and postal code Zepto's place search resolved it to. There is no location-free shelf; the API never picks one for you. "atta" counted 246 products near Dadar in Mumbai, 260 in central Delhi and 261 in central Bengaluru. |
| store_id, stores | The dark store that serves the location (and a secondary store where Zepto has one). The same 1 kg Aashirvaad atta cost 63 rupees (MRP 68) at the Mumbai store and 65 rupees (MRP 75) at the Bengaluru store; 8 of 8 products sold in both had a different price or stock. |
| price, mrp, discount_percent, discount_amount | Selling price and maximum retail price in rupees (Zepto sends paise; the API converts). discount_percent is Zepto's own figure, which rounds down: 86 to 69 rupees is printed as 19 percent. |
| inventory, orderable_quantity, max_order_quantity | inventory is the live stock count at that store. orderable_quantity is what one order can take, which is the stock count capped by Zepto's per-order limit (19 in stock, limit 12, orderable 12). |
| available_at_store | false when the store serving the location does not carry the product. Zepto then answers from another store; the API returns no price for your location and names that other store in fallback_store_id. |
| sponsored, repeated_in_results | true for paid placements. Zepto can show the same product twice on a page, once sponsored and once in its normal place; the second copy is flagged. A sponsored product's normal place can also be on the next page. |
| status, eta_minutes | From the store call: whether the store is delivering right now (for example CLOSED with the reason) and the promised minutes when it is open, with the store's opening and closing time. |
Once the location is fixed the answer is the same for every caller: the same Mumbai store read twice in the same minute returned identical prices and stock.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/zepto/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "atta",
"pincode": "400020"
}
}{
"ok": true,
"meta": {
"api": "zepto",
"endpoint": "search",
"mode": "live",
"latency_ms": 4356,
"record_count": 30,
"bytes": 277438,
"cache_hit": false,
"total": 245,
"upstream_requests": 2,
"charged_credits": 3,
"version": "0.1.0",
"request_id": "91a88ccaebcb4324",
"queue_ms": 1.4,
"fetched_at": "2026-10-18T11:43:03.730Z"
},
"data": {
"query": "atta",
"location": {
"pincode": "400020",
"lat": 18.9351176,
"lon": 72.8264378,
"address": "Marine Lines, Mumbai, Maharashtra 400020, India",
"locality": "Marine Lines",
"city": "Mumbai",
"state": "Maharashtra",
"postal_code": "400020"
},
"serviceable": true,
"store_id": "fac79573-63ae-4dd4-a7b5-bd8d8fa61ce2",
"stores": [
{
"store_id": "fac79573-63ae-4dd4-a7b5-bd8d8fa61ce2",
"role": "PRIMARY_STORE",
"serviceable": true,
"night_store": false
},
{
"store_id": "2175898f-b70e-46d9-8def-aba7f0745662",
"role": "SECONDARY_STORE",
"serviceable": true,
"night_store": false
},
{
"store_id": "4097e9a8-f85a-4bfc-98a2-def62b400d38",
"role": "TERTIARY_STORE",
"serviceable": true,
"night_store": false
}
],
"page": 1,
"total": 245,
"has_next": true,
"returned": 30,
"sponsored_rows": 13,
"repeated_rows": 0,
"results": [
{
"product_variant_id": "ae6045b0-0526-4401-8a18-cb55592249e6",
"store_product_id": "d8d97b8a-b059-40a4-aaa5-3a13f27419b1",
"product_id": "02f45221-ff1f-4bb8-8fa4-5bff95f3d65c",
"name": "Superior MP Wheat Atta, 0% Maida | Aashirvaad",
"brand": "Aashirvaad",
"pack_size": "1 pack (1 kg)",
"unit_of_measure": "KILOGRAM",
"weight_grams": 1000,
"price": 62,
"mrp": 68,
"discount_percent": 8,
"discount_amount": 6,
"currency": "INR",
"inventory": 16,
"orderable_quantity": 15,
"max_order_quantity": 15,
"in_stock": true,
"store_id": "fac79573-63ae-4dd4-a7b5-bd8d8fa61ce2",
"category": "Atta, Rice, Oil & Dals",
"category_id": "2f7190d0-7c40-458b-b450-9a1006db3d95",
"rating": {
"average": 4.8,
"count": 161328
},
"sponsored": false,
"image": "https://cdn.zeptonow.com/production/cms/product_variant/74ab1216-6c34-42bb-9165-a2194bfd78da.jpeg",
"image_count": 1,
"url": "https://www.zepto.com/pn/superior-mp-wheat-atta-0-maida-aashirvaad/pvid/ae6045b0-0526-4401-8a18-cb55592249e6",
"rank": 1,
"repeated_in_results": false
},
{
"product_variant_id": "28c6faa7-b304-4f9f-b1b3-8ba1a7b13009",
"store_product_id": "01c32306-2a0f-50d7-b658-967174b9e222",
"product_id": "8e646e5b-9f31-4e27-b10d-31fec70fb1b3",
"name": "Right Shift High Protein Multigrain+ Atta | High Fibre, Low GI",
"brand": "Right Shift Atta",
"pack_size": "1 pc (5 kg)",
"unit_of_measure": "KILOGRAM",
"weight_grams": 5000,
"price": 284,
"mrp": 449,
"discount_percent": 36,
"discount_amount": 165,
"currency": "INR",
"inventory": 2,
"orderable_quantity": 2,
"max_order_quantity": 15,
"in_stock": true,
"store_id": "fac79573-63ae-4dd4-a7b5-bd8d8fa61ce2",
"category": "Atta, Rice, Oil & Dals",
"category_id": "2f7190d0-7c40-458b-b450-9a1006db3d95",
"rating": {
"average": 4.2,
"count": 746
},
"sponsored": true,
"image": "https://cdn.zeptonow.com/production/cms/product_variant/fd7fbc3b-0afb-4b32-91e1-01b418d54b33.jpg",
"image_count": 1,
"url": "https://www.zepto.com/pn/right-shift-high-protein-multigrain-atta-high-fibre-low-gi/pvid/28c6faa7-b304-4f9f-b1b3-8ba1a7b13009",
"rank": 2,
"repeated_in_results": false
},
{
"product_variant_id": "141c4bb0-6694-443b-a972-f8da61fdc105",
"store_product_id": "874d41be-0b9c-4c74-bd22-e4e571ade96b",
"product_id": "41a27c3e-be06-42a8-8cd7-7ff445b6611d",
"name": "Fortune Chakki Fresh Atta",
"brand": "Fortune",
"pack_size": "1 pack (1 kg)",
"unit_of_measure": "KILOGRAM",
"weight_grams": 1000,
"price": 49,
"mrp": 60,
"discount_percent": 18,
"discount_amount": 11,
"currency": "INR",
"inventory": 17,
"orderable_quantity": 15,
"max_order_quantity": 15,
"in_stock": true,
"store_id": "fac79573-63ae-4dd4-a7b5-bd8d8fa61ce2",
"category": "Atta, Rice, Oil & Dals",
"category_id": "2f7190d0-7c40-458b-b450-9a1006db3d95",
"rating": {
"average": 4.7,
"count": 36648
},
"sponsored": false,
"image": "https://cdn.zeptonow.com/production/cms/product_variant/4a246a4b-c574-4f4f-8b96-4996dbba29d6.jpeg",
"image_count": 1,
"url": "https://www.zepto.com/pn/fortune-chakki-fresh-atta/pvid/141c4bb0-6694-443b-a972-f8da61fdc105",
"rank": 3,
"repeated_in_results": false
}
]
}
}What the Zepto API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search Zepto AS SEEN FROM ONE DELIVERY LOCATION (the dark store that serves it): products with selling price, MRP, discount, pack size, live stock count, how many one order may take, the store id, brand, category, rating and a sponsored flag. `query` and a location (`pincode`, or `lat`+`lon`) are required. | Pricing teams call search to search Zepto AS SEEN FROM ONE DELIVERY LOCATION (the dark store that serves it). | query, pincode, lat, lon, page |
| product | One Zepto product at one delivery location, by the `product_variant_id` a search row returns (or its zepto.com/pn/<slug>/pvid/<id> URL): whether this dark store carries it, price, MRP, discount, live stock, order cap, pack size, rating, category, description, manufacturer, country of origin, FSSAI licence, shelf life, images. | Marketplace operators call product to get one Zepto product at one delivery location, by the `product_variant_id` a search row. | product_variant_id, pincode, lat, lon |
| store | Whether Zepto delivers to a location right now: the resolved address and postal code, serviceable yes/no, the dark stores serving it (primary / secondary, night store), whether the store is open or closed and why, the delivery promise in minutes when it is open, and the store's opening hours. | Catalog enrichment teams call store to get whether Zepto delivers to a location right now. | pincode, lat, lon |
Call search from your stack
curl -X POST https://api.reefapi.com/zepto/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"atta","pincode":"400020"}'import requests
r = requests.post(
"https://api.reefapi.com/zepto/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "atta",
"pincode": "400020"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/zepto/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "atta",
"pincode": "400020"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.zepto.search with {"query":"atta","pincode":"400020"}.Who uses this API and why
- Compare quick-commerce prices and discounts across Indian neighbourhoods and cities.
- Track live stock counts of a product at the dark store serving an address.
- Check whether Zepto is delivering to a list of PIN codes or coordinates right now.
- Watch sponsored placements for a search term by location.
- Build a grocery product database with pack sizes, FSSAI licence, shelf life and manufacturer.
Questions developers ask before integrating
Do I need a Zepto account?
No. Everything is read logged out: the prices and stock are the ones Zepto shows any visitor who sets that location.
Why is a location required?
Because every Zepto location is served by one dark store with its own range, prices and stock. The API never substitutes a default location: you pass a 6-digit PIN code or a latitude and longitude, and the answer echoes the address and postal code it resolved.
PIN code or latitude and longitude?
A PIN code is resolved through Zepto's own place search and accepted only when the place found is that postal code. A PIN code stands for one point of the area, while lat and lon pick the store of a specific address.
What happens where Zepto does not deliver?
The answer says serviceable: false with no rows and a note.
How many products per page?
Zepto decides: 18 to 30 per page in our measurements. Up to 10 pages per search; past the last page the answer is an empty page with a note.
What if a product is not carried near me?
The product call still answers, with available_at_store: false and no price, because the price Zepto shows then belongs to another store.
Are filters and sort orders supported?
Not yet. The API returns Zepto's default order for the search term; filter by brand, price or stock on your side using the returned fields.
How fresh is the data?
Every call reads Zepto live; nothing is cached. Stock counts and store status move during the day.
What is the Zepto API?
Zepto API is a ReefAPI endpoint group for dark-store prices, mrp, discounts and live stock from zepto for any indian pin code or gps point. It returns live JSON through POST requests under /zepto/v1.
Is the Zepto API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Zepto calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Zepto login or account?
No login to Zepto is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the Zepto data?
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the Zepto API use?
Zepto actions currently cost 2-3 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call Zepto from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call zepto actions with the same key, credit pool and JSON envelope used by normal REST requests.