Blinkit Products Search API
See which products appear for a query at a chosen location, with price, MRP, stock, rating, result position and sponsored flags. Filter by brand.
- 1–9 credits per call
- Failed calls are free
- Updated
- blinkit.search
{ "count": 5, "has_more": true, "partial": false, "results": [ { "name": "Country Delight 25 g High Protein Milk", "price": 49, "mrp": 59, "rating": 4.5, "available": true, "brand": "Country Delight", "captured_at": "2026-10-04T13:24:41Z", "category_id": null, "category_name": null, "currency": "INR", "discount_amount": 10, "discount_percent": 16.95, "discount_text": "16% OFF", "fulfillment": null, "group_id": 3199757, "image_url": "https://cdn.grofers.com/da/cms-assets/cms/product/rc-upload-1782724806207-351.png", "inventory": 1, "is_sold_out": false, "is_sponsored": true, "merchant_id": "40589", "merchant_type": "express", "organic_rank": null, "price_per_100_unit": 10.8889, "price_per_unit": 0.108889, "product_id": 735586, "product_url": "https://blinkit.com/prn/country-delight-25-g-high-protein-milk/prid/735586", "quantity": 450, "query": "milk", "rank": 1, "rating_count": 4868, "stock_status": "in_stock", "subcategory_id": null, "subcategory_name": null, "unit": "ml", "variant": "450 ml", "location": { "latitude": 12.911862, "longitude": 77.6445923, "pincode": "560102" }, "images": [ "https://cdn.grofers.com/da/cms-assets/cms/product/rc-upload-1782724806207-351.png", "https://cdn.grofers.com/da/cms-assets/cms/product/rc-upload-1782724806207-352.png" ] }, { "name": "Nandini Toned Milk", "price": 24, "mrp": 24, "rating": 4.5, "available": true, "brand": "Nandini", "captured_at": "2026-10-04T13:24:41Z", "category_id": null, "category_name": null, "currency": "INR", "discount_amount": 0, "discount_percent": 0, "discount_text": null, "fulfillment": null, "group_id": 2167381, "image_url": "https://cdn.grofers.com/da/cms-assets/cms/product/be666ef4-a87d-4ff7-8461-38f3a9682078.png", "inventory": 12, "is_sold_out": false, "is_sponsored": false, "merchant_id": "40589", "merchant_type": "express", "organic_rank": 1, "price_per_100_unit": 4.8, "price_per_unit": 0.048, "product_id": 37083, "product_url": "https://blinkit.com/prn/nandini-toned-milk/prid/37083", "quantity": 500, "query": "milk", "rank": 2, "rating_count": 120000, "stock_status": "in_stock", "subcategory_id": null, "subcategory_name": null, "unit": "ml", "variant": "500 ml", "location": { "latitude": 12.911862, "longitude": 77.6445923, "pincode": "560102" }, "images": [ "https://cdn.grofers.com/da/cms-assets/cms/product/be666ef4-a87d-4ff7-8461-38f3a9682078.png", "https://cdn.grofers.com/da/cms-assets/cms/product/c0fb2f12-6b62-43b4-bd93-b5061a17beae.jpg" ] } ]}
| # | Product | Brand | Product ID | Pack size | Price | MRP | Discount | Stock | Inventory | Sponsored |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Country Delight 25 g High Protein Milk | Country Delight | 735586 | 450 ml | 49 | 59 | 16% OFF | in_stock | 1 | true |
| 2 | Nandini Toned Milk | Nandini | 37083 | 500 ml | 24 | 24 | in_stock | 12 | false | |
| 3 | Nandini Shubham Pasteurised Standardized Toned Milk | Nandini | 309921 | 500 ml | 27 | 27 | in_stock | 12 | false | |
| 4 | Heritage Daily Health Toned Milk | Heritage | 127081 | 500 ml | 28 | 28 | in_stock | 12 | false | |
| 5 | Country Delight 25 g High Protein Chocolate Milk | Country Delight | 793108 | 250 ml | 100 | 129 | 22% OFF | in_stock | 1 | true |
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 a search term that is not empty. Use brand for one brand or brands for several; a brand matches by its exact name, ignoring capital letters. Add fulfillment to include to get each product's serving merchant and delivery estimate.
| Field | Type | Required | What it does | Example |
|---|---|---|---|---|
| query | string | yes | Search query string. | milk |
| 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 |
| brand | string | no | Return only products whose normalized brand matches this value. | |
| brands | array<string> | no | Return products matching any normalized brand in this list. | |
| include | array<string> | no | Optional product enrichments. Allowed values: fulfillment. |
fulfillment |
| limit | integer | no | Maximum number of products to return. From 1 to 100. Default: 20. |
5 |
| max_pages | integer | no | Maximum number of pages to fetch. From 1 to 20. Default: 3. |
|
| offset | integer | no | Number of deduplicated products to skip. From 0 to 10000. Default: 0. |
Fields it returns
What each record in the response holds, with the values from the sample above.
| Field | Type | What it is | Example |
|---|---|---|---|
| results[].name | string | Product title as Blinkit lists it. | Country Delight 25 g High Protein Milk |
| results[].brand | string | Brand name on the listing. | Country Delight |
| results[].product_id | integer | Blinkit product id, stable across locations. | 735,586 |
| results[].variant | string | Pack size, for example 250 ml. | 450 ml |
| results[].price | integer | Displayed selling price in rupees. | 49 |
| results[].mrp | integer | Maximum retail price printed on the pack. | 59 |
| results[].discount_text | string | Discount label exactly as Blinkit words it. | 16% OFF |
| results[].stock_status | string | Stock as Blinkit reports it at this delivery point: in stock or out of stock. | in_stock |
| results[].inventory | integer | Units Blinkit reports at this location. | 1 |
| results[].is_sponsored | boolean | Whether Blinkit marks the listing as sponsored. | true |
| results[].rating | number | Average shopper rating shown on the listing. | 4.5 |
| results[].merchant_id | string | Store serving this location. | 40589 |
| results[].product_url | string | Product page on blinkit.com. | https://blinkit.com/prn/country-delight-25-g-high-protein-milk/… |
| results[].location | object | The location the result was read for. | 3 fields |
| results[].discount_amount | integer | Rupees off MRP. | 10 |
| results[].unit | string | The unit of the pack amount, such as ml. | ml |
| results[].category_name | null | Department name as Blinkit shows it. | null |
| results[].subcategory_id | null | Blinkit's ID for the subcategory. | null |
| results[].subcategory_name | null | The subcategory name, such as Bathing Soaps. | null |
| results[].image_url | string | Blinkit CDN image for this product. | https://cdn.grofers.com/da/cms-assets/cms/product/rc-upload-178… |
| results[].rank | integer | Position in the returned list. Sponsored placements are flagged separately. | 1 |
| results[].available | boolean | Whether the product can be bought at this location now. | true |
| results[].images | array | Product images returned. | https://cdn.grofers.com/da/cms-assets/cms/product/rc-upload-178… |
| results[].category_id | null | Department ID. Pass it to category products or categories. | null |
| results[].quantity | integer | The pack amount, in the unit given. | 450 |
| results[].currency | string | The currency of the prices, such as INR. | INR |
| results[].price_per_100_unit | number | Price per 100 units, such as per 100 g. | 10.89 |
| results[].merchant_type | string | Fulfilment type, for example express. | express |
| results[].captured_at | string | When this result was collected. It is not the time Blinkit last changed the product. | 2026-10-04T13:24:41Z |
| results[].discount_percent | number | Discount from MRP, as a percentage. | 16.95 |
| results[].organic_rank | null | Position among the results that are not sponsored. | null |
| results[].fulfillment | null | How the order is delivered, when given. | null |
| results[].location.latitude | number | Latitude of the delivery point this response is priced for. | 12.91 |
| results[].location.longitude | number | Longitude of the delivery point this response is priced for. | 77.64 |
| results[].location.pincode | string | Pincode the delivery point was resolved from. | 560102 |
| results[].rating_count | integer | How many ratings the product has. | 4868 |
| results[].price_per_unit | number | Price per single unit, such as per gram. | 0.11 |
| results[].query | string | The search term that produced this row. | milk |
| results[].is_sold_out | boolean | Whether the listing is explicitly sold out. | false |
| results[].group_id | integer | Links pack sizes of the same product. | 3,199,757 |
| 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. | false |
| results | array | The results returned. | 5 records |
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.
- Use offset to skip products you already have and the page limit to cap how many pages are read. Check whether the response is marked partial, and why, and whether more results follow, before treating it as complete. A partial response can still hold useful products, and asking for a number does not promise that many matches.
- Search absence is not a stockout. Check the exact product at the same location before concluding it is unavailable. A placement without classification must not be counted as organic.
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.search", "input": { "limit": 5, "pincode": "560102", "query": "milk" }}'
import jsonimport osimport requestspayload = json.loads(r'''{ "capability": "blinkit.search", "input": { "limit": 5, "pincode": "560102", "query": "milk" }}''')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.search", "input": { "limit": 5, "pincode": "560102", "query": "milk" }}),});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, search Blinkit for “toned milk” at pincodes 560102 and 110001, limited to Amul, Nandini, Mother Dairy and Heritage. For each brand and pack size, give price, MRP, discount and price per 100 ml, and flag any competitor cheaper than Amul for the same pack size.
More from the Blinkit API
Blinkit Products Search API FAQ
The short answers. The docs have the long ones.
How much does the Blinkit Products Search API cost?
1–9 credits per successful call, shown before it runs. You buy credits once, and paid credits never expire.
What do I send?
Send query. The input fields below list every option with its type and limits.
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.search, 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.