# Zepto Product Scraper (`parsebird/zepto-product-scraper`) Actor

Scrape Zepto product search results: prices, MRP, discounts, stock, ratings, and pack size for any keyword. Export JSON, CSV, or Excel.

- **URL**: https://apify.com/parsebird/zepto-product-scraper.md
- **Developed by:** [ParseBird](https://apify.com/parsebird) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.69 / 1,000 products

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### Zepto Product Scraper

Zepto Product Scraper extracts product listings from [Zepto](https://www.zeptonow.com) — India's quick-commerce grocery app — by search keyword, returning price, stock, rating, and pack-size data for every matching item.

<table><tr>
<td style="border-left:4px solid #1C1917;padding:12px 16px;font-weight:600">
Search any Zepto keyword and get MRP, selling price, discount percent, stock status, rating, pack size, category, and image URL for every product — up to 30+ items per search page, with automatic pagination.
</td>
</tr></table>

##### Copy to your AI assistant

```
Use the Apify actor "parsebird/zepto-product-scraper" via the ApifyClient to scrape Zepto (zeptonow.com) product search results. Example: client.actor("parsebird/zepto-product-scraper").call(run_input={"query": "Chocolate", "results_wanted": 20, "max_pages": 5}). Inputs: query (string, product keyword, default "Chocolate"), startUrl (string, a public Zepto search URL, its query param is used when query is empty and synced when both are set), results_wanted (integer, max unique products to save, default 20), max_pages (integer, max search-result pages to load, default 5), proxyConfiguration (object, optional Apify Proxy config, default { "useApifyProxy": false }). Output fields per product include name, brand, mrp, selling_price, discounted_selling_price, discount_percent, out_of_stock, available_quantity, rating_average, rating_count, formatted_packsize, primary_category_name, image_url, and store_id. Full API spec: https://apify.com/parsebird/zepto-product-scraper/api. Get an API token at https://console.apify.com/settings/integrations.
```

### What does Zepto Product Scraper do?

Zepto Product Scraper is a search scraper for **zeptonow.com**, the Indian quick-commerce grocery platform. Give it a keyword — "chocolate", "protein powder", "shampoo" — and it returns every matching product Zepto's search shows, with pricing and stock data ready for analysis.

- 🔍 Search by keyword or paste a public Zepto search URL directly
- 💰 Captures MRP, selling price, discounted price, and discount percent/amount in INR
- 📦 Pulls pack size, unit of measure, weight, shelf life, and FSSAI license where published
- ⭐ Includes rating average and rating count per product
- 🏷️ Reports brand, manufacturer, country of origin, and category/subcategory
- 📊 Reports stock status (`out_of_stock`), available quantity, and max order quantity
- ⚙️ Runs on Apify's infrastructure with scheduling, API access, and webhook integrations

Since Zepto's storefront resolves to a fixed default delivery location for anonymous visitors, results reflect that location's catalog and pricing rather than a location you supply — see the FAQ below for details.

### Input parameters

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| query | string | No\* | "Chocolate" | Product search term to collect from Zepto. |
| startUrl | string | No\* | "https://www.zeptonow.com/search?query=Chocolate" | Public Zepto search URL. Its `query` parameter is used when `query` is not supplied, and is synced when both are supplied. |
| results\_wanted | integer | No | 20 | Maximum number of unique product records to save (minimum 1). |
| max\_pages | integer | No | 5 | Maximum number of search-result pages to process (minimum 1). |
| proxyConfiguration | object | No | `{ "useApifyProxy": false }` | Optional Apify Proxy configuration for the run. |

\* At least one of `query` or `startUrl` should resolve to a usable search term; if neither is set, the Actor falls back to "Chocolate".

#### Basic keyword search

```json
{
  "query": "Chocolate",
  "results_wanted": 20
}
```

#### Search URL input

```json
{
  "startUrl": "https://www.zeptonow.com/search?query=chips",
  "results_wanted": 30,
  "max_pages": 4
}
```

#### Larger collection with Apify Proxy

```json
{
  "query": "protein powder",
  "results_wanted": 100,
  "max_pages": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

### What data can you extract from Zepto?

| Field | Description |
|-------|-------------|
| name, brand | Product name and brand |
| mrp, selling\_price, discounted\_selling\_price | Prices in INR |
| discount\_percent, discount\_amount | Discount applied to MRP |
| out\_of\_stock, available\_quantity, catalog\_quantity | Stock status and quantity signals |
| rating\_average, rating\_count | Product rating |
| formatted\_packsize, packsize, unit\_of\_measure, weight\_in\_gms | Pack size details |
| primary\_category\_name, primary\_subcategory\_name | Category placement |
| image\_url | Primary product image |
| store\_id, store\_product\_id, product\_id, product\_variant\_id | Zepto's internal identifiers |

See the full field list, with types and descriptions, in the Output example below.

### Output example

```json
{
  "search_query": "Chocolate",
  "page_number": 0,
  "store_product_id": "7c87be5a-5a21-57b3-88b5-745300abe097",
  "product_id": "db014b60-9375-42eb-a941-c1922d537b87",
  "product_variant_id": "ec75d477-2f83-4015-92bd-57dc0f777076",
  "store_id": "b4dc8d65-ed2e-4142-81b6-373982b13500",
  "name": "Cadbury Dairy Milk Chocolate Bar Pack",
  "brand": "Cadbury",
  "country_of_origin": "India",
  "manufacturer_name": "Mondelez India Foods Private Limited",
  "primary_category_name": "Sweet Cravings",
  "formatted_packsize": "1 pc (20.2 g)",
  "unit_of_measure": "GRAM",
  "available_quantity": 16,
  "out_of_stock": false,
  "mrp": 20.0,
  "selling_price": 20.0,
  "discounted_selling_price": 20.0,
  "discount_percent": 0,
  "rating_average": 4.7,
  "rating_count": 322598,
  "image_url": "https://cdn.zeptonow.com/production/cms/product_variant/32c8ffe3-09af-489d-94c5-4342a71adbc1.jpg",
  "shelf_life_hours": 8736,
  "weight_in_gms": 24,
  "product_type": "SELLABLESKU",
  "description": "This product contain:\n  Cadbury Dairy Milk Chocolate Bar 134g",
  "attribute_tags": ["Product Discount"],
  "scraped_at": "2026-09-16T10:53:25.081Z"
}
```

Download results as **JSON, CSV, Excel, HTML, or XML** from the Apify Console, or pull them programmatically through the [Apify API](https://docs.apify.com/api/v2) or [dataset export endpoints](https://docs.apify.com/api/v2#/reference/datasets).

### How to scrape Zepto products

1. Open **Zepto Product Scraper** on the Apify Store and click **Try for free**.
2. Enter a search keyword in **Search query** (e.g. "Chocolate"), or paste a Zepto search URL into **Zepto search URL**.
3. Set **Max results** and **Max search pages** to control how many products are collected.
4. Click **Start** and wait for the run to finish — most runs complete in under a minute.
5. Open the **Dataset** tab to view, filter, and export the scraped products as JSON, CSV, or Excel.

### Use cases

- **Price monitoring** — track MRP, selling price, and discounts for a product category over time.
- **Market research** — compare brand assortment, pack sizes, and pricing across FMCG categories.
- **Competitor analysis** — monitor how competing brands are priced and discounted on Zepto.
- **Catalog auditing** — check stock status and rating trends for a product line.

### How it works

1. The Actor opens a real, stealth-configured browser session and loads the Zepto search page for your keyword.
2. It captures the JSON response from Zepto's internal search API as the page renders results.
3. If more results are needed, it scrolls the page to trigger Zepto's own infinite-scroll pagination, capturing each subsequent page's response.
4. Each unique product is parsed into a flat record and pushed to the dataset until `results_wanted` or `max_pages` is reached.

### How much does it cost to scrape Zepto?

Zepto Product Scraper uses **pay-per-event** pricing — you're charged only for products actually saved to your dataset, not for compute time.

| Event | Price per event | Price per 1,000 |
|-------|------------------|------------------|
| product-scraped | $0.00099 (Free plan) | **$0.99** |

Paid Apify plans unlock lower per-event rates ($0.89/1,000 on Bronze, $0.79/1,000 on Silver, $0.69/1,000 on Gold). A default run collecting 20 products costs about $0.02. Apify's [monthly platform usage credits](https://apify.com/pricing) apply to this Actor like any other.

### Input / Output

The input form exposes **Search query**, **Zepto search URL**, **Max results**, **Max search pages**, and **Proxy configuration** — see [Input parameters](#input-parameters) above for full details. Every run's output is available from the **Dataset** tab and via the [Apify API](https://docs.apify.com/api/v2) in JSON, CSV, Excel, HTML, or XML.

### Using the API

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")

run = client.actor("parsebird/zepto-product-scraper").call(run_input={
    "query": "Chocolate",
    "results_wanted": 20,
    "max_pages": 5,
})

for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item["name"], item["selling_price"])
```

#### JavaScript

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });

