Blinkit Promotions API
Find offers on the home feed, or by scanning a search or a shelf up to a limit you set, with filters for deal type, discount and price.
- 3 credits per call
- Failed calls are free
- Updated
- blinkit.promotions
{ "count": 5, "has_more": true, "partial": true, "partial_reason": "page_limit", "promotion_type": "all", "scanned_products": 36, "source": "search", "results": [ { "title": "Red Rock Deli Kettle Chips (Basil Thai) No Palm Oil Snacks", "deal_type": "percentage_discount", "deeplink_url": "https://blinkit.com/prn/red-rock-deli-kettle-chips-basil-thai-no-palm-oil-snacks/prid/696525", "discount_amount": 15, "discount_percent": 25, "has_free_item": false, "image_url": "https://cdn.grofers.com/da/cms-assets/cms/product/rc-upload-1776829632782-895.png", "is_b1g1": false, "promotion_text": "25% OFF", "promotion_type": "deals", "rank": 1, "section": "search", "product": { "name": "Red Rock Deli Kettle Chips (Basil Thai) No Palm Oil Snacks", "price": 45, "mrp": 60, "rating": 4.5, "available": true, "brand": "Red Rock Deli", "captured_at": "2026-10-04T13:25:09Z", "category_id": null, "category_name": null, "currency": "INR", "discount_amount": 15, "discount_percent": 25, "discount_text": "25% OFF", "fulfillment": null, "group_id": 2627554, "image_url": "https://cdn.grofers.com/da/cms-assets/cms/product/rc-upload-1776829632782-895.png", "inventory": 7, "is_sold_out": false, "is_sponsored": true, "merchant_id": "40589", "merchant_type": "express", "organic_rank": null, "price_per_100_unit": 77.5862, "price_per_unit": 0.775862, "product_id": 696525, "product_url": "https://blinkit.com/prn/red-rock-deli-kettle-chips-basil-thai-no-palm-oil-snacks/prid/696525", "quantity": 58, "query": "chips", "rank": 1, "rating_count": 6685, "stock_status": "in_stock", "subcategory_id": null, "subcategory_name": null, "unit": "g", "variant": "58 g", "location": { "latitude": 12.911862, "longitude": 77.6445923, "pincode": "560102" }, "images": [ "https://cdn.grofers.com/da/cms-assets/cms/product/rc-upload-1776829632782-895.png", "https://cdn.grofers.com/da/cms-assets/cms/product/rc-upload-1774421103172-167.png" ] } }, { "title": "Bingo Hot & Spicy Korean Style Potato Chips", "deal_type": "percentage_discount", "deeplink_url": "https://blinkit.com/prn/bingo-hot-spicy-korean-style-potato-chips/prid/545858", "discount_amount": 12, "discount_percent": 24, "has_free_item": false, "image_url": "https://cdn.grofers.com/da/cms-assets/cms/product/rc-upload-1777353225068-233.png", "is_b1g1": false, "promotion_text": "24% OFF", "promotion_type": "deals", "rank": 2, "section": "search", "product": { "name": "Bingo Hot & Spicy Korean Style Potato Chips", "price": 38, "mrp": 50, "rating": 4.6, "available": true, "brand": "Bingo", "captured_at": "2026-10-04T13:25:09Z", "category_id": null, "category_name": null, "currency": "INR", "discount_amount": 12, "discount_percent": 24, "discount_text": "24% OFF", "fulfillment": null, "group_id": 813787, "image_url": "https://cdn.grofers.com/da/cms-assets/cms/product/rc-upload-1777353225068-233.png", "inventory": 5, "is_sold_out": false, "is_sponsored": true, "merchant_id": "40589", "merchant_type": "express", "organic_rank": null, "price_per_100_unit": 43.4286, "price_per_unit": 0.434286, "product_id": 545858, "product_url": "https://blinkit.com/prn/bingo-hot-spicy-korean-style-potato-chips/prid/545858", "quantity": 87.5, "query": "chips", "rank": 2, "rating_count": 12569, "stock_status": "in_stock", "subcategory_id": null, "subcategory_name": null, "unit": "g", "variant": "87.5 g", "location": { "latitude": 12.911862, "longitude": 77.6445923, "pincode": "560102" }, "images": [ "https://cdn.grofers.com/da/cms-assets/cms/product/rc-upload-1777353225068-233.png", "https://cdn.grofers.com/da/cms-assets/cms/product/rc-upload-1777353225068-234.png" ] } } ]}
| # | Product | Offer | Deal type | Placement | Found in | Discount % | Saving | Product URL | Image URL | Has free item |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Red Rock Deli Kettle Chips (Basil Thai) No Palm Oil Snacks | 25% OFF | percentage_discount | deals | search | 25 | 15 | https://blinkit.com/prn/red-rock-deli-kettle-chips-basil-thai-n… | https://cdn.grofers.com/da/cms-assets/cms/product/rc-upload-177… | false |
| 2 | Bingo Hot & Spicy Korean Style Potato Chips | 24% OFF | percentage_discount | deals | search | 24 | 12 | https://blinkit.com/prn/bingo-hot-spicy-korean-style-potato-chi… | https://cdn.grofers.com/da/cms-assets/cms/product/rc-upload-177… | false |
| 3 | Bingo Original Style Chilli Potato Chips | 5% OFF | percentage_discount | deals | search | 5 | 1 | https://blinkit.com/prn/bingo-original-style-chilli-potato-chip… | https://cdn.grofers.com/da/cms-assets/cms/product/rc-upload-177… | false |
| 4 | Red Rock Deli Kettle Rotisserie Style Smoked Chicken Potato Chi… | 25% OFF | percentage_discount | deals | search | 25 | 15 | https://blinkit.com/prn/red-rock-deli-kettle-rotisserie-style-s… | https://cdn.grofers.com/da/cms-assets/cms/product/rc-upload-178… | false |
| 5 | Beyond Snack Peri Peri Nendran Banana Chips | 33% OFF | percentage_discount | deals | search | 33.33 | 20 | https://blinkit.com/prn/beyond-snack-peri-peri-nendran-banana-c… | https://cdn.grofers.com/da/cms-assets/cms/product/71bce0be-f774… | false |
What you send
The input
object of the request, with every field the endpoint accepts.
- Send one kind of location: a six-digit pincode, a place name in location_query, or latitude and longitude together, not a mix. A pincode stands for one delivery point, not every address in the area.
- Send query for deals in a search, subcategory_id for deals on a shelf, or neither for the home feed; not both.
- Search and shelf scans read up to max_scan products, 100 by default and up to 500; max_pages also caps them. Discount, price and deal-type filters apply after the scan, so max_scan counts products read, not deals returned. The home feed has no scan limit.
- Use include to request fulfillment details where available.
| Field | Type | Required | What it does | Example |
|---|---|---|---|---|
| latitude | number | one of | Latitude of the delivery address. From -90 to 90. | |
| location_query | string | one of | Free-text Indian location resolved before fetching location-dependent Blinkit data. | |
| longitude | number | one of | Longitude of the delivery address. From -180 to 180. | |
| pincode | string | one of | Six-digit Indian pincode; surrounding whitespace is allowed and trimmed. Do not combine with coordinates. | 560102 |
| query | string | one of | Search for product deals. Cannot be combined with subcategory_id. | chips |
| subcategory_id | string | one of | Scan deals on this shelf. Cannot be combined with query. | |
| deal_type | string | no | Deal classification, or any_promotion for any evidenced deal or explicit offer marker. Allowed values: percentage_discount, amount_discount, b1g1, free_item, flash_offer, any_promotion. |
percentage_discount · amount_discount · b1g1 · … |
| include | array<string> | no | Optional fields or enrichments to include. Allowed values: fulfillment. |
fulfillment |
| limit | integer | no | Maximum promotions returned. From 1 to 100. Default: 20. |
5 |
| max_pages | integer | no | Maximum pages fetched from the selected source. From 1 to 20. Default: 3. |
|
| max_price | integer | no | Return only product promotions whose normalized selling price is at or below this value. At least 0. | |
| max_scan | integer | no | Maximum distinct products inspected in search/shelf mode, across at most max_pages pages. Filters are applied after scanning. No effect on the home feed. From 1 to 500. Default: 100. |
40 |
| min_discount_percent | number | no | Return only promotions with a normalized percentage discount at or above this value. From 0 to 100. | |
| offset | integer | no | Number of deduplicated promotions to skip. From 0 to 10000. Default: 0. |
|
| promotion_type | string | no | Promotion placement type to return. Allowed values: all, deals, banners, flash_offers. Default: all. |
all · deals · banners · flash_offers |
Fields it returns
What each record in the response holds, with the values from the sample above.
| Field | Type | What it is | Example |
|---|---|---|---|
| results[].title | string | Product title as Blinkit lists it. | Red Rock Deli Kettle Chips (Basil Thai) No Palm Oil Snacks |
| results[].promotion_text | string | The offer label exactly as Blinkit shows it. | 25% OFF |
| results[].deal_type | string | How Blinkit’s offer is classified: percentage or amount off, buy one get one, free item or flash offer. | percentage_discount |
| results[].promotion_type | string | Where the offer was found: a deal, a banner or a flash offer. | deals |
| results[].section | string | The source scanned: home feed, search or shelf. | search |
| results[].discount_percent | integer | Discount from MRP, as a percentage. | 25 |
| results[].discount_amount | integer | Rupees off MRP. | 15 |
| results[].is_b1g1 | boolean | Whether the offer is buy one get one. | false |
| results[].has_free_item | boolean | Whether the offer includes a free item. | false |
| results[].deeplink_url | string | Product page on blinkit.com. | https://blinkit.com/prn/red-rock-deli-kettle-chips-basil-thai-n… |
| results[].image_url | string | Blinkit CDN image for this product. | https://cdn.grofers.com/da/cms-assets/cms/product/rc-upload-177… |
| results[].product.name | string | Product title as Blinkit lists it. | Red Rock Deli Kettle Chips (Basil Thai) No Palm Oil Snacks |
| results[].product.price | integer | Displayed selling price in rupees. | 45 |
| results[].product.mrp | integer | Maximum retail price printed on the pack. | 60 |
| results[].product.rating | number | Average shopper rating shown on the listing. | 4.5 |
| results[].product.location | object | The location the result was read for. | 3 fields |
| results[].product | object | The product record. | 37 fields |
| results[].product.merchant_id | string | Store serving this location. | 40589 |
| results[].product.product_url | string | Product page on blinkit.com. | https://blinkit.com/prn/red-rock-deli-kettle-chips-basil-thai-n… |
| results[].product.discount_amount | integer | Rupees off MRP. | 15 |
| results[].product.product_id | integer | Blinkit product id, stable across locations. | 696,525 |
| results[].product.unit | string | The unit of the pack amount, such as ml. | g |
| results[].product.category_name | null | Department name as Blinkit shows it. | null |
| results[].product.subcategory_id | null | Blinkit's ID for the subcategory. | null |
| results[].product.variant | string | Pack size, for example 250 ml. | 58 g |
| results[].product.subcategory_name | null | The subcategory name, such as Bathing Soaps. | null |
| results[].product.image_url | string | Blinkit CDN image for this product. | https://cdn.grofers.com/da/cms-assets/cms/product/rc-upload-177… |
| results[].product.brand | string | Brand name on the listing. | Red Rock Deli |
| results[].product.rank | integer | Position in the returned list. Sponsored placements are flagged separately. | 1 |
| results[].product.available | boolean | Whether the product can be bought at this location now. | true |
| results[].product.images | array | Product images returned. | https://cdn.grofers.com/da/cms-assets/cms/product/rc-upload-177… |
| results[].product.discount_text | string | Discount label exactly as Blinkit words it. | 25% OFF |
| results[].product.category_id | null | Department ID. Pass it to category products or categories. | null |
| results[].product.quantity | integer | The pack amount, in the unit given. | 58 |
| results[].product.currency | string | The currency of the prices, such as INR. | INR |
| results[].product.price_per_100_unit | number | Price per 100 units, such as per 100 g. | 77.59 |
| results[].product.inventory | integer | Units Blinkit reports at this location. | 7 |
| results[].product.merchant_type | string | Fulfilment type, for example express. | express |
| results[].product.stock_status | string | Stock as Blinkit reports it at this delivery point: in stock or out of stock. | in_stock |
| results[].product.captured_at | string | When this result was collected. It is not the time Blinkit last changed the product. | 2026-10-04T13:25:09Z |
| results[].product.discount_percent | integer | Discount from MRP, as a percentage. | 25 |
| results[].product.organic_rank | null | Position among the results that are not sponsored. | null |
| results[].product.fulfillment | null | How the order is delivered, when given. | null |
| results[].product.rating_count | integer | How many ratings the product has. | 6685 |
| results[].product.price_per_unit | number | Price per single unit, such as per gram. | 0.78 |
| results[].product.query | string | The search term that produced this row. | chips |
| results[].product.is_sold_out | boolean | Whether the listing is explicitly sold out. | false |
| results[].product.is_sponsored | boolean | Whether Blinkit marks the listing as sponsored. | true |
| results[].product.group_id | integer | Links pack sizes of the same product. | 2,627,554 |
| results[].rank | integer | Position in the returned list. Sponsored placements are flagged separately. | 1 |
| promotion_type | string | Where the offer was found: a deal, a banner or a flash offer. | all |
| count | integer | How many results this response holds. | 5 |
| has_more | boolean | Whether more results follow. | true |
| partial | boolean | Whether only part of the results came back. | true |
| partial_reason | string | Why only part came back, such as reaching the page limit. | page_limit |
| results | array | The results returned. | 5 records |
| scanned_products | integer | How many products were checked for deals. | 36 |
| source | string | Where the deals came from, such as search. | search |
What this endpoint covers
- Price, MRP and inventory are empty when Blinkit shows no value, and a real zero stays zero. Stock comes as in stock, low stock, out of stock or unknown, apart from the price; when Blinkit's signals are missing or disagree, it says unknown.
- Check whether the scan stopped early, how many products it read and whether more follow. An empty limited scan does not mean there are no matching deals elsewhere.
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": "blinkit.promotions", "input": { "limit": 5, "max_scan": 40, "pincode": "560102", "query": "chips" }}'
import jsonimport osimport requestspayload = json.loads(r'''{ "capability": "blinkit.promotions", "input": { "limit": 5, "max_scan": 40, "pincode": "560102", "query": "chips" }}''')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": "blinkit.promotions", "input": { "limit": 5, "max_scan": 40, "pincode": "560102", "query": "chips" }}),});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, find chips deals of 20% or more on Blinkit at pincodes 560102 (Bengaluru) and 400001 (Mumbai). For each pincode list the product, offer text, price and MRP, and tell me which offers appear in one city but not the other.
More from the Blinkit API
The same data from other platforms
Blinkit Promotions API FAQ
The short answers. The docs have the long ones.
How much does the Blinkit Promotions API cost?
3 credits 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 Blinkit login?
No. It reads public Blinkit data; nothing runs on your account.
Can my AI agent call it?
Yes, over MCP: the agent finds blinkit.promotions, checks its price and runs it with the same credits as the REST API.
Your first Blinkit call is free.
Up to 100 free credits to start, no card needed.