JB Hi-Fi APIjbhifi.com.au ↗
Search JB Hi-Fi's product catalog, check in-store stock availability, retrieve specs, and find store locations via a structured REST API.
What is the JB Hi-Fi API?
The JB Hi-Fi API covers 10 endpoints that expose product search, category browsing, technical specifications, real-time in-store stock availability, and store location lookup across JB Hi-Fi Australia. Use search_products to query the full catalog with paginated hits including SKU, title, price, and availability, or use get_product_stock_availability to check click-and-collect and cash-and-carry options at stores near a given postcode.
curl -X GET 'https://api.parse.bot/scraper/709a9754-11f3-4295-9283-db8416dff81c/search_products?page=0&query=laptop&hits_per_page=5' \ -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 jbhifi-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.
"""JB Hi-Fi Australia: search products, check specs/stock, browse catalog, find stores."""
from parse_apis.jb_hi_fi_australia_api import JBHiFi, Radius, ProductNotFound
client = JBHiFi()
# Search for gaming laptops — limit= caps total items fetched across pages.
for product in client.products.search(query="gaming laptop", limit=3):
print(product.title, product.price, product.vendor)
# Drill into one product's specifications via the instance method.
product = client.products.search(query="macbook", limit=1).first()
if product:
specs = product.specs()
print(specs.sku, specs.key_features, specs.model_number)
# Check stock availability near Sydney CBD.
stock = product.stock(suburb="Sydney", postcode="2000")
print(stock.click_and_collect)
# Browse the catalog: list categories and brands with counts.
catalog = client.catalogs.categories()
print(catalog.categories)
# Browse clearance deals — paginated, capped at 5 items total.
for deal in client.products.clearance(limit=5):
print(deal.title, deal.price, deal.sku)
# Find stores within 50km radius using the Radius enum.
for store in client.stores.search(query="Melbourne", radius=Radius._50000, limit=3):
print(store.store_name, store.phone, store.store_address.suburb)
# Typed error handling: catch ProductNotFound on an invalid SKU.
try:
detail = client.products.get(sku="0000000")
print(detail.title)
except ProductNotFound as exc:
print(f"Product not found: {exc.sku}")
print("exercised: products.search / specs / stock / catalogs.categories / clearance / stores.search / products.get")
Full-text search over JB Hi-Fi's product catalog. Returns paginated results with pricing, availability, facets, and product metadata. Paginates via 0-indexed page number. Each page returns up to hits_per_page items.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number (0-indexed). |
| queryrequired | string | Search keyword. |
| hits_per_page | integer | Number of hits per page. |
{
"type": "object",
"fields": {
"hits": "array of product objects with sku, title, price, handle, vendor, availability, facets, and category hierarchy",
"page": "integer, current page number",
"nbHits": "integer, total number of matching products",
"nbPages": "integer, total number of pages"
},
"sample": {
"data": {
"hits": [
{
"sku": "840480",
"price": 549,
"title": "HP Laptop 14s-dq6002TU 14\" HD laptop (Intel N-Series)[128GB]",
"handle": "hp-laptop-14s-dq6002tu-14-hd-laptop-intel-n-series128gb",
"vendor": "HP",
"category": "Windows laptops",
"availability": {
"overallStatus": "InStock"
}
}
],
"page": 0,
"nbHits": 978,
"nbPages": 28
},
"status": "success"
}
}About the JB Hi-Fi API
Product Catalog and Search
search_products accepts a query string plus optional page and hits_per_page parameters and returns an array of product hits, each containing sku, title, price, handle, availability, and facets. The response also includes nbHits and nbPages for pagination. get_category_products works the same way but filters by a category path — you can pass a shallow name like 'Laptops' or a full hierarchy like 'Computers > Laptops > Windows laptops'. get_clearance_products and get_new_products are dedicated paginated feeds: clearance results include compare_at_price alongside the current price, while new-arrival results include a release_date field.
Product Detail and Specifications
get_product_details accepts a slug, sku, or full url (at least one required) and returns the complete product record: sku, price in AUD, title, vendor, handle, facets (structured technical attributes), and an availability object. For spec-heavy queries, get_product_specs returns a facets object mapping specification categories to value arrays, a key_features array of plain-text feature strings, and a model_number field. Both endpoints require at least one identifier.
Stock Availability and Store Locations
get_product_stock_availability takes a sku plus an optional suburb or postcode and returns three fulfilment objects: delivery, cashAndCarry, and clickAndCollect. The clickAndCollect object includes per-store stock levels and trading hours. get_store_locations supports both coordinate-based lookup (lat, lng, optional radius in metres) and a text query for suburb or store name, returning storeName, storeAddress, phone, tradingHours, and coordinates for each matched store.
Taxonomy Endpoints
get_categories and get_brands take no parameters and return flat mappings of category or brand names to integer product counts. These are useful for building filter UIs or understanding catalog structure before issuing a targeted get_category_products call.
The JB Hi-Fi API is a managed, monitored endpoint for jbhifi.com.au — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when jbhifi.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 jbhifi.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?+
- Track price changes on specific SKUs across the JB Hi-Fi catalog using
get_product_details - Build a store-finder widget using
get_store_locationswith latitude/longitude input - Check same-day click-and-collect availability at the nearest stores before completing an order
- Aggregate clearance deals using
get_clearance_productswithpriceandcompare_at_pricefields - Enumerate all available brands and their product counts via
get_brandsfor a filter sidebar - Retrieve laptop specs including
key_featuresandfacetsto power a product comparison tool - Monitor new product arrivals using
get_new_productswith therelease_datefield
| 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 JB Hi-Fi have an official public developer API?+
What does `get_product_stock_availability` actually return, and do I need both suburb and postcode?+
delivery (delivery fulfilment details), cashAndCarry (in-store purchase options at nearby locations), and clickAndCollect (store-by-store stock levels and trading hours). Only sku is required. suburb and postcode are both optional but at least one improves proximity-based store ranking.Does the API return customer reviews or ratings for products?+
How does pagination work across the product endpoints?+
search_products, get_category_products, get_clearance_products, and get_new_products all use 0-indexed page parameters. Each response includes nbHits (total matching records) and nbPages (total pages), so you can determine iteration bounds before fetching subsequent pages. hits_per_page is accepted by the search and category endpoints to control page size.