# Search products

Search Zepto products by keyword or supported search URL with local product fields, bounded filters, sample-scoped sorting and continuation.

- Platform: [Zepto](https://docs.upscrape.com/docs/platforms/zepto)
- Capability ID: `zepto.search`
- Cost: 1 credit per request
- Maximum runtime: 180 seconds
- Execute endpoint: `POST https://data.upscrape.com/execute`

## Request

Use the exact public capability ID in the shared execute envelope.

```bash
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 '{
  "input": {
    "limit": 5,
    "max_pages": 1,
    "page": 0,
    "pincode": "560067",
    "query": "rice"
  },
  "capability": "zepto.search"
}'
```

## Input

Provide query, or a supported Zepto/Zeptonow /search?query=... URL. If both are supplied, the decoded URL query and explicit query must agree. query is 1 to 500 characters.

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 and legacy page_number are zero-based starting-page controls.

Optional filters are brand_ids, brand_names, min_price_paise, max_price_paise, min_discount and in_stock. Brand lists accept up to 64 values each. sort is relevance, price_asc or price_desc. Price ordering applies only to the bounded matching sample.

For sequential continuation, pass next_cursor back as cursor with the same query, filters, limit and delivery inputs, and omit page fields.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `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. |
| `cursor` | `string` | No | Returned next_cursor; preserve query, filters, limit and delivery inputs; omit page fields. |
| `in_stock` | `boolean` | No | Match observed stock state only; unknown stock never matches. |
| `latitude` | `number` | No | Latitude for location-based store resolution. From -90 to 90. |
| `limit` | `integer` | No | Maximum matching sample size. Sorting is limited to this sample. From 1 to 100. Default: `20`. |
| `longitude` | `number` | No | Longitude for location-based store resolution. From -180 to 180. |
| `max_pages` | `integer` | No | 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`. |
| `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 | Optional zero-based starting page (0-99). Takes precedence over page_number only when supplied. From 0 to 99. |
| `page_number` | `integer` | No | Legacy zero-based page alias (0-99). Prefer page. From 0 to 99. |
| `pincode` | `string` | No | Six-digit Indian pincode. When provided, Upscrape resolves coordinates and the Zepto delivery store automatically. |
| `query` | `string` | No | Search query string. |
| `sort` | `string` | No | 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` | No | Zepto store ID. Defaults to the public Bangalore sample store. |
| `url` | `string` | No | Zepto or zeptonow HTTPS /search?query=... link. Explicit query must agree. |

### Example input

```json
{
  "limit": 5,
  "max_pages": 1,
  "page": 0,
  "pincode": "560067",
  "query": "rice"
}
```

## Response

Successful output is returned in `results[0].data`.

rank is relative to the returned slice. Search visibility is not a stock verdict; check a known product variant directly at the same location when availability matters.

Check has_more, next_cursor, rows_scanned, pages_fetched and stop_reason before treating the sample as complete. stop_reason page_budget means the bounded scan ended before traversal was exhausted.

sort_scope reports upstream or bounded_sample. A price_asc result with bounded_sample is not guaranteed to be globally ascending across all matching Zepto products.

applied_filters and sample_size describe the normalized filter/sort settings and the returned matching sample.

### Illustrative sample output

This example shows one response. Values and optional fields vary with the data available.

```json
{
  "applied_filters": {
    "sort": "relevance"
  },
  "captured_at": "2026-10-01T23:59:41.590294178Z",
  "context": {
    "source": "resolved_location",
    "store_id": "e0e12ce6-3431-4ed8-a74b-b0de26426220"
  },
  "count": 5,
  "has_more": true,
  "location": {
    "eta_minutes": 9,
    "eta_serviceable": true,
    "is_nightly_store": true,
    "latitude": 12.9967012,
    "longitude": 77.758197,
    "pincode": "560067",
    "serviceable": true,
    "store_id": "e0e12ce6-3431-4ed8-a74b-b0de26426220",
    "store_ids": [
      "e0e12ce6-3431-4ed8-a74b-b0de26426220"
    ]
  },
  "location_eta_in_minutes": 9,
  "location_eta_serviceable": true,
  "location_is_nightly_store": true,
  "location_latitude": 12.9967012,
  "location_longitude": 77.758197,
  "location_serviceable": true,
  "location_store_id": "e0e12ce6-3431-4ed8-a74b-b0de26426220",
  "location_store_ids": [
    "e0e12ce6-3431-4ed8-a74b-b0de26426220"
  ],
  "next_cursor": "[redacted:token]",
  "page": 0,
  "page_number": 0,
  "pages_fetched": 1,
  "query": "rice",
  "results": [
    {
      "discount_amount_paise": 2800,
      "unit_of_measure": "KILOGRAM",
      "discounted_selling_price_paise": 7200,
      "product_type": "SELLABLESKU",
      "shelf_life_hours": 6576,
      "weight_in_gms": 1000,
      "country_of_origin": "India",
      "category_path": [
        "Atta, Rice, Oil & Dals"
      ],
      "store_product_id": "dbcd83a4-fafc-5cfa-8bb9-359557ad9821",
      "manufacturer_name": "Unbranded",
      "in_stock": true,
      "discount_percent": 28,
      "max_allowed_quantity": 12,
      "primary_category_id": "2f7190d0-7c40-458b-b450-9a1006db3d95",
      "rating_average": 4.5,
      "mrp_paise": 10000,
      "description": null,
      "name": "BestValue Sona Masoori Raw Rice",
      "brand_id": "a37897a1-f7a9-48e9-bc13-f4bcb96dc6e1",
      "available_quantity": 12,
      "quantity": 43,
      "pack_size": 1,
      "l3_category_id": "3baaf8d0-e429-4b09-95bf-d6fc49a01360",
      "shelf_life_display": "6576 hours",
      "rank": 1,
      "brand": "BestValue",
      "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/1db25844-2d44-44ca-a286-7b5d802d3ca9.png",
      "product_variant_id": "638b44d5-ffcd-49f0-a524-634d48c8ddd6",
      "store_id": "e0e12ce6-3431-4ed8-a74b-b0de26426220",
      "image_urls": [
        "https://cdn.zeptonow.com/production/tr:w-600,ar-1000-1000,pr-true,f-auto,q-80/cms/product_variant/1db25844-2d44-44ca-a286-7b5d802d3ca9.png"
      ],
      "is_primary": true,
      "super_saver": true,
      "category_name": "Atta, Rice, Oil & Dals",
      "product_id": "d6348e25-7990-4ffd-b715-877e0d88eeb0",
      "selling_price_paise": 7200,
      "is_active": true,
      "product_url": "https://www.zepto.com/pn/bestvalue-sona-masoori-raw-rice/pvid/638b44d5-ffcd-49f0-a524-634d48c8ddd6",
      "pricing_campaigns": [
        {
          "price_paise": 7200,
          "type": "SUPER_SAVER"
        }
      ]
    },
    {
      "discount_amount_paise": 1900,
      "unit_of_measure": "KILOGRAM",
      "discounted_selling_price_paise": 10100,
      "product_type": "SELLABLESKU",
      "shelf_life_hours": 17520,
      "weight_in_gms": 1000,
      "country_of_origin": "India",
      "category_path": [
        "Atta, Rice, Oil & Dals",
        "Rice & More"
      ],
      "store_product_id": "47d97454-aadb-40c6-b8ad-a911c4e58713",
      "manufacturer_name": "L T Foods Limited",
      "in_stock": true,
      "ingredients": "Basmati Rice",
      "discount_percent": 15,
      "max_allowed_quantity": 12,
      "primary_category_id": "2f7190d0-7c40-458b-b450-9a1006db3d95",
      "rating_average": 4.6,
      "mrp_paise": 12000,
      "description": "Daawat Rozana Gold is the finest Basmati Rice and has 3/4th length of the basmati grains. It is specially processed for daily cooking across a multitude of regular dishes a perfect fit for every day consumption and promises a sweet taste and rich aroma as each grain is naturally aged.",
      "name": "Daawat Rozana Gold Basmati Rice | Medium Grain",
      "brand_id": "8f0fa49a-9afe-41b5-b9bc-7fdea8af7d15",
      "available_quantity": 3,
      "quantity": 3,
      "pack_size": 1,
      "l3_category_id": "3baaf8d0-e429-4b09-95bf-d6fc49a01360",
      "shelf_life_display": "17520 hours",
      "rank": 2,
      "brand": "Daawat",
      "formatted_pack_size": "1 pack (1 kg)",
      "manufacturer_address": "L T Foods Limited, 43 milestone, GT road, Nahalgarh, Sonipat, Haryana. 131021.",
      "image_url": "https://cdn.zeptonow.com/production/tr:w-600,ar-1000-1000,pr-true,f-auto,q-80/cms/product_variant/c3c224a5-2605-44a5-b671-e7f3a74f547f.jpg",
      "subcategory_name": "Rice & More",
      "product_variant_id": "abed6972-164e-4af0-b674-41260b3829fe",
      "store_id": "e0e12ce6-3431-4ed8-a74b-b0de26426220",
      "image_urls": [
        "https://cdn.zeptonow.com/production/tr:w-600,ar-1000-1000,pr-true,f-auto,q-80/cms/product_variant/c3c224a5-2605-44a5-b671-e7f3a74f547f.jpg"
      ],
      "is_primary": true,
      "primary_subcategory_id": "9798b797-0db0-4b04-b198-31b0a5849318",
      "super_saver": true,
      "badges": [
        {
          "name": "Sponsored",
          "type": "SPONSORED"
        },
        {
          "name": "Medium Grain",
          "type": "ATTRIBUTE"
        }
      ],
      "category_name": "Atta, Rice, Oil & Dals",
      "product_id": "ac15e910-800b-448f-99fc-d2632ab00378",
      "selling_price_paise": 10100,
      "is_active": true,
      "product_url": "https://www.zepto.com/pn/daawat-rozana-gold-basmati-rice-medium-grain/pvid/abed6972-164e-4af0-b674-41260b3829fe",
      "pricing_campaigns": [
        {
          "price_paise": 10100,
          "type": "SUPER_SAVER"
        }
      ]
    },
    {
      "discount_amount_paise": 1500,
      "unit_of_measure": "KILOGRAM",
      "discounted_selling_price_paise": 8500,
      "product_type": "SELLABLESKU",
      "shelf_life_hours": 6600,
      "weight_in_gms": 1000,
      "country_of_origin": "India",
      "category_path": [
        "Atta, Rice, Oil & Dals"
      ],
      "store_product_id": "8365e056-a9a4-4e4e-8ce9-e753bbda954c",
      "manufacturer_name": "Zepto Limited (Formerly known as Zepto Private Limited and Kiranakart Technologies Private Limited)",
      "in_stock": true,
      "discount_percent": 15,
      "max_allowed_quantity": 12,
      "primary_category_id": "2f7190d0-7c40-458b-b450-9a1006db3d95",
      "rating_average": 5,
      "mrp_paise": 10000,
      "description": "Daily Good Sona Masoori Raw Rice is the perfect choice for those who prefer traditional and aromatic rice varieties. Sourced from the best farms, it undergoes a rigorous cleaning process to ensure purity and quality. Whether you're cooking biryani, pulao, or any other dish, Daily Good Sona Masoori Raw Rice guarantees exceptional taste and texture. Elevate your meals with Daily Good Sona Masoori Ra…",
      "name": "Daily Good Sona Masoori Raw Rice",
      "brand_id": "06b3a6c8-9762-46d2-83c5-1623b7d3a508",
      "available_quantity": 12,
      "quantity": 16,
      "pack_size": 1,
      "l3_category_id": "3baaf8d0-e429-4b09-95bf-d6fc49a01360",
      "shelf_life_display": "6600 hours",
      "rank": 3,
      "brand": "Daily Good",
      "formatted_pack_size": "1 pack (1 kg)",
      "manufacturer_address": "Second Floor, 773, Sarjapur Main Road, Kaikondarahalli, Bellandur, Bangalore South, Bangalore Urban, Karnataka - 560103",
      "image_url": "https://cdn.zeptonow.com/production/tr:w-600,ar-1000-1000,pr-true,f-auto,q-80/cms/product_variant/f4bc772f-efab-4784-8765-fd6fca9a974a.jpg",
      "product_variant_id": "bfe98cad-c52c-4c3f-9f99-ee9f0f71118f",
      "store_id": "e0e12ce6-3431-4ed8-a74b-b0de26426220",
      "image_urls": [
        "https://cdn.zeptonow.com/production/tr:w-600,ar-1000-1000,pr-true,f-auto,q-80/cms/product_variant/f4bc772f-efab-4784-8765-fd6fca9a974a.jpg"
      ],
      "is_primary": true,
      "super_saver": true,
      "category_name": "Atta, Rice, Oil & Dals",
      "product_id": "f409fcdb-aa5a-4d03-983a-5d7778e1f463",
      "selling_price_paise": 8500,
      "is_active": true,
      "product_url": "https://www.zepto.com/pn/daily-good-sona-masoori-raw-rice/pvid/bfe98cad-c52c-4c3f-9f99-ee9f0f71118f",
      "pricing_campaigns": [
        {
          "price_paise": 8500,
          "type": "SUPER_SAVER"
        }
      ]
    }
  ],
  "rows_scanned": 27,
  "sample_size": 5,
  "sort_scope": "upstream",
  "stop_reason": "limit"
}
```
### Illustrative output fields

Derived from the sample above for orientation only. These fields are not a fixed response schema.

| Path | Observed type | Example |
| --- | --- | --- |
| `applied_filters` | `object` | 1 fields |
| `applied_filters.sort` | `string` | relevance |
| `captured_at` | `string` | 2026-10-01T23:59:41.590294178Z |
| `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` | 0 |
| `pages_fetched` | `integer` | 1 |
| `query` | `string` | rice |
| `results` | `array` | 3 items |
| `results` | `array` | 3 items |
| `rows_scanned` | `integer` | 27 |
| `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`. Use an `Idempotency-Key` when retrying must not create a duplicate logical job.

## Related documentation

- [Authentication](https://docs.upscrape.com/docs/api/authentication)
- [Jobs and results](https://docs.upscrape.com/docs/api/jobs)
- [Errors and retries](https://docs.upscrape.com/docs/api/errors)
- [Idempotency](https://docs.upscrape.com/docs/api/idempotency)
