Bunnings Scraper at a glance
Bunnings Scraper is a ready-to-run Apify actor from abotapi for collecting ecommerce data. Its documented output includes name, brand, price, was price and save %, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.10 per 1,000 results on the Apify Free plan and from $1.50 on paid plans, with smaller per-run or optional feature charges listed on Apify.
- Runs on
- Apify cloud: console, API, schedules and integrations
- Data type
- Ecommerce, Automation, Developer Tools
- Region
- Oceania
- Pricing
- $2.10 per 1,000 results (Free plan), from $1.50 on paid plans
- Output
- Documented below · JSON, CSV, Excel
- Inputs
- 23 options
- Run success
- 98.1% of completed public runs in the last 30 days
Scrape bunnings.com.au products with full specifications, price, brand, stock, image gallery, warranty, customer reviews, rating stats and Q&A. Search by keyword with brand, price, rating and sort filters, or paste product / category / search URLs.
What Bunnings Scraper can do
- Two ways to collect. Search by keyword with brand, price, rating and product-offer filters, or paste any product, category or search URL directly.
- Full product detail. Specifications, warranty text, dimensions, payment options and the complete image gallery, fetched by default (a pasted product URL always fetches these regardless of the setting).
- Customer reviews at scale. Review text, star rating, author, date and aggregate rating statistics, with a cap you control per product.
- Built for schedules. Incremental mode returns only new and changed products on recurring runs, and a product that disappears can be marked EXPIRED once a run has scanned the whole tracked search.
- Resume without paying twice. Continue one interrupted run from a previous run or dataset ID, and the actor also recovers automatically after a platform restart.
- Honest pricing signals. Was-price and discount fields are never invented. They stay empty unless the site itself publishes a real reduced price.
Choose what to collect
These inputs let you configure Bunnings Scraper - Products, Reviews & Q&A. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
modestring · required | Choose 'search' to use keywords and filters, or 'url' to scrape specific product, category or search URLs you paste below. |
queriesarray | One or more keywords to search, for example 'cordless drill' or 'exterior paint'. Each keyword is searched separately. |
urlsarray | Product, category or search URLs to scrape, for example https://www.bunnings.com.au/products/tools/power-tools/drills or https://www.bunnings.com.au/search/products?q=hammer. Multiple URLs supported. Links are processed in order until Max products is reached, so with the default of 20 only the first link or two are scraped; raise Max products to reach the others. The default lists one example of each supported link shape. |
brandstring | Optional. Keep only products whose brand contains this text, for example 'Ryobi', 'Makita' or 'Ozito'. |
sortBystring | Ordering applied to the collected results. |
minPriceinteger | Optional. Only keep products priced at or above this amount (AUD). |
maxPriceinteger | Optional. Only keep products priced at or below this amount (AUD). |
Show 16 more inputs
| Input | What it controls |
|---|---|
minRatinginteger | Optional. Only keep products with an average customer rating at or above this value (1 to 5). |
productOffersstring | Optional. Keep only products carrying one of the site's own 'Product offers' tags. 'Redemption offers' are bonus / gift-with-purchase promotions; 'New arrivals' are newly listed products. Note: Bunnings runs everyday-low pricing, so it publishes no strike-through 'was' price and has no half-price / clearance section; the was-price fields stay empty. Leave as 'Any' to include all products. |
fetchDetailsboolean | Open each product page for full specifications, warranty, dimensions, image gallery, brand detail and price breakdown. Adds one request per product. |
fetchReviewsboolean | Also collect customer reviews for each product (review text, star rating, author, date) plus aggregate rating statistics. Adds requests per product. |
maxReviewsPerProductinteger | Cap on reviews collected per product when 'Fetch customer reviews' is on. Use 0 for all available reviews, up to 1000 per product. |
maxItemsinteger | Maximum number of products to return across the whole run. Use 0 for unlimited. |
maxPagesinteger | Optional safety cap on result pages walked per keyword / URL. A pasted URL that names its own start page counts from that page (maxPages=2 on a page=5 URL walks pages 5-6). A resumed run counts from page 1 of the original run, so the cap is cumulative across resumes, not reset per run. Use 0 to walk every page (the run still stops automatically once Max products is reached, or once a page repeats or the store's own result total is reached). |
resumeFromRunIdstring | Optional. ID of a previous run of this actor (or a dataset ID). Products already in that dataset are skipped, so this run returns only NEW products (a delta). Combine both runs' datasets for the full set. Max products then counts only the new products. For recurring daily monitoring of the same search, use Incremental mode below instead. |
incrementalModeboolean | Turn this on for daily or recurring monitoring. The first run returns all matching products as NEW. Later runs normally return only NEW, UPDATED, and REAPPEARED products. UPDATED is decided by comparing each product's own catalogue data (price, was-price and savings, specials and offer types, promotion/campaign, stock and fulfilment, name, brand, images, categories) against the saved copy, and the changed fields are listed in changedFields. Customer rating, rating count, reviews and review statistics, and the scrapedAt timestamp are excluded from the comparison (they are still returned), so a new review alone never makes a product UPDATED. Use "Ignore fields when detecting changes" to exclude more. Turn on "Emit unchanged" or "Emit expired" only when you also want those products returned (and billed). State is kept separately for each distinct search/filter setup (or by State key below). Off by default. |
stateKeystring | Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from your search/filter settings - different searches then never mix state with each other. |
emitUnchangedboolean | Off by default. Turn on to also return products that have not changed since the last run, marked UNCHANGED. This returns - and bills - extra rows you already have, so leave it off unless you specifically want the full snapshot every run. |
emitExpiredboolean | Off by default. Turn on to also return products that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search - not when Max products or Max pages capped it, or when Resume was used. This returns - and bills - extra synthetic rows. |
ignoreFieldsForChangesarray | Optional, incremental mode only. Field names that must NOT count as a change, for example imageUrl or thumbnailUrl. A bare name matches that field at any depth (startDate matches inside promotion); a dotted path such as promotion.startDate matches one exact place. The fields are still returned in the output, they are only left out of change detection and changedFields. Rating, rating count, reviews, review statistics and scrapedAt are always excluded. |
mcpConnectorsarray | Optionally send results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize one under Apify, Settings, API & Integrations, then select it here. Notion gets a rich page-per-item export; other connectors get a best-effort write/digest. Leave empty to skip; never changes the dataset output. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com). |
notionParentPageUrlstring | URL or id of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Cap on items written to each connector per run. Does not affect the dataset. |
Fields in the output
The documented dataset includes the fields below. Availability can depend on the source page and selected mode.
nameNamebrandBrandpricePricewasPriceWas pricesavingsPercentSave %isOnSpecialOn specialofferTypesOfferscurrencyCurrencypriceTypePrice typeratingRatingratingCountRatingscodeCodeShow 27 more fields
imageUrlImage (image)urlURL (link)changeTypeChange typechangedFieldsChanged fieldsfirstSeenAtFirst seenlastSeenAtLast seenskuSKUsummarySummarydescriptionDescriptionspecificationsSpecificationsimagesImageswarrantyWarrantystockStatusStockavailableForDeliveryDeliveryinStorePickupPickupcategoryPathCategoryweightWeightscrapedAtScrapedreviews.ratingRatingreviews.titleReview titlereviews.bodyReviewreviews.authorAuthorreviews.dateDatereviews.recommendedRecommendedreviews.helpfulVotesHelpfulreviews.notHelpfulVotesNot helpfulreviews.verifiedPurchaserVerifiedExample output
An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.
{
"code": "0299323",
"itemNumber": "0299323",
"name": "XU1 18V Brushless Drill Driver Kit",
"title": "Ozito XU1 18V Brushless Drill Driver Kit",
"brand": "Ozito",
"brandUrl": "https://www.bunnings.com.au/our-range/tools/ozito",
"url": "https://www.bunnings.com.au/xu1-18v-brushless-drill-driver-kit_p0299323",
"price": 49.98,
"currency": "AUD",
"formattedPrice": "$49.98",
"priceType": "FROM",
"wasPrice": null,
"savingsAmount": null,
"savingsPercent": null,
"isOnSpecial": false,
"offerTypes": [
"Redemption Offer"
],
"isRedemptionOffer": true,
"promotion": {
"campaign": "AU_TOOLS_FREE_DELIVERY",
"startDate": "2026-09-01",
"endDate": "2026-10-01",
"onePassExclusive": false
},
"hasPromotion": true,
"rating": 4.5,
"ratingCount": 120,
"reviews": [
{
"rating": 5,
"title": "Great value",
"author": "SampleUser",
"date": "2026-08-15T00:00:00",
"body": "Sample review text.",
"recommended": true,
"helpfulVotes": 4,
"notHelpfulVotes": 0,
"verifiedPurchaser": true
}
],
"reviewStats": {
"averageRating": 4.5,
"reviewCount": 120,
"ratingDistribution": {
"1": 2,
"2": 3,
"3": 10,
"4": 25,
"5": 80
}
},
"specifications": {
"Voltage": "18V",
"Battery included": "Yes"
},
"features": [
{
"name": "Voltage",
"code": "voltage",
"value": "18V"
}
],
"warranty": "3 year warranty on tool, 1 year on battery.",
"weight": "1.6kg",
"dimension": "35cm x 25cm x 10cm",
"images": [
"https://www.bunnings.com.au/images/sample-1.jpg",
"https://www.bunnings.com.au/images/sample-2.jpg"
],
"imageUrl": "https://www.bunnings.com.au/images/sample-1.jpg",
"variants": [
{
"code": "0299324",
"itemNumber": "0299324",
"url": "https://www.bunnings.com.au/sample-variant_p0299324",
"options": [
{
"name": "Colour",
"value": "Blue"
}
]
}
],
"categories": [
"Tools",
"Power Tools",
"Drills"
],
"categoryPath": [
"Tools",
"Power Tools",
"Drills"
],
"fulfilment": {
"availableForDelivery": true,
"inStorePickup": true
},
"searchMode": "search",
"source": "bunnings.com.au"
}Ways to use this data
- Price and catalogue monitoring: track prices, stock and promotions on drills, mowers, paints and fasteners over time.
- Competitor and market research: benchmark hardware retail pricing and product ranges by brand or category.
- Marketplace and comparison sites: source specifications, images, warranty text and pricing to list Bunnings products elsewhere.
- Review and sentiment analysis: pull customer reviews and rating distributions for power tools, appliances or building materials.
- Sourcing and procurement: build a structured feed of products, brands and specifications for trade or DIY audiences.
Before you run
Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.
Questions about this actor
What data does Bunnings Scraper return?
The documented output for Bunnings Scraper includes name, brand, price, was price, save %, on special, offers and currency. Availability of each field depends on the source page and the selected mode.
How much does Bunnings Scraper cost?
It costs $2.10 per 1,000 results on the Apify Free plan and from $1.50 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.
Can I get only new or changed products on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new and updated products, and unchanged ones are suppressed and not billed unless you also turn on Emit unchanged.
Why did my run fail instead of returning an empty dataset?
If every connection attempt is refused before any product data can be read, for example because the account has no access to a residential connection in Australia, the run fails with an actionable message instead of completing with zero results. A single refused request during a normal run is retried automatically on a fresh exit and does not fail the run. The run also fails if a pasted resumeFromRunId cannot be read, or if Incremental mode is combined with resumeFromRunId on a search that already has saved state.
Can I use it with AI agents or MCP?
Yes. Call it from any Apify integration or MCP client, and use the connector field to push results into Notion, Linear or Airtable.
