JB Hi-Fi AU Scraper - Products, Prices, Stock & Reviews avatar

JB Hi-Fi AU Scraper - Products, Prices, Stock & Reviews

Pricing

from $1.40 / 1,000 product records

Go to Apify Store
JB Hi-Fi AU Scraper - Products, Prices, Stock & Reviews

JB Hi-Fi AU Scraper - Products, Prices, Stock & Reviews

Scrape JB Hi-Fi Australia (jbhifi.com.au) products from the public storefront. Extract product listings, categories, prices, stock availability and customer reviews. Supports product search and category browsing.

Pricing

from $1.40 / 1,000 product records

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

JB Hi-Fi AU Product Scraper

Scrape JB Hi-Fi Australia product search results, categories, prices, availability and reviews from the public storefront. Search by keyword with server-side sorting, facet filters, price bounds and an on-sale filter, or paste product, collection and search links. Every record carries the full card surface: identity, brand, category, price with the GST split, was-price and savings, availability matrix, rating and review counts, image gallery, promotion flags and marketplace seller.

Why This Scraper?

  • One actor instead of three. Rival JB Hi-Fi actors split keyword discovery, product parsing and review parsing across three separate actors, each charging separately for the same data. This actor covers keyword search, product records and reviews in a single run.
  • Card-complete rows. Each result ships 45+ fields straight from the store's own search index: pricing including the GST breakdown, was-price and save amount, delivery and click-and-collect status, store stock counts, release dates, promotion and clearance tags, and the marketplace seller.
  • Real search powers. Facet filters (brand, seller, category, merchandising tags), minimum and maximum price, an on-promotion switch and four server-side sort orders narrow results at the source, not in post.
  • Reviews without a second actor. Enable Fetch reviews and every product row carries its customer reviews as a nested list, with a one-row-per-review output tab for spreadsheets.
  • Built for schedules. Resume past runs, or run incremental mode so a scheduled recurring run pushes only what is new or changed.

Use Cases

  • Who: Price trackers monitoring JB Hi-Fi AU catalogues for drops, promotions and clearance events.
  • Who: Marketplace analytics teams following seller (Sold by) coverage and marketplace share.
  • Who: Affiliate and comparison sites that need clean product records with prices, availability and images.
  • Who: Review aggregators collecting customer reviews joined to their products.

Data You Get

Sample shape: values are illustrative placeholders, not from a live record.

FieldExample
titleApple iPhone 18 Pro 512GB (Burgundy)
brandAPPLE
categoryCOMMUNICATIONS
price2499.0
wasPrice2699.0
saveAmount200.0
taxGst227.18
availabilityInStock
deliveryStatusInStock
clickNCollectStatusInStock
rating4.5
reviewCount8
onPromotiontrue
model"MJRW4X/A"
barcode"195951417325"
keyFeaturesbullet list from the product page's Key Features
graphicAttributesspec-style icon attributes: "Network compatibility: 5G"
condition"As New" (refurb and marketplace products)
offerTiersone entry per marketplace seller: price, availability, shipping
limitPerOrder2
packagedDimensionsheight / width / depth / weight
soldByHobbyco
releaseDate2026-10-18T02:00:00Z
imageUrlhttps://cdn.shopify.com/...
urlhttps://www.jbhifi.com.au/products/apple-iphone-18-pro-512gb-burgundy

How to Use

Pick a mode: search browses the store by keyword with filters, sorting and pagination; urls walks the exact links you paste. Turn on fetchDetails for the long description, key features and specification table; turn on fetchReviews for customer reviews. Use incrementalMode for scheduled recurring runs so only new and changed products are pushed.

Example inputs

Search by keyword (cheapest first):

{
"mode": "search",
"query": "iphone",
"sortBy": "price-asc",
"maxItems": 50
}

Filtered browse (brand, price bounds, on promotion):

{
"mode": "search",
"query": "laptop",
"facets": ["Brand:Apple"],
"minPrice": 1500,
"maxPrice": 4000,
"onPromotionOnly": true,
"fetchDetails": true,
"maxItems": 100
}

Walk pasted links (product, collection, search, bare SKU):

{
"mode": "urls",
"startUrls": [
"https://www.jbhifi.com.au/products/apple-iphone-18-pro-512gb-burgundy",
"https://www.jbhifi.com.au/collections/tvs",
"https://www.jbhifi.com.au/search?query=sony",
"922105"
],
"fetchDetails": true,
"fetchReviews": true,
"maxItems": 100
}

Scheduled incremental monitoring (named baseline):

