Blinkit Category Products API
Pull products from an exact shelf, a department’s default shelf or a supported category link, with pack size, price and stock.
- 1–9 credits per call
- Failed calls are free
- Updated
- blinkit.category.products
{ "category_id": null, "count": 5, "has_more": true, "partial": false, "results": [ { "name": "Nandini Toned Milk", "price": 24, "mrp": 24, "rating": 4.5, "available": true, "brand": "Nandini", "captured_at": "2026-10-04T13:24:53Z", "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, "rank": 1, "rating_count": 120000, "stock_status": "in_stock", "subcategory_id": "922", "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" ] }, { "name": "Nandini Shubham Pasteurised Standardized Toned Milk", "price": 27, "mrp": 27, "rating": 4.6, "available": true, "brand": "Nandini", "captured_at": "2026-10-04T13:24:53Z", "category_id": null, "category_name": null, "currency": "INR", "discount_amount": 0, "discount_percent": 0, "discount_text": null, "fulfillment": null, "group_id": 2908874, "image_url": "https://cdn.grofers.com/da/cms-assets/cms/product/fb28768e-6f5a-4047-9ad8-159bbe60959c.png", "inventory": 12, "is_sold_out": false, "is_sponsored": false, "merchant_id": "40589", "merchant_type": "express", "organic_rank": 2, "price_per_100_unit": 5.4, "price_per_unit": 0.054, "product_id": 309921, "product_url": "https://blinkit.com/prn/nandini-shubham-pasteurised-standardized-toned-milk/prid/309921", "quantity": 500, "rank": 2, "rating_count": 140000, "stock_status": "in_stock", "subcategory_id": "922", "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/fb28768e-6f5a-4047-9ad8-159bbe60959c.png", "https://cdn.grofers.com/da/cms-assets/cms/product/03d3311a-97d9-431d-954c-5522ce46b2e8.png" ] } ]}
| # | Product | Brand | Product ID | Pack size | Price | MRP | Stock | Inventory | Rating | Merchant ID |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Nandini Toned Milk | Nandini | 37083 | 500 ml | 24 | 24 | in_stock | 12 | 4.5 | 40589 |
| 2 | Nandini Shubham Pasteurised Standardized Toned Milk | Nandini | 309921 | 500 ml | 27 | 27 | in_stock | 12 | 4.6 | 40589 |
| 3 | Akshayakalpa Organic Cow Milk (Pasteurized) | Akshayakalpa Organic | 478885 | 500 ml | 48 | 48 | in_stock | 12 | 4.6 | 40589 |
| 4 | Amul Lactose Free Milk | Amul | 206314 | 250 ml | 26 | 26 | in_stock | 50 | 4.6 | 40589 |
| 5 | Amul Gold Full Cream Milk | Amul | 12872 | 500 ml | 34 | 34 | in_stock | 12 | 4.7 | 40589 |
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 subcategory_id for an exact shelf, category_url for a Blinkit category link, or category_id for a department's default shelf. subcategory_id wins over category_id. Filter by one brand with brand or several with brands.
- Use include to request fulfillment details where available.
| Field | Type | Required | What it does | Example |
|---|---|---|---|---|
| category_id | integer | one of | Department ID from blinkit.categories, or a legacy category ID. Used to resolve a default shelf only when subcategory_id is omitted. An explicit shelf takes precedence; category_id then preserves caller context without validating its parent. At least 1. | |
| category_url | string | one of | Blinkit /cn category link, with a department ID alone or department/subcategory IDs; HTTPS may be omitted. | |
| 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 |
| subcategory_id | string | one of | Blinkit subcategory ID (the second ID after /cid/; top-deal IDs may end in _td). | 922 |
| brand | string | no | Brand filter. | |
| brands | array<string> | no | Brand filters. | |
| include | array<string> | no | Optional fields or enrichments to include. Allowed values: fulfillment. |
fulfillment |
| limit | integer | no | Maximum products returned. From 1 to 100. Default: 20. |
5 |
| max_pages | integer | no | 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. | Nandini Toned Milk |
| results[].brand | string | Brand name on the listing. | Nandini |
| results[].product_id | integer | Blinkit product id, stable across locations. | 37,083 |
| results[].variant | string | Pack size, for example 250 ml. | 500 ml |
| results[].price | integer | Displayed selling price in rupees. | 24 |
| results[].mrp | integer | Maximum retail price printed on the pack. | 24 |
| results[].discount_text | null | Discount label exactly as Blinkit words it. | null |
| 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. | 12 |
| results[].is_sponsored | boolean | Whether Blinkit marks the listing as sponsored. | false |
| 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/nandini-toned-milk/prid/37083 |
| results[].location | object | The location the result was read for. | 3 fields |
| results[].discount_amount | integer | Rupees off MRP. | 0 |
| 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 | string | Blinkit's ID for the subcategory. | 922 |
| 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/be666ef4-a87d… |
| 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/be666ef4-a87d… |
| results[].category_id | null | Department ID. Pass it to category products or categories. | null |
| results[].quantity | integer | The pack amount, in the unit given. | 500 |
| 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. | 4.8 |
| 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:53Z |
| results[].discount_percent | integer | Discount from MRP, as a percentage. | 0 |
| results[].organic_rank | integer | Position among the results that are not sponsored. | 1 |
| 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. | 120,000 |
| results[].price_per_unit | number | Price per single unit, such as per gram. | 0.05 |
| results[].is_sold_out | boolean | Whether the listing is explicitly sold out. | false |
| results[].group_id | integer | Links pack sizes of the same product. | 2,167,381 |
| category_id | null | Department ID. Pass it to category products or categories. | null |
| 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.
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.category.products", "input": { "limit": 5, "pincode": "560102", "subcategory_id": "922" }}'
import jsonimport osimport requestspayload = json.loads(r'''{ "capability": "blinkit.category.products", "input": { "limit": 5, "pincode": "560102", "subcategory_id": "922" }}''')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.category.products", "input": { "limit": 5, "pincode": "560102", "subcategory_id": "922" }}),});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, list the Amul products on Blinkit’s milk shelf (subcategory 922) at pincodes 560102, 560034 and 110001. Show which Amul SKUs appear in each pincode and which are missing from one or more, with pack size and price.
More from the Blinkit API
The same data from other platforms
Blinkit Category Products API FAQ
The short answers. The docs have the long ones.
How much does the Blinkit Category Products 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?
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.category.products, 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.