List category products
List Zepto products from a category, subcategory or supported category URL with bounded filters, logical slices and cursor continuation.
zepto.category.products
/execute
Shared execution endpoint
Input parameters
Use category_id, subcategory_id or a supported Zepto/Zeptonow category URL. Prefer IDs returned by zepto.categories when building a repeatable category workflow.
For location-specific results, provide store_id, a six-digit pincode, or both latitude and longitude. Do not combine pincode with coordinates.
limit accepts 1 to 100 matching products and max_pages accepts 1 to 20 native product pages. page is a zero-based logical slice; page_number is its one-based alias. Numbered requests may consume scan budget while skipping the prefix.
Optional filters are brand_ids, brand_names, min_price_paise, max_price_paise, min_discount and in_stock. sort is relevance, price_asc or price_desc, with price sorting limited to the bounded matching sample.
For sequential traversal, prefer the returned next_cursor. Reuse it with the same category, delivery context, filters, sort and limit, and omit page and page_number.
brand_ids
array<string>
optional
Case-insensitive exact IDs; union with brand_names.
brand_names
array<string>
optional
Trimmed case-insensitive exact names; union with brand_ids.
category_id
string
optional
Zepto category ID to browse.
cursor
string
optional
Use next_cursor unchanged with the same category, delivery context and limit. Omit page and page_number.
in_stock
boolean
optional
Match observed stock state only; unknown stock never matches.
latitude
number
optional
Latitude for location-based store resolution. From -90 to 90.
limit
integer
optional
Maximum matching sample size. Sorting is limited to this sample. From 1 to 100. Default: `20`.
5
longitude
number
optional
Longitude for location-based store resolution. From -180 to 180.
max_pages
integer
optional
Maximum native product pages fetched, including continuation refetches and skipped prefixes. A zero-match slice can still have continuation. Location and category enrichment are separate bounded requests. From 1 to 20. Default: `10`.
1
max_price_paise
integer
optional
Inclusive observed effective price maximum. From 0 to 1000000000.
min_discount
integer
optional
Minimum known discount percentage. From 0 to 100.
min_price_paise
integer
optional
Inclusive observed effective price minimum; unknown prices never match. From 0 to 1000000000.
page
integer
optional
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
optional
Optional one-based logical slice alias (1-100). page_number=2 equals page=1. Cannot be combined with cursor. From 1 to 100.
pincode
string
optional
Six-digit Indian pincode. When provided, Upscrape resolves coordinates and the Zepto delivery store automatically.
560067
sort
string
optional
Price order applies only to the bounded returned matching sample; unknown prices last, ties by variant ID. Allowed values: `relevance`, `price_asc`, `price_desc`.
store_id
string
optional
Zepto store ID. Defaults to the public Bangalore sample store.
subcategory_id
string
optional
Zepto subcategory ID to browse.
09e63c15-e5f7-4712-9ff8-513250b79942
url
string
optional
Direct URL to a Zepto category page.
Response
Successful output is returned in results[0].data.
Check has_more, next_cursor, rows_scanned, pages_fetched and stop_reason. page_budget can return fewer products, or zero matching rows, while continuation work remains.
sort_scope bounded_sample means price ordering applies only to the returned matching sample. Unknown prices sort last and equal prices use variant identity for deterministic ordering.
The page/page_number fields on cursor responses are batch labels; continue with next_cursor rather than treating those labels as random-access offsets.
Illustrative output fields
Values illustrate one response. Read the guidance above for missing values and limits; fields can vary with the requested operation and the data available.
| Path | Observed type | Example |
|---|---|---|
applied_filters |
object |
1 fields |
applied_filters.sort |
string |
relevance |
captured_at |
string |
2026-10-02T00:01:22.602102145Z |
context |
object |
2 fields |
context.source |
string |
resolved_location |
context.store_id |
string |
e0e12ce6-3431-4ed8-a74b-b0de26426220 |
count |
integer |
5 |
has_more |
boolean |
true |
location |
object |
9 fields |
location.eta_minutes |
integer |
9 |
location.eta_serviceable |
boolean |
true |
location.is_nightly_store |
boolean |
true |
location.latitude |
number |
12.9967012 |
location.longitude |
number |
77.758197 |
location.pincode |
string |
560067 |
location.serviceable |
boolean |
true |
location.store_id |
string |
e0e12ce6-3431-4ed8-a74b-b0de26426220 |
location.store_ids |
array |
1 items |
location_eta_in_minutes |
integer |
9 |
location_eta_serviceable |
boolean |
true |
location_is_nightly_store |
boolean |
true |
location_latitude |
number |
12.9967012 |
location_longitude |
number |
77.758197 |
location_serviceable |
boolean |
true |
location_store_id |
string |
e0e12ce6-3431-4ed8-a74b-b0de26426220 |
location_store_ids |
array |
1 items |
location_store_ids |
array |
1 items |
next_cursor |
string |
[redacted:token] |
page |
integer |
0 |
page_number |
integer |
1 |
pages_fetched |
integer |
1 |
results |
array |
3 items |
results |
array |
3 items |
rows_scanned |
integer |
32 |
sample_size |
integer |
5 |
sort_scope |
string |
upstream |
stop_reason |
string |
limit |
Execution behavior
A 200 response completed inline. A 202 response was queued; poll
GET /jobs/:id until the job reaches completed or
failed.
Overview, pricing and sample data for every endpoint: Zepto API