Zepto Category Products
zepto.category.products
Choose a category or subcategory ID and location to collect its products. Apply supported filters and request more results when available.
At a glance
- Endpoint ID
zepto.category.products- Price
- 3–5 credits per call; failed calls are free
- Runs for up to
- 180 seconds
Request
Send the endpoint ID as capability and its fields as input. Set UPSCRAPE_API_KEY to your key first.
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": "zepto.category.products", "input": { "limit": 20, "max_pages": 3, "page": 0, "pincode": "560067", "subcategory_id": "8b44cef2-1bab-407e-aadd-29254e6778fa" }}'
import jsonimport osimport requestspayload = json.loads(r'''{ "capability": "zepto.category.products", "input": { "limit": 20, "max_pages": 3, "page": 0, "pincode": "560067", "subcategory_id": "8b44cef2-1bab-407e-aadd-29254e6778fa" }}''')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": "zepto.category.products", "input": { "limit": 20, "max_pages": 3, "page": 0, "pincode": "560067", "subcategory_id": "8b44cef2-1bab-407e-aadd-29254e6778fa" }}),});if (!response.ok) { throw new Error(`Upscrape request failed: ${response.status}`);}console.log(JSON.stringify(await response.json(), null, 2));
Input
- Send a category ID, a subcategory ID or a Zepto category link. For checks you repeat, use the IDs the categories endpoint returns.
- For results at one place, send a store ID, a six-digit pincode, or latitude and longitude together; not a pincode and coordinates at once.
- Ask for 1 to 100 matching products from 1 to 20 of Zepto's pages. The page counts from 0 (page_number from 1). Jumping to a later page reads the earlier ones first, which uses part of the page limit.
- You can filter by brand IDs or names (up to 64 each), a price range in paise, a minimum discount, and in stock only. Sort by relevance or price, low or high first; price sorting orders the matching products read in this call.
- To read on, send the returned next-page value back with the same category, location, filters, sort and limit, and leave the page out.
| Field | Type | Required | What it does | Example |
|---|---|---|---|---|
latitude |
number | one of | Latitude for location-based store resolution. From -90 to 90. | |
longitude |
number | one of | Longitude for location-based store resolution. From -180 to 180. | |
pincode |
string | one of | Six-digit Indian pincode. When provided, Upscrape resolves coordinates and the Zepto delivery store automatically. | 560067 |
brand_ids |
array<string> | no | Case-insensitive exact IDs; union with brand_names. | |
brand_names |
array<string> | no | Trimmed case-insensitive exact names; union with brand_ids. | |
category_id |
string | no | Zepto category ID to browse. | |
cursor |
string | no | Use next_cursor unchanged with the same category, delivery context and limit. Omit page and page_number. | |
in_stock |
boolean | no | Match observed stock state only; unknown stock never matches. | |
limit |
integer | no | Maximum matching sample size. Sorting is limited to this sample. From 1 to 100. Default: 20. |
20 |
max_pages |
integer | no | Maximum native product pages fetched, including continuation refetches and skipped prefixes. A zero-match slice can still have continuation. From 1 to 20. Default: 10. |
3 |
max_price_paise |
integer | no | Inclusive observed effective price maximum. From 0 to 1000000000. | |
min_discount |
integer | no | Minimum known discount percentage. From 0 to 100. | |
min_price_paise |
integer | no | Inclusive observed effective price minimum; unknown prices never match. From 0 to 1000000000. | |
page |
integer | no | Zero-based logical slice (0-99); skips page multiplied by limit products within the native scan budget. Explicit page takes precedence over page_number. Cannot be combined with cursor. From 0 to 99. | 0 |
page_number |
integer | no | Optional one-based logical slice alias (1-100). page_number=2 equals page=1. Cannot be combined with cursor. From 1 to 100. | |
sort |
string | no | unknown prices last, ties by variant ID. Allowed values: relevance, price_asc, price_desc. |
relevance · price_asc · price_desc |
store_id |
string | no | Zepto store ID. Defaults to the public Bangalore sample store. | |
subcategory_id |
string | no | Zepto subcategory ID to browse. | 8b44cef2-1bab-407e-aadd-29254e6778fa |
url |
string | no | Direct URL to a Zepto category page. |
Response
A finished call answers with HTTP 200; the data is in results[0].data, and billing.credits_charged is what it cost. A call still running after the wait answers 202: see jobs and results.
This is results[0].data from a real run:
{ "captured_at": "2026-10-04T11:59:14.942710379Z", "count": 20, "has_more": true, "location_eta_in_minutes": 10, "location_eta_serviceable": true, "location_latitude": 12.9967012, "location_longitude": 77.758197, "location_serviceable": true, "location_store_id": "e58fff62-7695-44c2-aba0-6bc96074bc64", "next_cursor": "eyJyZXF1ZXN0IjoiZjY2ZDI2MmMwMmI2NzU5MDcwMTk2NGEyYmFlMzFlZmU5NWI0YmM1NTJiM2ZmOWE1NzBlMjA3ODg4NzVlZjg5MyIsInYiOjIsInNjb3BlIjoiM2Y4M2QwYWE3NjF…", "page_number": 1, "rows_scanned": 32, "sample_size": 20, "location": { "eta_minutes": 10, "eta_serviceable": true, "latitude": 12.9967012, "longitude": 77.758197, "pincode": "560067", "serviceable": true, "store_id": "e58fff62-7695-44c2-aba0-6bc96074bc64", "secondary_store_ids": [ "0059ff6a-7eb0-477a-a7f5-69256f2c444b" ], "store_ids": [ "e58fff62-7695-44c2-aba0-6bc96074bc64", "0059ff6a-7eb0-477a-a7f5-69256f2c444b" ] }, "applied_filters": { "sort": "relevance" }, "context": { "source": "resolved_location", "store_id": "e58fff62-7695-44c2-aba0-6bc96074bc64" }, "location_secondary_store_ids": [ "0059ff6a-7eb0-477a-a7f5-69256f2c444b" ], "location_store_ids": [ "e58fff62-7695-44c2-aba0-6bc96074bc64", "0059ff6a-7eb0-477a-a7f5-69256f2c444b" ], "results": [ { "name": "Nutraj Arabian Premium Dates", "available_quantity": 6, "brand": "Nutraj", "brand_id": "3edf73ec-d705-4850-9149-5eead6c08993", "category_id": "0c2ccf87-e32c-4438-9560-8d9488fc73e0", "category_name": "Masala, Dry Fruits & More", "country_of_origin": "India", "description": "Nutraj Gold Arabian Dates provide best nourishment for muscle development & are useful in preventing many types of cancers.", "discount_amount_paise": 7500, "discount_percent": 33, "discounted_selling_price_paise": 15000, "formatted_pack_size": "1 pack (500 g)", "fssai_license": "10016051001876", "image_url": "https://cdn.zeptonow.com/production/tr:w-600,ar-1000-1000,pr-true,f-auto,q-80/cms/product_variant/20fb3683-d720-4443-ae80-7de2eab72344.jpg", "in_stock": true, "is_active": true, "is_primary": true, "l3_category_id": "06eaff6a-6e4e-44a7-bbbd-f15e7d6bbe72", "manufacturer_name": "Vkc Nuts Privated Limited", "max_allowed_quantity": 12, "mrp_paise": 22500, "pack_size": 500, "primary_subcategory_id": "fd487995-4d2b-4b23-a6ef-831bc118dedb", "product_id": "1f594c9c-72e6-4e3e-8a35-eaa7f7540cf0", "product_type": "SELLABLESKU", "product_url": "https://www.zepto.com/pn/nutraj-arabian-premium-dates/pvid/a91f49e7-ca09-411f-8de0-2a34540c1cc0", "product_variant_id": "a91f49e7-ca09-411f-8de0-2a34540c1cc0", "quantity": 6, "rank": 1, "rating_average": 4.8, "selling_price_paise": 15000, "shelf_life_display": "7 months", "store_id": "e58fff62-7695-44c2-aba0-6bc96074bc64", "store_product_id": "5074b5e2-7513-412a-b72f-9640fae617de", "subcategory_name": "Dates & Seeds", "unit_of_measure": "GRAM", "weight_in_gms": 500, "badges": [ { "name": "Arabian", "type": "ATTRIBUTE" } ], "category_path": [ "Masala, Dry Fruits & More", "Dates & Seeds" ], "image_urls": [ "https://cdn.zeptonow.com/production/tr:w-600,ar-1000-1000,pr-true,f-auto,q-80/cms/product_variant/20fb3683-d720-4443-ae80-7de2eab72344.jpg" ] }, { "name": "BestValue Sugar", "available_quantity": 12, "brand": "BestValue", "brand_id": "a37897a1-f7a9-48e9-bc13-f4bcb96dc6e1", "category_id": "0c2ccf87-e32c-4438-9560-8d9488fc73e0", "category_name": "Masala, Dry Fruits & More", "country_of_origin": "India", "description": null, "discount_amount_paise": 400, "discount_percent": 5, "discounted_selling_price_paise": 7500, "formatted_pack_size": "1 pack (1 kg)", "image_url": "https://cdn.zeptonow.com/production/tr:w-600,ar-1000-1000,pr-true,f-auto,q-80/cms/product_variant/a57d17a3-db5c-4214-8fdd-3347d5637275.png", "in_stock": true, "is_active": true, "is_primary": true, "l3_category_id": "9be046e8-5edb-46ae-82b2-b968bfef4772", "manufacturer_name": "Unbranded", "max_allowed_quantity": 12, "mrp_paise": 7900, "pack_size": 1, "primary_subcategory_id": "b5826992-5cfc-4554-8075-a3f33709ddf2", "product_id": "8b60127a-2054-48ec-8daf-3cc84f3c9a35", "product_type": "SELLABLESKU", "product_url": "https://www.zepto.com/pn/bestvalue-sugar/pvid/a4361659-8925-4b81-9feb-f4645cdfb200", "product_variant_id": "a4361659-8925-4b81-9feb-f4645cdfb200", "quantity": 12, "rank": 2, "rating_average": 4.6, "selling_price_paise": 7500, "shelf_life_display": "24 months", "store_id": "e58fff62-7695-44c2-aba0-6bc96074bc64", "store_product_id": "2b604841-30ed-5867-993c-686ca1861d59", "subcategory_name": "Salt, Sugar & Jaggery", "unit_of_measure": "KILOGRAM", "weight_in_gms": 1000, "category_path": [ "Masala, Dry Fruits & More", "Salt, Sugar & Jaggery" ], "image_urls": [ "https://cdn.zeptonow.com/production/tr:w-600,ar-1000-1000,pr-true,f-auto,q-80/cms/product_variant/a57d17a3-db5c-4214-8fdd-3347d5637275.png" ] } ]}
Fields
| Field | Type | What it is | Example |
|---|---|---|---|
results[].name |
string | Product name returned by Zepto. | Nutraj Arabian Premium Dates |
results[].brand |
string | Brand attached to the product listing. | Nutraj |
results[].product_variant_id |
string | Identity of the exact product pack or variant. | a91f49e7-ca09-411f-8de0-2a34540c1cc0 |
results[].formatted_pack_size |
string | Pack description returned for this variant. | 1 pack (500 g) |
results[].discounted_selling_price_paise |
integer | Displayed offer price in integer paise; divide by 100 for rupees. | 15,000 |
results[].mrp_paise |
integer | MRP in integer paise; divide by 100 for rupees. | 22,500 |
results[].in_stock |
boolean | Explicit stock flag for the selected store, when returned. | true |
results[].available_quantity |
integer | Quantity Zepto reports at this check; keep it apart from pack size and purchase limits. | 6 |
results[].store_id |
string | Store attached to this product or delivery context. | e58fff62-7695-44c2-aba0-6bc96074bc64 |
results[].badges[].name |
string | Arabian | |
results[].product_url |
string | Link to the product on Zepto. | https://www.zepto.com/pn/nutraj-arabian-premium-dates/pvid/a91f… |
results[].is_active |
boolean | Whether the listing is active. | true |
results[].selling_price_paise |
integer | The price you pay, in paise. | 15,000 |
results[].product_id |
string | Zepto's product ID. | 1f594c9c-72e6-4e3e-8a35-eaa7f7540cf0 |
results[].category_name |
string | Parent category name in the local directory. | Masala, Dry Fruits & More |
results[].badges |
array | Labels on the product. | 1 records |
results[].badges[].type |
string | ATTRIBUTE | |
results[].primary_subcategory_id |
string | Zepto's ID for the product's main subcategory. | fd487995-4d2b-4b23-a6ef-831bc118dedb |
results[].is_primary |
boolean | Whether this is the main listing for the product. | true |
results[].image_urls |
array | Links to the product images. | https://cdn.zeptonow.com/production/tr:w-600,ar-1000-1000,pr-tr… |
results[].subcategory_name |
string | The subcategory name. | Dates & Seeds |
results[].image_url |
string | Image URL published with the placement. | https://cdn.zeptonow.com/production/tr:w-600,ar-1000-1000,pr-tr… |
results[].rank |
integer | Position in the list. | 1 |
results[].shelf_life_display |
string | Shelf life as Zepto shows it, such as 4 days. | 7 months |
results[].l3_category_id |
string | Zepto's ID for the product's third-level category. | 06eaff6a-6e4e-44a7-bbbd-f15e7d6bbe72 |
results[].category_id |
string | Parent category identity. | 0c2ccf87-e32c-4438-9560-8d9488fc73e0 |
results[].pack_size |
integer | The pack size, in the unit given. | 500 |
results[].quantity |
integer | Units the store has, as Zepto reports it. | 6 |
results[].brand_id |
string | Zepto's ID for the brand. | 3edf73ec-d705-4850-9149-5eead6c08993 |
results[].description |
string | Suggested public place and its area. | Nutraj Gold Arabian Dates provide best nourishment for muscle d… |
results[].rating_average |
number | Average rating. | 4.8 |
results[].max_allowed_quantity |
integer | The most of this product one order can hold. | 12 |
results[].discount_percent |
integer | The discount, as a percentage. | 33 |
results[].manufacturer_name |
string | Who makes the product. | Vkc Nuts Privated Limited |
results[].fssai_license |
string | The food safety licence number on the listing. | 10016051001876 |
results[].store_product_id |
string | Zepto's ID for the product at this store. | 5074b5e2-7513-412a-b72f-9640fae617de |
results[].category_path |
array | Where the product sits in Zepto's categories. | Masala, Dry Fruits & More, Dates & Seeds |
results[].country_of_origin |
string | Where the product comes from. | India |
results[].weight_in_gms |
integer | Pack weight in grams. | 500 |
results[].product_type |
string | The kind of product record. | SELLABLESKU |
results[].unit_of_measure |
string | The pack's unit, such as GRAM. | GRAM |
results[].discount_amount_paise |
integer | The discount, in paise. | 7500 |
location |
object | The location the results were read for. | 9 fields |
location.eta_minutes |
integer | Zepto's delivery estimate in minutes, when it gives one. | 10 |
location.eta_serviceable |
boolean | Whether Zepto delivers to this location. | true |
location.latitude |
number | Latitude of the resolved or requested delivery point. | 13.0 |
location.longitude |
number | Longitude of the resolved or requested delivery point. | 77.76 |
location.pincode |
string | Pincode retained in the resolved location, when supplied and returned. | 560067 |
location.secondary_store_ids |
array | Backup stores serving the location. | 0059ff6a-7eb0-477a-a7f5-69256f2c444b |
location.serviceable |
boolean | The endpoint’s serviceability signal; location coverage and delivery-estimate availability are separate checks. | true |
location.store_id |
string | Store attached to this product or delivery context. | e58fff62-7695-44c2-aba0-6bc96074bc64 |
location.store_ids |
array | Zepto stores serving the location. | e58fff62-7695-44c2-aba0-6bc96074bc64, 0059ff6a-7eb0-477a-a7f5-6… |
applied_filters |
object | The filters used for these results. | 1 fields |
applied_filters.sort |
string | The sort used, such as relevance. | relevance |
captured_at |
string | When this result was collected. | 2026-10-04T11:59:14.942710379Z |
context |
object | How the location was set for these results. | 2 fields |
context.source |
string | How the location was found. | resolved_location |
context.store_id |
string | Store attached to this product or delivery context. | e58fff62-7695-44c2-aba0-6bc96074bc64 |
count |
integer | Number of products returned for this delivery context. | 20 |
has_more |
boolean | Whether catalog traversal can continue; this does not certify a complete store snapshot. | true |
What to know
- Check whether more results follow, how many rows and pages were read and why the call stopped. Stopping at the page limit can return fewer products, even none, while more remain to read.
- When the call does the sorting, price order covers only the products it read. Unknown prices come last, and equal prices keep a fixed order by variant.
- On responses that carry a next-page value, the page numbers only label the batch; continue with the next-page value rather than jumping by page number.
If a call fails
A failed call costs nothing. The response carries an error.code you can branch on; Errors and retries lists every code and which ones to retry.
Other Zepto endpoints
zepto.adsAdszepto.catalogStore catalogzepto.catalog.multi_locationMulti-location catalogzepto.categoriesCategorieszepto.etaETAzepto.healthHealth checkzepto.locationResolve locationzepto.place.autocompletePlace autocompletezepto.place.detailsPlace detailszepto.place.resolveResolve placezepto.productProductzepto.searchProducts searchzepto.search.facetsSummarize search facetszepto.search.multi_locationMulti-location search
Something missing or unclear? Ask the team that builds the Zepto endpoints.