Zepto Ads API
Choose the home, search or category page to inspect its banners and product placements, with their position and text where provided.
- 1 credit per call
- Failed calls are free
- Updated
- zepto.ads
{ "captured_at": "2026-10-04T12:00:58.441364585Z", "count": 5, "location_eta_in_minutes": 5, "location_eta_serviceable": true, "location_latitude": 12.96902, "location_longitude": 77.75395, "location_serviceable": true, "location_store_id": "b4dc8d65-ed2e-4142-81b6-373982b13500", "location": { "eta_minutes": 5, "eta_serviceable": true, "latitude": 12.96902, "longitude": 77.75395, "serviceable": true, "store_id": "b4dc8d65-ed2e-4142-81b6-373982b13500", "secondary_store_ids": [ "0059ff6a-7eb0-477a-a7f5-69256f2c444b" ], "store_ids": [ "b4dc8d65-ed2e-4142-81b6-373982b13500", "0059ff6a-7eb0-477a-a7f5-69256f2c444b" ] }, "context": { "source": "resolved_location", "store_id": "b4dc8d65-ed2e-4142-81b6-373982b13500" }, "location_secondary_store_ids": [ "0059ff6a-7eb0-477a-a7f5-69256f2c444b" ], "location_store_ids": [ "b4dc8d65-ed2e-4142-81b6-373982b13500", "0059ff6a-7eb0-477a-a7f5-69256f2c444b" ], "results": [ { "element_id": "422c1cbe-a5b5-4118-9c6b-f7c6251fced3", "element_name": "Everyday lowest price", "element_position_inside_widget": 1, "element_type": "BANNER", "image_url": "https://cdn.zeptonow.com/production/tr:w-600,ar-1000-1000,pr-true,f-auto,q-80/inventory/banner/601180a6-b82f-499b-a24f-c079904e9f53.png", "page_type": "HOME", "placement_type": "banner", "position_in_list": 1, "rank": 1, "widget_id": "100000357", "widget_name": "WEB_PAAN_OLSX", "widget_position": 80, "widget_type": "BANNER_GRID" }, { "deeplink_url": "https://www.zepto.com/cn/paan-corner/cigarettes/cid/cd50825e-baf8-47fe-9abc-ed9556122a9a/scid/5bcbee47-7c83-4279-80f0-7ecc068496df", "element_id": "bad6912d-f8a8-4fa6-9bd7-b5cc63a521ef", "element_name": "Paan", "element_position_inside_widget": 2, "element_type": "BANNER", "image_url": "https://cdn.zeptonow.com/production/tr:w-600,ar-1000-1000,pr-true,f-auto,q-80/inventory/banner/85b9411e-fa0e-427f-96ec-97fd4d13aaed.png", "page_type": "HOME", "placement_type": "banner", "position_in_list": 2, "rank": 2, "widget_id": "100000357", "widget_name": "WEB_PAAN_OLSX", "widget_position": 80, "widget_type": "BANNER_GRID" } ]}
| # | Placement | Type | Page | List position | Widget | Image | Brand | Campaign name | Discount amount paise | Discount percent |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Everyday lowest price | banner | HOME | 1 | WEB_PAAN_OLSX | https://cdn.zeptonow.com/production/tr:w-600,ar-1000-1000,pr-tr… | ||||
| 2 | Paan | banner | HOME | 2 | WEB_PAAN_OLSX | https://cdn.zeptonow.com/production/tr:w-600,ar-1000-1000,pr-tr… | ||||
| 3 | sponsored_product | HOME | 1 | Laundry_Care_HORIZONTAL_LIST | https://cdn.zeptonow.com/production/tr:w-600,ar-1000-1000,pr-tr… | Surf Excel | bachat | 13,400 | 17 | |
| 4 | sponsored_product | HOME | 2 | Laundry_Care_HORIZONTAL_LIST | https://cdn.zeptonow.com/production/tr:w-600,ar-1000-1000,pr-tr… | Beco | bachat | 5100 | 14 | |
| 5 | sponsored_product | HOME | 3 | Laundry_Care_HORIZONTAL_LIST | https://cdn.zeptonow.com/production/tr:w-600,ar-1000-1000,pr-tr… | Surf Excel | bachat | 2100 | 5 |
What you send
The input
object of the request, with every field the endpoint accepts.
- Choose HOME (the default), SEARCH or CATEGORY. For SEARCH, send the search term or a search page link; for CATEGORY, send the category or subcategory.
- For ads at one place, send a store ID, a six-digit pincode, or latitude and longitude together. Ask for 1 to 100 placements.
| Field | Type | Required | What it does | Example |
|---|---|---|---|---|
| latitude | number | one of | Latitude for location-based store resolution. From -90 to 90. | 12.96902 |
| longitude | number | one of | Longitude for location-based store resolution. From -180 to 180. | 77.75395 |
| pincode | string | one of | Six-digit Indian pincode. When provided, Upscrape resolves coordinates and the Zepto delivery store automatically. | |
| category_id | string | no | Category ID (relevant when page_type is CATEGORY). | |
| limit | integer | no | Maximum number of ad placements to return. From 1 to 100. Default: 20. |
5 |
| page_type | string | no | Type of page to fetch ads for. Allowed values: HOME, SEARCH, CATEGORY. Default: HOME. |
HOME |
| query | string | no | Search query (relevant when page_type is SEARCH). | |
| store_id | string | no | Zepto store ID. Defaults to the public Bangalore sample store. | |
| subcategory_id | string | no | Subcategory ID (relevant when page_type is CATEGORY). | |
| url | string | no | Direct URL to a Zepto page for ad context. |
Fields it returns
What each record in the response holds, with the values from the sample above.
| Field | Type | What it is | Example |
|---|---|---|---|
| results[].element_name | string | Name or text returned for the merchandising placement. | Everyday lowest price |
| results[].placement_type | string | Returned placement class, such as banner. | banner |
| results[].page_type | string | The page asked about, such as HOME, SEARCH or CATEGORY. | HOME |
| results[].position_in_list | integer | Position within the returned placement list. | 1 |
| results[].widget_name | string | Name of the containing merchandising widget. | WEB_PAAN_OLSX |
| results[].image_url | string | Image URL published with the placement. | https://cdn.zeptonow.com/production/tr:w-600,ar-1000-1000,pr-tr… |
| results[].element_id | string | Zepto's ID for the ad. | 422c1cbe-a5b5-4118-9c6b-f7c6251fced3 |
| results[].element_position_inside_widget | integer | The ad's position inside its section. | 1 |
| results[].element_type | string | The kind of ad, such as BANNER. | BANNER |
| results[].rank | integer | Position in the list. | 1 |
| results[].widget_id | string | Zepto's ID for the section the ad sits in. | 100000357 |
| results[].widget_position | integer | The section's position on the page. | 80 |
| results[].widget_type | string | The kind of section, such as BANNER_GRID. | BANNER_GRID |
| location | object | The location the results were read for. | 8 fields |
| location.eta_minutes | integer | Zepto's delivery estimate in minutes, when it gives one. | 5 |
| location.eta_serviceable | boolean | Whether Zepto delivers to this location. | true |
| location.latitude | number | Latitude of the resolved or requested delivery point. | 12.97 |
| location.longitude | number | Longitude of the resolved or requested delivery point. | 77.75 |
| 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. | b4dc8d65-ed2e-4142-81b6-373982b13500 |
| location.store_ids | array | Zepto stores serving the location. | b4dc8d65-ed2e-4142-81b6-373982b13500, 0059ff6a-7eb0-477a-a7f5-6… |
| captured_at | string | When this result was collected. | 2026-10-04T12:00:58.441364585Z |
| 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. | b4dc8d65-ed2e-4142-81b6-373982b13500 |
| count | integer | Number of products returned for this delivery context. | 5 |
| location_eta_in_minutes | integer | Estimated delivery time at the location, in minutes. | 5 |
| location_eta_serviceable | boolean | Whether Zepto delivers to the location. | true |
| location_latitude | number | Latitude of the location. | 12.97 |
| location_longitude | number | Longitude of the location. | 77.75 |
| location_secondary_store_ids | array | Backup stores serving the location. | 0059ff6a-7eb0-477a-a7f5-69256f2c444b |
| location_serviceable | boolean | Whether the resolved location is served by Zepto. | true |
| location_store_id | string | The serving store found by the location lookup or the access check. | b4dc8d65-ed2e-4142-81b6-373982b13500 |
| location_store_ids | array | Zepto stores serving the location. | b4dc8d65-ed2e-4142-81b6-373982b13500, 0059ff6a-7eb0-477a-a7f5-6… |
| results | array | The results returned. | 5 records |
What this endpoint covers
- Each placement can carry the product, page, widget, rank, sponsorship, campaign and tracking details, as Zepto showed them for that request.
- Campaign names and placement IDs do not prove a campaign is unique, how long it runs, or that you have seen every ad.
- A SEARCH page that Zepto shows as empty can return zero results. Do not assume the same for HOME or CATEGORY: an empty answer there needs its own check.
Call it from your code, or ask your agent
Set UPSCRAPE_API_KEY to your key and copy a working request.
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.ads", "input": { "latitude": 12.96902, "limit": 5, "longitude": 77.75395, "page_type": "HOME" }}'
import jsonimport osimport requestspayload = json.loads(r'''{ "capability": "zepto.ads", "input": { "latitude": 12.96902, "limit": 5, "longitude": 77.75395, "page_type": "HOME" }}''')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.ads", "input": { "latitude": 12.96902, "limit": 5, "longitude": 77.75395, "page_type": "HOME" }}),});if (!response.ok) { throw new Error(`Upscrape request failed: ${response.status}`);}console.log(JSON.stringify(await response.json(), null, 2));
https://data.upscrape.com/mcp
Using Upscrape, show five Zepto HOME placements at latitude 12.96902 and longitude 77.75395. List their text, type and page position for a retail media review. Keep banners separate from product offers and explain that placements alone cannot show campaign performance.
More from the Zepto API
- Zepto Products Search API1 credit
- Zepto Product API1 credit
- Zepto Categories API1 credit
- Zepto Category Products API1 credit
- Zepto Store Catalog API1 credit
- Zepto Multi-location Search API1 credit
- Zepto Multi-location Catalog API1 credit
- Zepto Resolve Location API1 credit
- Zepto ETA API1 credit
- Zepto Place Autocomplete API1 credit
- Zepto Place Details API1 credit
- Zepto Resolve Place API1 credit
- Zepto Summarize Search Facets API1 credit
- Zepto Health Check API1 credit
The same data from other platforms
Zepto Ads API FAQ
The short answers. The docs have the long ones.
How much does the Zepto Ads API cost?
1 credit per successful call, shown before it runs. You buy credits once, and paid credits never expire.
What do I send?
Every input is optional; the input fields below list what each one does.
Do I need a Zepto login?
No. It reads public Zepto data; nothing runs on your account.
Can my AI agent call it?
Yes, over MCP: the agent finds zepto.ads, checks its price and runs it with the same credits as the REST API.
Your first Zepto call is free.
Up to 100 free credits to start, no card needed.