Swiggy Instamart data, ready when you are.
A product's price and stock at one dark store, right now, from Swiggy Instamart.
- See the price before every call
- Pay only for records that come back
- No subscription. Your balance never expires
What you can get.
- $0.0009per recordTry it →
Products
Full product detail at one store. Price, MRP, discount, stock count, rating, seller, manufacturer, specifications. By product URL.
- $0.0009per recordTry it →
Search
Search the app as a shopper at that store would. Listings with price, MRP, stock and rank.
- $0.0009per recordTry it →
Category
One category page at one store. Names must be the app's own menu names; a name that is not on the menu is refused and nothing is charged.
What the data looks like.
| productName | brand | price | mrp | discountPct | packSize | inStock | category | rank | rating | ratingCount | productId | variantId | storeId | vendorProductId | images | productUrl | details |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Bananas, Robusta | Fresh | 42 | 55 | 24 | 6 pcs | true | Fruits | 1 | 4.3 | 1,200 | 3188413045 | 3193636747 | 3779976944 | 3920638163 |
| https://www.swiggy.com/instamart/bananas-robusta-1000 |
|
| Eggs, Brown | Farmnest | 96 | 110 | 13 | 6 pcs | true | Eggs & Meat | 2 | 4.3 | 1,200 | 3220125645 | 741222204 | 26123741 | 2960127665 |
| https://www.swiggy.com/instamart/eggs-brown-1001 |
|
| Atta, Whole Wheat | Millhouse | 289 | 330 | 12 | 5 kg | true | Atta & Flours | 3 | 4.3 | 1,200 | 3728331790 | 446898011 | 558882591 | 579101948 |
| https://www.swiggy.com/instamart/atta-whole-wheat-1002 |
|
For developers
API reference.
One endpoint, POST /v1/instamart. Open an operation to see its fields.
Productsproducts
Full product detail at one store. Price, MRP, discount, stock count, rating, seller, manufacturer, specifications. By product URL.
| Field | Type | Meaning |
|---|---|---|
| subjects * | list of string · 1-10 items | Product URLs at that store. |
| store * | object | |
| store.storeId | string | The dark store's own id, when a previous answer or a store URL gave you one. The most exact way to name a store; wins over the others. |
| store.city | string | The city the pincode is in ("Agra"). Helps the pincode resolve to the right store; ignored when storeId or lat/lon are given. |
| store.pincode | string | A 6-digit Indian postal code ("282003"); the nearest serving store is used. Give city too when the pincode is ambiguous. |
| store.lat | number | Latitude in decimal degrees, with lon: the store serving that point. |
| store.lon | number | Longitude in decimal degrees; only read together with lat. |
Response fields, each row of data
| Field | Type |
|---|---|
| productId | string |
| variantId | string |
| storeScope | string |
| storeId | string |
| vendorProductId | string |
| productName | string |
| brand | string |
| price | number |
| mrp | number |
| discountPct | number |
| packSize | string |
| inStock | boolean |
| stockCount | integer |
| rating | number |
| ratingCount | integer |
| category | string |
| rank | integer |
| sponsored | boolean |
| images | list of string |
| productUrl | string |
| description | string |
| countryOfOrigin | string |
| manufacturer | string |
| seller | string |
| specifications | any |
| latitude | number |
| longitude | number |
| details | object |
Every field is present on every row: a value the source had nothing for is null, an empty list is []. details is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is {} when there is nothing more.
curl -X POST https://apiforagents.dev/v1/instamart \
-H "Authorization: Bearer $AFA_KEY" \
-H "Content-Type: application/json" \
-d '{"op":"products","subjects":["https://www.swiggy.com/instamart/item/<item-id>"],"store":{"city":"Delhi","pincode":"110001"}}'Example response rows
[
{
"productName": "Bananas, Robusta",
"brand": "Fresh",
"price": 42,
"mrp": 55,
"discountPct": 24,
"packSize": "6 pcs",
"inStock": true,
"category": "Fruits",
"rank": 1,
"rating": 4.3,
"ratingCount": 1200,
"productId": "3188413045",
"variantId": "3193636747",
"storeId": "3779976944",
"vendorProductId": "3920638163",
"images": [
"https://img.swiggy.com/bananas-robusta.jpg"
],
"productUrl": "https://www.swiggy.com/instamart/bananas-robusta-1000",
"details": {}
},
{
"productName": "Eggs, Brown",
"brand": "Farmnest",
"price": 96,
"mrp": 110,
"discountPct": 13,
"packSize": "6 pcs",
"inStock": true,
"category": "Eggs & Meat",
"rank": 2,
"rating": 4.3,
"ratingCount": 1200,
"productId": "3220125645",
"variantId": "741222204",
"storeId": "26123741",
"vendorProductId": "2960127665",
"images": [
"https://img.swiggy.com/eggs-brown.jpg"
],
"productUrl": "https://www.swiggy.com/instamart/eggs-brown-1001",
"details": {}
}
]An example to show the shape. The rows show the most used fields; a live row carries every field in the table above.
Searchsearch
Search the app as a shopper at that store would. Listings with price, MRP, stock and rank.
| Field | Type | Meaning |
|---|---|---|
| query * | string · ≤300 chars | |
| store * | object | |
| store.storeId | string | The dark store's own id, when a previous answer or a store URL gave you one. The most exact way to name a store; wins over the others. |
| store.city | string | The city the pincode is in ("Agra"). Helps the pincode resolve to the right store; ignored when storeId or lat/lon are given. |
| store.pincode | string | A 6-digit Indian postal code ("282003"); the nearest serving store is used. Give city too when the pincode is ambiguous. |
| store.lat | number | Latitude in decimal degrees, with lon: the store serving that point. |
| store.lon | number | Longitude in decimal degrees; only read together with lat. |
| limit | integer · 1-100 |
Response fields, each row of data
| Field | Type |
|---|---|
| productId | string |
| variantId | string |
| storeScope | string |
| storeId | string |
| vendorProductId | string |
| productName | string |
| brand | string |
| price | number |
| mrp | number |
| discountPct | number |
| packSize | string |
| inStock | boolean |
| stockCount | integer |
| rating | number |
| ratingCount | integer |
| category | string |
| rank | integer |
| sponsored | boolean |
| images | list of string |
| productUrl | string |
| description | string |
| countryOfOrigin | string |
| manufacturer | string |
| seller | string |
| specifications | any |
| latitude | number |
| longitude | number |
| details | object |
Every field is present on every row: a value the source had nothing for is null, an empty list is []. details is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is {} when there is nothing more.
curl -X POST https://apiforagents.dev/v1/instamart \
-H "Authorization: Bearer $AFA_KEY" \
-H "Content-Type: application/json" \
-d '{"op":"search","query":"Maggi noodles","store":{"city":"Bengaluru","pincode":"560001"},"limit":20}'Example response rows
[
{
"productName": "Instant Noodles, Masala",
"brand": "Noodo",
"price": 14,
"mrp": 15,
"discountPct": 7,
"packSize": "70 g",
"inStock": true,
"category": "Instant Food",
"rank": 1,
"rating": 4.3,
"ratingCount": 1200,
"productId": "2927721665",
"variantId": "1659626997",
"storeId": "2249531317",
"vendorProductId": "3505215323",
"images": [
"https://img.swiggy.com/instant-noodles-masala.jpg"
],
"productUrl": "https://www.swiggy.com/instamart/instant-noodles-masala-1000",
"details": {}
},
{
"productName": "Hakka Noodles",
"brand": "Wokit",
"price": 55,
"mrp": 60,
"discountPct": 8,
"packSize": "150 g",
"inStock": true,
"category": "Instant Food",
"rank": 2,
"rating": 4.3,
"ratingCount": 1200,
"productId": "1063549028",
"variantId": "446777371",
"storeId": "3334597586",
"vendorProductId": "305940609",
"images": [
"https://img.swiggy.com/hakka-noodles.jpg"
],
"productUrl": "https://www.swiggy.com/instamart/hakka-noodles-1001",
"details": {}
}
]An example to show the shape. The rows show the most used fields; a live row carries every field in the table above.
Categorycategory
One category page at one store. Names must be the app's own menu names; a name that is not on the menu is refused and nothing is charged.
| Field | Type | Meaning |
|---|---|---|
| category * | string · ≤80 chars | The top-level aisle as the app names it ("Dairy, Bread & Eggs"). |
| subCategory * | string · ≤80 chars | The shelf inside it, again as the app names it ("Milk"). Both are required: the listing is one shelf at one store. |
| store * | object | |
| store.storeId | string | The dark store's own id, when a previous answer or a store URL gave you one. The most exact way to name a store; wins over the others. |
| store.city | string | The city the pincode is in ("Agra"). Helps the pincode resolve to the right store; ignored when storeId or lat/lon are given. |
| store.pincode | string | A 6-digit Indian postal code ("282003"); the nearest serving store is used. Give city too when the pincode is ambiguous. |
| store.lat | number | Latitude in decimal degrees, with lon: the store serving that point. |
| store.lon | number | Longitude in decimal degrees; only read together with lat. |
| limit | integer · 1-100 |
Response fields, each row of data
| Field | Type |
|---|---|
| productId | string |
| variantId | string |
| storeScope | string |
| storeId | string |
| vendorProductId | string |
| productName | string |
| brand | string |
| price | number |
| mrp | number |
| discountPct | number |
| packSize | string |
| inStock | boolean |
| stockCount | integer |
| rating | number |
| ratingCount | integer |
| category | string |
| rank | integer |
| sponsored | boolean |
| images | list of string |
| productUrl | string |
| description | string |
| countryOfOrigin | string |
| manufacturer | string |
| seller | string |
| specifications | any |
| latitude | number |
| longitude | number |
| details | object |
Every field is present on every row: a value the source had nothing for is null, an empty list is []. details is always the last field: everything else the source sent for that row, under our own field names. Its keys depend on the source that answered, so read them defensively; it is {} when there is nothing more.
curl -X POST https://apiforagents.dev/v1/instamart \
-H "Authorization: Bearer $AFA_KEY" \
-H "Content-Type: application/json" \
-d '{"op":"category","category":"Atta, Rice and Dal","subCategory":"Atta","store":{"city":"Delhi","pincode":"110001"},"limit":50}'Example response rows
[
{
"productName": "Orange Juice, No Added Sugar",
"brand": "Squeezy",
"price": 120,
"mrp": 135,
"discountPct": 11,
"packSize": "1 L",
"inStock": true,
"category": "Beverages",
"rank": 1,
"rating": 4.3,
"ratingCount": 1200,
"productId": "2876090726",
"variantId": "4056194219",
"storeId": "3566173443",
"vendorProductId": "3732201011",
"images": [
"https://img.swiggy.com/orange-juice-no-added-sugar.jpg"
],
"productUrl": "https://www.swiggy.com/instamart/orange-juice-no-added-sugar-1000",
"details": {}
},
{
"productName": "Coconut Water",
"brand": "Tenderco",
"price": 60,
"mrp": 65,
"discountPct": 8,
"packSize": "200 ml",
"inStock": true,
"category": "Beverages",
"rank": 2,
"rating": 4.3,
"ratingCount": 1200,
"productId": "1437839382",
"variantId": "1897365453",
"storeId": "3109076870",
"vendorProductId": "4292472465",
"images": [
"https://img.swiggy.com/coconut-water.jpg"
],
"productUrl": "https://www.swiggy.com/instamart/coconut-water-1001",
"details": {}
}
]An example to show the shape. The rows show the most used fields; a live row carries every field in the table above.
Historyhistoryfree
The stored price/stock series of products already held at a store. Free.
| Field | Type | Meaning |
|---|---|---|
| subjects * | list of string · 1-10 items | |
| store * | object | |
| store.storeId | string | The dark store's own id, when a previous answer or a store URL gave you one. The most exact way to name a store; wins over the others. |
| store.city | string | The city the pincode is in ("Agra"). Helps the pincode resolve to the right store; ignored when storeId or lat/lon are given. |
| store.pincode | string | A 6-digit Indian postal code ("282003"); the nearest serving store is used. Give city too when the pincode is ambiguous. |
| store.lat | number | Latitude in decimal degrees, with lon: the store serving that point. |
| store.lon | number | Longitude in decimal degrees; only read together with lat. |
| metric | enum | price · mrp · discount_pct · stock_count · rating · rating_count |
| days | integer · 1-730 |