const run = await client.actor('parsebird/zepto-product-scraper').call({
    query: 'Chocolate',
    results_wanted: 20,
    max_pages: 5,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

Schedule recurring runs, trigger the Actor from a webhook, or connect it to Zapier/Make through Apify's [integrations](https://apify.com/integrations).

### Is it legal to scrape Zepto?

Scraping publicly available data — like product names and prices shown on a public search results page — is generally considered legal, and courts have repeatedly upheld this for public web pages. This Actor only collects data that Zepto already displays to any visitor. You are responsible for how you use the collected data and for complying with Zepto's terms of service and applicable law in your jurisdiction. See Apify's [blog post on the legality of web scraping](https://blog.apify.com/is-web-scraping-legal/) for more detail.

### Related Actors

- [Walmart Product Scraper](https://apify.com/parsebird/walmart-product-scraper) — product data from Walmart.com
- [Target Product Scraper](https://apify.com/parsebird/target-product-scraper) — product data from Target.com
- [Trendyol Scraper](https://apify.com/parsebird/trendyol-product-scraper) — products, reviews, and Q\&A from Trendyol
- [JustDial Business Scraper](https://apify.com/parsebird/justdial-business-scraper) — Indian business listings from JustDial

### FAQ

**Does this Actor need a proxy to work?**
No. Zepto resolves anonymous visitors to a fixed default delivery location, so the Actor runs without Apify Proxy by default. You can still enable `proxyConfiguration` if you run at high volume.

**Can I set a specific delivery location or pincode?**
Not currently. Zepto's search results reflect its default guest-session location rather than a location you supply as input.

**Why do some fields come back empty or null?**
Zepto doesn't publish every field for every product — `fssai_license`, `how_to_use`, and `primary_subcategory_name`, for example, are only present when Zepto includes them for that SKU.

**How many products can one search return?**
Each search page holds up to ~30 products. Increase `max_pages` to collect more, up to the number of pages Zepto's search actually has for that keyword.

**Can I schedule recurring runs?**
Yes. Use Apify's [Scheduler](https://docs.apify.com/platform/schedules) to run this Actor daily, weekly, or at any interval you choose.

**Does this Actor have an API?**
Yes — every Apify Actor is automatically available as an API. See the [API tab](https://apify.com/parsebird/zepto-product-scraper/api) for the full spec, or use the Python/JavaScript examples above.

**Something not working?**
Report it on the Actor's **Issues** tab in Apify Console — Zepto occasionally changes its site, and prompt reports help keep this Actor maintained.

# Changelog

This Actor's version history is a separate document: https://apify.com/parsebird/zepto-product-scraper/changelog.md

# Actor input Schema

## `query` (type: `string`):

Product keyword to search for on Zepto, e.g. 'Chocolate' or 'protein powder'.

## `startUrl` (type: `string`):

A public Zepto search URL, e.g. https://www.zeptonow.com/search?query=chips. Its `query` parameter is used when Search query is empty.

## `results_wanted` (type: `integer`):

Maximum number of unique products to save.

## `max_pages` (type: `integer`):

Maximum number of Zepto search-result pages to load. Each page holds up to ~30 products.

## `proxyConfiguration` (type: `object`):

Zepto works without a proxy by default. Enable Apify Proxy if you run this Actor at high volume or see blocked requests.

## Actor input object example

```json
{
  "query": "Chocolate",
  "startUrl": "https://www.zeptonow.com/search?query=Chocolate",
  "results_wanted": 20,
  "max_pages": 5,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "query": "Chocolate",
    "startUrl": "https://www.zeptonow.com/search?query=Chocolate",
    "results_wanted": 20,
    "max_pages": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("parsebird/zepto-product-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "query": "Chocolate",
    "startUrl": "https://www.zeptonow.com/search?query=Chocolate",
    "results_wanted": 20,
    "max_pages": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("parsebird/zepto-product-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "query": "Chocolate",
  "startUrl": "https://www.zeptonow.com/search?query=Chocolate",
  "results_wanted": 20,
  "max_pages": 5
}' |
apify call parsebird/zepto-product-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parsebird/zepto-product-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/q5hteaiM52MXrqLvz/builds/rgueIRHP92PbEgxQK/openapi.json