{
"mode": "search",
"query": "playstation 5",
"incrementalMode": true,
"stateKey": "ps5-monitor",
"maxItems": 200
}

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("abotapi/jbhifi-com-au-product-scraper").call(run_input={
"mode": "search",
"query": "iphone",
"sortBy": "price-asc",
"maxItems": 50,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["title"], item["price"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('abotapi/jbhifi-com-au-product-scraper').call({
mode: 'search',
query: 'iphone',
maxItems: 50,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((i) => [i.title, i.price]));

Input Parameters

ParameterTypeDefaultDescription
modeselectsearchsearch browses by keyword; urls walks pasted links.
querystringiphoneSearch keyword (an omitted keyword falls back to iphone).
categorystring(empty)Restrict results to one collection handle, e.g. tvs.
sortByselectrelevancerelevance, price-asc, price-desc, rating-desc. Server-side sort.
facetslist(empty)Facet tokens that narrow results, e.g. Brand:Apple, Sold by:Hobbyco, tag:Red Hot Deal.
minPricenumber(empty)Only products priced at or above this amount in AUD.
maxPricenumber(empty)Only products priced at or below this amount in AUD.
onPromotionOnlybooleanfalseOnly products the store flags as on promotion.
startUrlslist3 live examplesURLs mode: product, collection and search links, or bare SKUs.
fetchDetailsbooleanfalseRead description, key features, specifications, barcode and options per product.
fetchReviewsbooleanfalseRead customer reviews per product into the nested reviews list.
maxReviewsnumber20Reviews fetched per product when Fetch reviews is on.
maxItemsnumber20The only cap that stops a run early.
maxPagesnumber0Page cap per scope; 0 walks to the scope's natural end and defers to Max items.
resumeFromRunIdstring(empty)Skip products already in a previous run's dataset.
incrementalModebooleanfalseDetect changes against a saved scope baseline.
emitUnchangedbooleanfalseIncremental mode: also push unchanged records with changeType UNCHANGED.
emitExpiredbooleanfalseIncremental mode: push records absent from a complete scan with changeType EXPIRED.
ignoreFieldsForChangeslist(empty)Extra fields whose changes never mark a row UPDATED.
mcpConnectorsselect(empty)Export results to your apps via managed connectors.
notionParentPageUrlstring(empty)Notion connector: parent page URL the results are written under.
maxNotifyListingsnumber50Cap on how many records the connector export writes per run.
stateKeystring(empty)Named baseline for incremental mode; empty derives one from the run scope.
proxyConfigurationobjectstandard poolConnection used for store requests; Residential recommended for long scheduled runs.

Output Example

Sample shape: values are illustrative placeholders, not from a live record.

{
"recordType": "product",
"recordId": "0000000000000",
"sku": "000000",
"handle": "sample-brand-soundbar-300",
"url": "https://www.jbhifi.com.au/products/sample-brand-soundbar-300",
"title": "Sample Brand SoundBar 300",
"brand": "SAMPLE BRAND",
"category": "AUDIO",
"currency": "AUD",
"price": 299.0,
"priceExGst": 271.82,
"taxGst": 27.18,
"availability": "InStock",
"canBuyOnline": true,
"rating": 4.6,
"reviewCount": 12,
"onPromotion": false,
"isMarketplace": false,
"imageUrl": "https://cdn.shopify.com/s/files/1/0024/9803/5810/files/sample.jpg",
"changeType": "NEW",
"firstSeenAt": "2026-10-24T12:00:00Z",
"lastSeenAt": "2026-10-24T12:00:00Z"
}

Caption: one product record as pushed to the default dataset.

The detail output tab adds description, keyFeatures, specs (label and value pairs), barcode and structured options when Fetch product details is on. The reviews tab unwinds the nested review list to one row per review. The changes tab shows changeType, changedFields and baseline timestamps in incremental mode.

Plan Requirement

This actor runs on any Apify paid plan at the standard connection pool. The store serves the standard pool reliably; Residential is recommended for the most reliable long scheduled runs and can be selected under Connection. Runs bill per product record, with optional per-product detail and review enrichment events when their toggles are on.

FAQ

How much does it cost to run?

Each product record bills one dataset-item event; detail and review enrichment bill their own small events only when the corresponding toggles are on and rows are committed. A 20-item card-only run is a fraction of a cent of event charges plus platform compute.

The actor reads the same public product pages and search interfaces a browser loads, without logging in and without bypassing any protection. You remain responsible for complying with the store's terms and applicable law, and for what you do with the data.

Can I schedule recurring runs?

Yes. Use incremental mode with a fixed State key: each scheduled run classifies products as NEW, UPDATED, UNCHANGED or EXPIRED against the saved baseline and pushes only what changed by default. Resume from run id is the alternative when you simply want to skip what a previous run already delivered.

Why does a run finish with 0 items?

A run that finished with a clear status but no records usually means the keyword or filters genuinely matched nothing; try the same keyword on the site. A run that fails with a connection message means the store could not be reached that minute; retries and Residential under Connection usually resolve it.

Can I use the results with AI tools?

Yes. The dataset is plain JSON and works with any Apify MCP connector or vector pipeline; select a connector under the MCP section and the run exports automatically.

Send results into your apps (MCP connectors)

Select one or more managed connectors under the MCP section and the run exports its dataset automatically. The Notion connector writes records under a parent page you choose (capped by the max export input), so a scheduled run can keep a Notion database in step with the store.

πŸ”— More scrapers you might like

Pair this actor with these related scrapers from the same team:

πŸ›’ Officeworks Scraper
Scrape Officeworks products by keyword, category, or URL. Extract names, brands, prices...
πŸ›’ Kmart Scraper
Scrape products and customer reviews from Kmart.com.au. Search by keyword or use...
πŸ›’ Target AU Scraper
Scrape products and customer reviews from Target.com.au. Search by keyword or use...
πŸ›’ Myer Scraper
Scrape Myer (myer.com.au) department-store products: name, brand, price, was-price...
πŸ›’ Chemist Warehouse AU
Scrape chemistwarehouse.com.au products with prices, RRP, discounts, stock, images...
πŸ›’ Costco AU Scraper
Scrape Costco.com.au products by keyword or product, search and category URLs. Extract...

πŸ‘‰ Browse all abotapi scrapers

πŸ’¬ Support

  • 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
  • πŸ› οΈ Need another site, extra fields or a private build? Email contact@abotapi.com.
  • ⭐ Enjoying it? A quick review on the actor page helps other users find it.