BigBasket API & Scraper
bigbasket's catalogue, prices and stock depend on the delivery PIN code, so every call takes one 6-digit PIN code and answers for it.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
`search` takes a search term, a category or a brand and returns the products bigbasket shows there: selling price, MRP, discount percent and the site's own discount label, price per 100 g, 100 ml or piece, pack size and the price of every other pack size, in-stock state, brand, category path, EAN, rating and review counts, with filters for brand, price band, discount band and minimum rating and six sort orders. `product` takes the product_id from any search row and returns the full product page: about the product, ingredients, nutritional facts, storage, manufacturer and other information, breadcrumb, images and tags, plus every pack size with its own price and stock. `pincode` tells you whether bigbasket delivers to a PIN code, which services are live there and the next delivery promise, for example "Get it in 10 mins". `categories` returns the category tree.
What a bigbasket field actually contains
Fields that read differently from how they look. Every row was measured against live bigbasket responses on 2026-10-14.
| Field | What it holds |
|---|---|
| pincode | The 6-digit PIN code the answer is for. bigbasket has no PIN-free shelf: "atta" matched 188 products at 400020 (Mumbai), 158 at 560001 (Bengaluru) and 245 at 110001 (Delhi), and the same 5 kg Aashirvaad atta cost 263.5 rupees at 400020 against 273.59 on bigbasket's default Bengaluru shelf. |
| price, mrp, discount_percent | Selling price and maximum retail price in rupees; discount_percent is computed from the two. On 82 of 82 rows where bigbasket prints "NN% OFF" the computed figure agreed within one point. The search row and the product page agreed on price, MRP, unit price, stock and pack size for 10 of 10 products. |
| unit_price, unit_price_consistent | bigbasket's own price per 100 g, 100 ml or piece, as published. unit_price_consistent checks it against price divided by pack size: 127 of 144 rows agreed, 3 did not (one 5 kg pack carried 6,560 per 100 g instead of 6.56), 14 could not be checked. The published value is never altered. |
| ean, ean_code_raw | bigbasket's barcode field often holds the product's own id instead of a barcode (71 of 144 rows). ean is filled only with a valid GTIN (62 of 144 rows); the raw value is kept in ean_code_raw. |
| in_stock, button | Whether the product can be added at that PIN code. Out-of-stock products still show their shelf price and the button "Notify Me"; 100 of 643 rows read were out of stock. |
| other_packs | The other pack sizes of the same product with their own price, MRP, unit price and stock, for example 1 kg, 2 kg, 5 kg and 10 kg of one atta. |
| substituted_results | true when bigbasket found nothing for the search term and filled the page with its own suggestions; those rows do not match the query. |
Once the PIN code is fixed the answer does not depend on where the request comes from: five separate reads in the same minute returned the same 12 products with identical prices, MRPs, stock and store.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/bigbasket/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "atta",
"pincode": "400020"
}
}{
"ok": true,
"meta": {
"api": "bigbasket",
"endpoint": "search",
"mode": "live",
"latency_ms": 5414,
"record_count": 24,
"bytes": 513963,
"cache_hit": false,
"pincode": "400020",
"total": 189,
"upstream_requests": 6,
"charged_credits": 3,
"version": "0.1.0",
"request_id": "adb214cd00ce4824",
"queue_ms": 2.9,
"fetched_at": "2026-10-14T18:57:22.686Z"
},
"data": {
"pincode": "400020",
"query": "atta",
"category": null,
"brand": null,
"sort": "relevance",
"serviceable": true,
"place": "Marine Lines, Mumbai, Maharashtra 400020, India",
"location": {
"city_id": "4"
},
"total": 189,
"page": 1,
"last_page": 10,
"has_next": true,
"returned": 24,
"dropped_rows": 0,
"substituted_results": false,
"results": [
{
"product_id": "40132196",
"name": "Whole Wheat Chakki Flour/Atta",
"brand": "Patanjali",
"brand_slug": "patanjali",
"pack_size": "5 kg",
"pack_description": null,
"url": "https://www.bigbasket.com/pd/40132196/patanjali-traditional-whole-wheat-chakki-atta-with-bran-5-kg/",
"image": "https://www.bbassets.com/media/uploads/p/l/40132196_7-patanjali-traditional-whole-wheat-chakki-atta-with-bran.jpg",
"image_count": 10,
"ean": null,
"ean_code_raw": null,
"price": 246.45,
"mrp": 265,
"discount_percent": 7,
"discount_text": "₹19 OFF",
"currency": "INR",
"unit_price": {
"amount": 4.92,
"per": "100g"
},
"unit_price_consistent": true,
"offer_text": null,
"offer_type": null,
"in_stock": true,
"availability_code": "001",
"not_for_sale": false,
"button": "Add",
"eta": null,
"is_best_value": false,
"category": {
"top": "Foodgrains, Oil & Masala",
"top_slug": "foodgrains-oil-masala",
"mid": "Atta, Flours & Sooji",
"mid_slug": "atta-flours-sooji",
"leaf": "Atta Whole Wheat",
"leaf_id": 1448
},
"rating": {
"average": 4.1,
"ratings": 1256,
"reviews": 36
},
"food_type": "veg",
"other_packs": [],
"store_id": 10674,
"rank": 1
},
{
"product_id": "126903",
"name": "Atta/Ghau Peeth - Whole Wheat",
"brand": "Aashirvaad",
"brand_slug": "aashirvaad",
"pack_size": "5 kg",
"pack_description": null,
"url": "https://www.bigbasket.com/pd/126903/aashirvaad-atta-whole-wheat-5-kg-pouch/",
"image": "https://www.bbassets.com/media/uploads/p/l/126903_12-aashirvaad-atta-whole-wheat.jpg",
"image_count": 10,
"ean": "8909081005541",
"ean_code_raw": "8909081005541",
"price": 263.5,
"mrp": 314,
"discount_percent": 16,
"discount_text": "16% OFF",
"currency": "INR",
"unit_price": {
"amount": 5.27,
"per": "100g"
},
"unit_price_consistent": true,
"offer_text": "Har Din Sasta!",
"offer_type": "discount",
"in_stock": true,
"availability_code": "001",
"not_for_sale": false,
"button": "Add",
"eta": null,
"is_best_value": false,
"category": {
"top": "Foodgrains, Oil & Masala",
"top_slug": "foodgrains-oil-masala",
"mid": "Atta, Flours & Sooji",
"mid_slug": "atta-flours-sooji",
"leaf": "Atta Whole Wheat",
"leaf_id": 1448
},
"rating": {
"average": 4.1,
"ratings": 76774,
"reviews": 1096
},
"food_type": "veg",
"other_packs": [
{
"product_id": "[trimmed-depth]",
"pack_size": "[trimmed-depth]",
"url": "[trimmed-depth]",
"price": "[trimmed-depth]",
"mrp": "[trimmed-depth]",
"discount_percent": "[trimmed-depth]",
"discount_text": "[trimmed-depth]",
"unit_price": "[trimmed-depth]",
"unit_price_consistent": "[trimmed-depth]",
"in_stock": "[trimmed-depth]",
"availability_code": "[trimmed-depth]",
"is_best_value": "[trimmed-depth]"
},
{
"product_id": "[trimmed-depth]",
"pack_size": "[trimmed-depth]",
"url": "[trimmed-depth]",
"price": "[trimmed-depth]",
"mrp": "[trimmed-depth]",
"discount_percent": "[trimmed-depth]",
"discount_text": "[trimmed-depth]",
"unit_price": "[trimmed-depth]",
"unit_price_consistent": "[trimmed-depth]",
"in_stock": "[trimmed-depth]",
"availability_code": "[trimmed-depth]",
"is_best_value": "[trimmed-depth]"
},
{
"product_id": "[trimmed-depth]",
"pack_size": "[trimmed-depth]",
"url": "[trimmed-depth]",
"price": "[trimmed-depth]",
"mrp": "[trimmed-depth]",
"discount_percent": "[trimmed-depth]",
"discount_text": "[trimmed-depth]",
"unit_price": "[trimmed-depth]",
"unit_price_consistent": "[trimmed-depth]",
"in_stock": "[trimmed-depth]",
"availability_code": "[trimmed-depth]",
"is_best_value": "[trimmed-depth]"
}
],
"store_id": 10674,
"rank": 2
},
{
"product_id": "40099240",
"name": "Chakki-Fresh-Wheat-Atta/Ghau Peeth - Fortified",
"brand": "bb Royal",
"brand_slug": "bb-royal",
"pack_size": "5 kg",
"pack_description": null,
"url": "https://www.bigbasket.com/pd/40099240/bb-royal-chakki-fresh-wheat-atta-fortified-5-kg/",
"image": "https://www.bbassets.com/media/uploads/p/l/40099240_10-bb-royal-chakki-fresh-wheat-atta-fortified.jpg",
"image_count": 9,
"ean": "8904256702188",
"ean_code_raw": "8904256702188",
"price": 179,
"mrp": 290,
"discount_percent": 38,
"discount_text": "38% OFF",
"currency": "INR",
"unit_price": {
"amount": 3.58,
"per": "100g"
},
"unit_price_consistent": true,
"offer_text": "Har Din Sasta!",
"offer_type": "discount",
"in_stock": true,
"availability_code": "001",
"not_for_sale": false,
"button": "Add",
"eta": null,
"is_best_value": true,
"category": {
"top": "Foodgrains, Oil & Masala",
"top_slug": "foodgrains-oil-masala",
"mid": "Atta, Flours & Sooji",
"mid_slug": "atta-flours-sooji",
"leaf": "Atta Whole Wheat",
"leaf_id": 1448
},
"rating": {
"average": 4,
"ratings": 42739,
"reviews": 1066
},
"food_type": "veg",
"other_packs": [
{
"product_id": "[trimmed-depth]",
"pack_size": "[trimmed-depth]",
"url": "[trimmed-depth]",
"price": "[trimmed-depth]",
"mrp": "[trimmed-depth]",
"discount_percent": "[trimmed-depth]",
"discount_text": "[trimmed-depth]",
"unit_price": "[trimmed-depth]",
"unit_price_consistent": "[trimmed-depth]",
"in_stock": "[trimmed-depth]",
"availability_code": "[trimmed-depth]",
"is_best_value": "[trimmed-depth]"
},
{
"product_id": "[trimmed-depth]",
"pack_size": "[trimmed-depth]",
"url": "[trimmed-depth]",
"price": "[trimmed-depth]",
"mrp": "[trimmed-depth]",
"discount_percent": "[trimmed-depth]",
"discount_text": "[trimmed-depth]",
"unit_price": "[trimmed-depth]",
"unit_price_consistent": "[trimmed-depth]",
"in_stock": "[trimmed-depth]",
"availability_code": "[trimmed-depth]",
"is_best_value": "[trimmed-depth]"
}
],
"store_id": 10674,
"rank": 3
}
]
}
}What the BigBasket API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search bigbasket AS SEEN FROM ONE PIN CODE (a search term, or a category / brand page): products with selling price, MRP, discount, unit price (per 100 g / per litre...), pack size and the price of every other pack size, stock state, brand, category path, EAN, rating and the shelf offer text. Filters: brand, price band, discount band, minimum rating; six sort orders. `pincode` and one of `query` / `category` / `brand` are required. | Pricing teams call search to search bigbasket AS SEEN FROM ONE PIN CODE (a search term, or a category / brand page). | pincode, query, category, brand, price_band, ... |
| product | One bigbasket product at one PIN code, by the `product_id` a search row returns (or its bigbasket.com/pd/ URL): price, MRP, discount, unit price, stock, pack size, EAN, brand, breadcrumb, rating and review counts, images, the product page sections (about, ingredients, nutritional facts, storage, other info incl. manufacturer and best-before), tags — plus EVERY pack size of the product with its own price and stock. | Marketplace operators call product to get one bigbasket product at one PIN code, by the `product_id` a search row. | pincode, product_id |
| pincode | Whether bigbasket delivers to a PIN code and how: the place it resolves to, the serviceability of each bigbasket service (bb-b2c slot delivery, bbnow quick delivery...), and for the located visitor the stores (service areas) with their delivery promise ('Get it in 10 mins') and the next available slot. | Catalog enrichment teams call pincode to get whether bigbasket delivers to a PIN code and how. | pincode |
| categories | bigbasket's category tree (top level > sub > leaf) with slugs for search.category. | Retail analysts call categories to get bigbasket's category tree (top level > sub > leaf) with slugs for search.category.. | none |
Call search from your stack
curl -X POST https://api.reefapi.com/bigbasket/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"atta","pincode":"400020"}'import requests
r = requests.post(
"https://api.reefapi.com/bigbasket/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "atta",
"pincode": "400020"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/bigbasket/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "atta",
"pincode": "400020"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.bigbasket.search with {"query":"atta","pincode":"400020"}.Who uses this API and why
- Track grocery prices, MRP and discounts across Indian cities by PIN code.
- Compare price per 100 g or per litre across brands and pack sizes.
- Monitor which products are out of stock at a given PIN code.
- Check whether bigbasket and its quick delivery serve a PIN code, and the promised delivery time.
- Build a grocery product database with brand, pack size, category path, ingredients and nutrition.
Questions developers ask before integrating
Do I need a bigbasket account?
No. Everything is read logged out: the prices, stock and delivery promise are the ones bigbasket shows any visitor who entered that PIN code. Member-only prices are not shown to a logged-out visitor, so they are not returned.
Why is pincode required?
Because bigbasket's catalogue, prices and stock change with the PIN code. Without one bigbasket shows a default Bengaluru shelf; the API never does that silently and echoes the place the PIN code resolved to.
Which filters are there, and do they work?
Each was checked against the unfiltered count in the same run at 400020. "atta" (188 products): brand aashirvaad 13, price band 51 to 100 rupees 102, discount over 25 percent 39, rating 4 and up 108. "biscuits" (406): brand britannia 55, price band 179, discount 111, rating 253.
Is the price band exact?
No. bigbasket matches the price band against the whole product family, so a product whose shown pack is outside the band can appear because another pack size is inside it. Each answer counts those rows in rows_outside_price_filter.
How many products per page?
bigbasket decides: 20 per search page at the Mumbai and Delhi stores we read, 40 on its default shelf, 48 on category and brand pages. Use page up to last_page; a page after the last returns no rows.
What happens with a misspelled search term?
Sometimes bigbasket answers with its own suggestions instead of an empty page. The answer then says substituted_results: true and names what bigbasket substituted, so those rows are never mistaken for matches.
Do you return reviews?
Rating average, rating count and review count, yes. Review text, no: it is not on the pages bigbasket serves to a logged-out visitor.
How fresh is the data?
Every call reads bigbasket live; nothing is cached. A search took 5.3 seconds at the median and a product 5.5 seconds in our first run.
What is the BigBasket API?
BigBasket API is a ReefAPI endpoint group for grocery prices, mrp, discounts, unit prices, pack sizes and stock from bigbasket for any indian pin code. It returns live JSON through POST requests under /bigbasket/v1.
Is the BigBasket API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. BigBasket calls use the same shared credit balance as every other ReefAPI engine.
Do I need a BigBasket login or account?
No login to BigBasket is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the BigBasket data?
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the BigBasket API use?
BigBasket actions currently cost 3 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call BigBasket from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call bigbasket actions with the same key, credit pool and JSON envelope used by normal REST requests.