Skip to documentation
Browse documentation

List category products

List Zepto products from a category, subcategory or supported category URL with bounded filters, logical slices and cursor continuation.

Capability ID zepto.category.products
Maximum runtime 180 seconds
View raw

POST /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`.

Example 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`.

Example 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.

Example 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.

Example 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`.

Available values relevanceprice_ascprice_desc
store_id string optional

Zepto store ID. Defaults to the public Bangalore sample store.

subcategory_id string optional

Zepto subcategory ID to browse.

Example 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 sample The example response is shown in the response panel.

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.

PathObserved typeExample
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