Bunnings API & Scraper
The Bunnings API turns bunnings.com.au and bunnings.co.nz into clean JSON, in six actions: search, category/products, product/detail, product/stock, stores and search/suggest.
🤖 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.
Bunnings prices by region, so every priced answer names the store it was priced for; pass a store_id or a postcode to choose it, or leave both out for Bunnings' own default store. Search and category pages return up to 60 products per call with the item number (I/N), title, brand, store price in AUD or NZD, unit price where Bunnings publishes one (per litre, per linear metre), whether a Bunnings Marketplace seller sells it and who, fulfilment options, offer badges, key selling points, rating and review count, variant count, image and category path. They filter by brand, price, rating, click & collect / delivery / in-store, offer badge, Bunnings or Marketplace seller, special order and category, and sort by relevance, price, rating, name or newest. product/detail returns the full record: model number, live store price, instalments, availability, in-store and click & collect stock with the aisle and bay, delivery, rating and review count, description, key features, the spec table, dimensions, weight, images, manuals, breadcrumb, variants, warranty and, for Marketplace listings, every seller's offer with the featured one marked. product/stock checks one item across up to 10 stores or the stores nearest a postcode. stores lists stores near a postcode or coordinates with address, phone, opening hours and services. On 2026-09-15, 128 live calls across all six actions and both countries all returned data, and six products compared against the rendered Bunnings product page matched on title, price, rating, review count, seller type, store and in-store stock (6 of 6). No Bunnings account, no browser - one ReefAPI key and the standard { ok, data, meta, error } envelope.
A Bunnings price belongs to a store, and so does the stock
Bunnings prices by region and counts stock per store. The same timber length costs a different amount in Melbourne and Sydney, and the same drill kit can be in aisle 19 at one store and aisle 21 at another. This engine always returns the store a price or stock figure is for, and lets you choose it.
| Item | Mentone VIC (store 6400) | Alexandria NSW (store 7313) |
|---|---|---|
| Treated pine length, I/N 8030089 | $28.94 | $26.73 |
| Ryobi 18V ONE+ Hammer Drill Power Up kit, I/N 0539753 - price | $199.00 | $199.00 |
| Same kit - in-store stock | 7, aisle 19 bay 2 | 2, aisle 21 bay 1 |
In a same-minute comparison of the first 36 'timber' results at both stores, 21 of the 30 items listed at both were priced differently. Stock counts and prices here are a 2026-09-15 snapshot and change daily.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/bunnings/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "cordless drill"
}
}{
"ok": true,
"meta": {
"api": "bunnings",
"endpoint": "search",
"mode": "live",
"latency_ms": 1355.7,
"record_count": 36,
"bytes": 155838,
"cache_hit": false,
"pagination": {
"page": 1,
"total": 238,
"has_more": true
},
"upstream_requests": 1
},
"data": {
"query": "cordless drill",
"results": [
{
"position": 1,
"item_number": "0049052",
"title": "Ozito PXC 18V Cordless 10mm Compact Drill Driver PXCDK-150 - Kit",
"brand": "Ozito PXC",
"brand_code": null,
"url": "https://www.bunnings.com.au/ozito-pxc-18v-cordless-10mm-compact-drill-driver-pxcdk-150-kit_p0049052",
"price": 49,
"price_source": "search_index",
"currency": "AUD",
"unit_price": null,
"sold_by_unit": "EA",
"is_marketplace": false,
"seller": null,
"fulfilment_options": [
"In-Store",
"Delivery",
"Click & Collect"
],
"is_special_order": false,
"delivery_included": false,
"promotions": null,
"campaign": null,
"key_selling_points": [
"10mm keyless chuck",
"Variable speed trigger",
"LED worklight"
],
"search_index_rating": 4.6,
"search_index_review_count": 88,
"rating_scale": 5,
"variant_count": null,
"colour_count": null,
"new_arrival": false,
"best_seller": false,
"age_restricted": false,
"for_hire": false,
"image": "https://media.bunnings.com.au/api/public/content/5ef465faef574aceaa0fc208d6dd3fe4?v=21458c23",
"thumbnail": "https://media.bunnings.com.au/api/public/content/5ef465faef574aceaa0fc208d6dd3fe4?v=21458c23",
"category_path": [
{
"code": "[trimmed-depth]",
"name": "[trimmed-depth]",
"path": "[trimmed-depth]"
},
{
"code": "[trimmed-depth]",
"name": "[trimmed-depth]",
"path": "[trimmed-depth]"
},
{
"code": "[trimmed-depth]",
"name": "[trimmed-depth]",
"path": "[trimmed-depth]"
}
]
},
{
"position": 2,
"item_number": "6210599",
"title": "Ryobi 18V ONE+ SDS Cordless Rotary Hammer Drill - Tool Only",
"brand": "Ryobi One+",
"brand_code": null,
"url": "https://www.bunnings.com.au/ryobi-18v-one-sds-cordless-rotary-hammer-drill-tool-only_p6210599",
"price": 149,
"price_source": "search_index",
"currency": "AUD",
"unit_price": null,
"sold_by_unit": "EA",
"is_marketplace": false,
"seller": null,
"fulfilment_options": [
"In-Store",
"Delivery",
"Click & Collect"
],
"is_special_order": false,
"delivery_included": false,
"promotions": [
"The Block"
],
"campaign": {
"id": "the-block-always-on",
"starts": "2026-07-01T04:00:00Z",
"ends": "2026-12-31T03:00:00Z",
"onepass_exclusive": false
},
"key_selling_points": [
"SDS Plus chuck for fast drilling and easy bit changes",
"3-mode tool for hammer drilling, chiselling and non-impact rotary drilling",
"Integrated LED light for increased visibility"
],
"search_index_rating": 4.37,
"search_index_review_count": 100,
"rating_scale": 5,
"variant_count": null,
"colour_count": null,
"new_arrival": false,
"best_seller": false,
"age_restricted": false,
"for_hire": false,
"image": "https://media.bunnings.com.au/api/public/content/6fbb23fca1a146888480aecd7df48cd2?v=27f17b8b&b=nlpo",
"thumbnail": "https://media.bunnings.com.au/api/public/content/6fbb23fca1a146888480aecd7df48cd2?v=27f17b8b&b=nlpo",
"category_path": [
{
"code": "[trimmed-depth]",
"name": "[trimmed-depth]",
"path": "[trimmed-depth]"
},
{
"code": "[trimmed-depth]",
"name": "[trimmed-depth]",
"path": "[trimmed-depth]"
},
{
"code": "[trimmed-depth]",
"name": "[trimmed-depth]",
"path": "[trimmed-depth]"
}
]
},
{
"position": 3,
"item_number": "0091352",
"title": "XU1 Blue 18Volt Cordless Drill Driver XLDDK-180 - Kit",
"brand": "XU1 Blue 18Volt",
"brand_code": null,
"url": "https://www.bunnings.com.au/xu1-blue-18volt-cordless-drill-driver-xlddk-180-kit_p0091352",
"price": 29.94,
"price_source": "search_index",
"currency": "AUD",
"unit_price": null,
"sold_by_unit": "EA",
"is_marketplace": false,
"seller": null,
"fulfilment_options": [
"In-Store",
"Delivery",
"Click & Collect"
],
"is_special_order": false,
"delivery_included": false,
"promotions": null,
"campaign": null,
"key_selling_points": [
"Included battery and charger only compatible with XU1 'BLUE 18VOLT' products. Battery and charger not compatible with the following XU1 18V products: XDD-180, XIDK-180 and XHD-180",
"Ideal for light DIY drilling and fastening jobs",
"10mm keyless chuck"
],
"search_index_rating": 4.49,
"search_index_review_count": 113,
"rating_scale": 5,
"variant_count": null,
"colour_count": null,
"new_arrival": false,
"best_seller": false,
"age_restricted": false,
"for_hire": false,
"image": "https://media.bunnings.com.au/api/public/content/118d5ae535b4429eb401e3b00256afe9?v=c4f19961",
"thumbnail": "https://media.bunnings.com.au/api/public/content/118d5ae535b4429eb401e3b00256afe9?v=c4f19961",
"category_path": [
{
"code": "[trimmed-depth]",
"name": "[trimmed-depth]",
"path": "[trimmed-depth]"
},
{
"code": "[trimmed-depth]",
"name": "[trimmed-depth]",
"path": "[trimmed-depth]"
},
{
"code": "[trimmed-depth]",
"name": "[trimmed-depth]",
"path": "[trimmed-depth]"
}
]
}
],
"count": 36,
"total_results": 238,
"fallback_results_dropped": 0,
"page": 1,
"per_page": 36,
"has_more": true,
"duplicate_rows_dropped": 0,
"did_you_mean": null,
"site_redirect": null,
"store": {
"store_id": "6400",
"name": "Mentone",
"pricing_region": "VICMetro",
"chosen_by": "default"
},
"country": "au",
"currency": "AUD",
"sort": "relevance",
"applied_filters": {
"seller": "all"
}
}
}What the Bunnings API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search Bunnings by keyword, priced for one store (prices differ by region). Filters: brand, price range, minimum rating, fulfilment option, offer badge, Bunnings vs Marketplace seller, special order, category. Each row: item number, title, brand, store price, unit price, marketplace seller, fulfilment options, offer badges and campaign, key selling points, the search-index rating and review count, variant count, image, URL and category path. | Pricing teams call search to search Bunnings by keyword, priced for one store (prices differ by region). | query, country, store_id, postcode, page, ... |
| category/products | Browse a Bunnings category (any level, from 'tools' down to 'cordless-drill-kits') with the same store pricing, sorts and filters as search. | Marketplace operators call category/products to get browse a Bunnings category (any level, from 'tools' down to 'cordless-drill-kits') with the s…. | category, country, store_id, postcode, page, ... |
| product/detail | The full Bunnings product record for one store: title, brand, model number, store price, unit price, Afterpay/PayPal instalments, availability (delivery, click & collect and in-store stock with aisle and bay), rating and review count, description, key features, the spec table, dimensions and weight, images, manuals, breadcrumb, variants, offer badges and campaign, warranty, and for Bunnings Marketplace listings every seller's offer with the featured one marked. | Catalog enrichment teams call product/detail to get the full Bunnings product record for one store. | item_number, country, store_id, postcode, url, ... |
| product/stock | In-store stock, click & collect, the aisle and bay, and the store price for one item across several Bunnings stores: pass store_ids, or a postcode / latitude+longitude to check the nearest stores. | Retail analysts call product/stock to get in-store stock, click & collect, the aisle and bay, and the store price for one item across s…. | item_number, country, store_ids, postcode, latitude, ... |
| stores | The Bunnings store finder: stores nearest a postcode or latitude/longitude (20 per page), or one store by id — address, phone, coordinates, distance, opening hours, services, click & collect and drive & collect flags, and the pricing region. | Pricing teams call stores to get the Bunnings store finder. | country, postcode, latitude, longitude, store_id, ... |
| search/suggest | Bunnings' search-box suggestions for a partial keyword. | Marketplace operators call search/suggest to get bunnings' search-box suggestions for a partial keyword.. | query, country, store_id, max_rotations |
Call search from your stack
curl -X POST https://api.reefapi.com/bunnings/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"cordless drill"}'import requests
r = requests.post(
"https://api.reefapi.com/bunnings/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "cordless drill"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/bunnings/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "cordless drill"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.bunnings.search with {"query":"cordless drill"}.Who uses this API and why
- Tradies and estimators check the price and in-store stock of a materials list at the stores near a job site before driving out.
- Price-monitoring teams track Bunnings shelf prices per region for Australia and New Zealand, with unit prices for timber, paint and garden supplies.
- Marketplace sellers see which competing Bunnings Marketplace offers sit on the same product and which one Bunnings features.
- Store-locator and local-commerce apps list the nearest Bunnings with opening hours, services and click & collect.
Questions developers ask before integrating
Which countries and currencies does the Bunnings API cover?
Australia (bunnings.com.au, AUD) and New Zealand (bunnings.co.nz, NZD) - both run on the same Bunnings platform. Set country to au or nz; any other value returns INVALID_PARAM. Every live test ran in both countries.
Why does the price change when I change the store?
Bunnings sets prices per region. Every search row and product record is priced for one store, named in store (store_id, name, pricing_region and how it was chosen). Pass store_id, or a postcode to use the store Bunnings assigns to it; without either you get Bunnings' own default store (Mentone VIC in Australia).
Can I get stock for a specific store, and where the item is in the store?
Yes. product/detail returns in-store and click & collect stock for the chosen store, with the aisle and bay Bunnings publishes. product/stock checks one item across up to 10 store_ids, or the nearest stores to a postcode or coordinates, with each store's price and stock. Special-order products and items a store does not range come back as special_order or not_sold_at_store, never as a stock of 0.
Is the search price the same as the product page price?
Almost always. A search row carries the price Bunnings' own search results show, and that figure occasionally lags the product page: 2 of 84 rows measured on 2026-09-15 (for example $31.31 in search, $29.88 on the product page). Rows say price_source search_index. Pass live_prices true to re-price every row from the live product price; rows then say price_source live and keep search_index_price when the two differed. product/detail always uses the live price.
Does it cover Bunnings Marketplace sellers?
Yes. Marketplace products are flagged is_marketplace with the seller's name. product/detail lists every seller's offer with price, shipping and delivery window, marks the featured offer Bunnings shows first, and returns the cheapest offer price, because the featured offer is not always the only one. seller bunnings or marketplace filters search; by default Australia shows both, like the site, and New Zealand shows Bunnings' own range.
What happens when a search has no matches?
You get ok true with an empty result list. Bunnings' spelling suggestion comes back as did_you_mean (drlil gives drill). When Bunnings answers a nonsense query with loosely related products, those rows are dropped and counted in fallback_results_dropped; include_fallback_results true returns them separately. When Bunnings sends a keyword to a category page (paint, bbq), the matching products are still returned and site_redirect names that category.
What does Bunnings NOT publish?
A was-price or struck-through price (Bunnings runs everyday low pricing, so was_price is always null), member or trade prices, barcodes (gtin is null), and review texts - the average rating and review count are returned, the reviews themselves are not. On 12 verified products weight was published for 8, manuals for 4, a unit price for 1.
What is the Bunnings API?
Bunnings API is a ReefAPI endpoint group for australia and new zealand hardware: store prices, stock by store with aisle and bay, marketplace sellers. It returns live JSON through POST requests under /bunnings/v1.
Is the Bunnings API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Bunnings calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Bunnings login or account?
No login to Bunnings 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 Bunnings 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 Bunnings API use?
Bunnings actions currently cost 1-2 credits per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.
Can I call Bunnings from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call bunnings actions with the same key, credit pool and JSON envelope used by normal REST requests.
Is the Bunnings API a Bunnings scraper?
It is the managed alternative to a DIY Bunnings scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same australia and new zealand hardware: store prices, stock by store with aisle and bay, marketplace sellers back as clean JSON.