Bunnings APIbunnings.com.au ↗
Search Bunnings products, retrieve pricing and stock status, look up store locations, and find in-store aisle/bay positions across Australia.
What is the Bunnings API?
The Bunnings Warehouse Australia API covers 5 endpoints that expose product search, detailed product data, store listings, store details, and in-store aisle/bay locations. The search_products endpoint returns paginated results with pricing, brand, rating, and stock status across the full Bunnings Australia catalogue. The get_product_location endpoint pinpoints exactly which aisle and bay a SKU sits in at a given store, using the store code returned by get_store_detail.
curl -X GET 'https://api.parse.bot/scraper/f23cbafe-8973-4247-b121-01c19c99372f/search_products?page=1&sort=BoostOrder&query=drill' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace bunnings-com-au-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
from parse_apis.bunnings_australia_api import Bunnings, Sort, State
bunnings = Bunnings()
# Search for products by keyword, sorted by price low to high
for listing in bunnings.productlistings.search(query="cordless drill", sort=Sort.PRICE_ASC):
print(listing.name, listing.price, listing.brand, listing.in_stock)
# Navigate from listing to full product details
detail = listing.details()
print(detail.formatted_price, detail.average_rating, detail.number_of_reviews)
# List all stores in Victoria
for store in bunnings.stores.list(state=State.VIC):
print(store.name, store.slug, store.url)
Full-text search over Bunnings Australia product catalog. Returns paginated results with product name, price, brand, rating, and stock status. Paginates via page number. Sort controls result ordering by relevance or price.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination. |
| sort | string | Sort order for results. |
| queryrequired | string | Search keyword (e.g. 'drill', 'paint', 'timber') |
{
"type": "object",
"fields": {
"page": "integer current page number",
"query": "string the search query used",
"products": "array of product objects with name, price, brand, item_number, sku, slug, url, image, rating, rating_count, in_stock",
"total_count": "integer total number of matching products"
},
"sample": {
"data": {
"page": 1,
"query": "drill",
"products": [
{
"sku": "0715241",
"url": "https://www.bunnings.com.au/ryobi-18v-one-drill-driver-starter-kit-r18dd22_p0715241",
"name": "Ryobi 18V ONE+ Drill Driver Starter Kit R18DD22",
"slug": "ryobi-18v-one-drill-driver-starter-kit-r18dd22_p0715241",
"brand": "Ryobi One+",
"image": "https://media.bunnings.com.au/api/public/content/d6600a629b9846ecac51d6cb2513873d?v=c072b07c",
"price": 99.98,
"rating": 4.81,
"in_stock": true,
"item_number": "0715241",
"rating_count": 111
}
],
"total_count": 423
},
"status": "success"
}
}About the Bunnings API
Product Search and Detail
The search_products endpoint accepts a query string (e.g. 'drill', 'timber', 'paint') and returns a paginated list of matching products. Each item in the products array includes name, price, brand, item_number, sku, slug, url, image, rating, rating_count, and in_stock. Pagination is controlled by the page parameter, and results can be sorted by relevance or price using the sort parameter. The total_count field tells you how many products matched.
To go deeper on any item, pass its slug to get_product_detail. The response adds images (an array of objects with url and thumbnail), a categories array with name and code pairs, a description object containing description text and a pointers array, and the currency field (always AUD). The brand_url field gives a path to the brand page for cross-referencing.
Store Lookup and In-Store Location
list_stores accepts an Australian state or territory abbreviation (e.g. 'QLD', 'NSW') and returns every Bunnings location in that state: name, slug, state, and url. From there, get_store_detail takes a state and store_slug and returns the full picture — address, phone, email, latitude, longitude, postcode, map_url, opening hours, services, and the numeric store_code required for the next step.
That store_code feeds into get_product_location, which takes both a store_code and a product_slug and returns locations — an array of objects each with an aisle and bay string — telling you exactly where on the shop floor the product is stocked. The response also echoes back store_name, product_name, and product_slug for easy reference without extra lookups.
The Bunnings API is a managed, monitored endpoint for bunnings.com.au — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when bunnings.com.au changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official bunnings.com.au API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a price comparison tool that searches Bunnings products and surfaces current AUD pricing and stock status.
- Create a store finder widget that lists all Bunnings locations in a given Australian state with addresses and coordinates.
- Power a click-and-collect workflow that checks
in_stockstatus before directing customers to the nearest store. - Automate in-store navigation by chaining
get_store_detailandget_product_locationto show aisle and bay for a scanned product. - Track product ratings and
rating_countover time to monitor shifts in customer sentiment for specific SKUs. - Aggregate category data from
get_product_detailto build a taxonomy of Bunnings product lines for market research. - Generate store-specific inventory reports by iterating
search_productsresults and resolving stock per location.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Bunnings have an official public developer API?+
How do I get a store code to use with get_product_location?+
list_stores with a state abbreviation to get a list of stores and their slugs. Pass one of those slugs along with the state to get_store_detail, which returns a numeric store_code field. That value is the required store_code input for get_product_location.Does the API return stock quantities or just in-stock status?+
search_products returns a boolean in_stock field per product. Exact stock quantities are not exposed. If you need quantity-level inventory data, you can fork this API on Parse and revise it to add that endpoint.Does the API cover Bunnings New Zealand stores?+
What does the description field in get_product_detail contain?+
description object includes a text description of the product and a pointers array, which typically contains bullet-point feature highlights as listed on the product page. Structured specification tables (dimensions, materials, certifications) are not broken out as discrete fields in the current response.