Kmart Scraper - Products, Prices & Reviews
Pricing
from $1.30 / 1,000 products
Kmart Scraper - Products, Prices & Reviews
Scrape products and customer reviews from Kmart.com.au. Search by keyword or use product/category URLs with sorting and filters. Returns name, brand, price, promo price, ratings, review text and stats, colours, sizes, images, seller, category, stock, and variations.
Pricing
from $1.30 / 1,000 products
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
1
Bookmarked
11
Total users
4
Monthly active users
3.8 hours
Issues response
3 days ago
Last modified
Categories
Share
Kmart Australia Scraper: Prices, Descriptions and Reviews
Kmart Australia Scraper turns kmart.com.au into a clean product data feed. Search by keyword, browse the Clearance, Catalogue or Online Exclusives collection, or paste product, category and search links, then get one flat record per product: name, canonical title, brand, current price with the was/original price and discount, star rating, full per-review text, Kmart's own product description split into features, specifications, care instructions and safety warnings, images, and every colour/size variation with its own stock status. Reviews attach to each product automatically, and Incremental mode returns only new and changed products, including a variant going in or out of stock, on a recurring schedule.
Why This Scraper?
- Two ways to start. Search by keyword with sorting and facet filters, or paste product, category, search and specials-collection URLs from kmart.com.au.
- Specials and discounts. Browse Kmart's Clearance, Catalogue and Online Exclusives collections, and get the was/original price, saving amount and percent, and on-special flag on every product that is genuinely reduced.
- Full product copy, structured. Kmart's own description arrives verbatim, plus the same text split into features, specifications, care instructions, additional info, safety warnings and manual links, so nothing has to be parsed by hand.
- Products and reviews together. Each product carries its rating summary plus individual review text, author, date, helpful votes and sub-ratings (Value, Quality).
- Filters that narrow results. Brand, colour, category and sort apply to searches and to pasted category, search and specials URLs; the price range and marketplace exclusion also apply to a single pasted product URL. Third-party marketplace sellers are excluded by default.
- Built for schedules. Incremental mode returns only new and changed products on recurring runs, or resume one interrupted crawl with a run id.
- Optional export. Pipe results straight into Notion, Linear, Airtable or Apify through MCP connectors.
Use Cases
- Price and discount tracking: monitor Clearance, Catalogue and Online Exclusives collections to catch genuine markdowns as soon as they appear.
- Competitor and market research: compare Kmart's pricing, ranges and stock across categories against other Australian retailers.
- Catalog and content teams: pull Kmart's own product copy, features and specifications to populate a comparison site or content feed without re-typing it.
- Review and reputation analysis: collect star ratings, review text and sub-ratings to track customer sentiment per product or category.
- Recurring price-drop alerts: schedule the actor with Incremental mode and get notified only when a tracked product's price or stock actually changes.
Data You Get
Sample shape: values are illustrative placeholders, not from a live listing.
| Field | Example |
|---|---|
id | "42442370" |
name | "Sample Bath Towel" |
title | "Sample Brand Sample Bath Towel" |
brand | "Sample Brand" |
price | 8.0 |
wasPrice | 12.0 |
savingsAmount | 4.0 |
savingsPercent | 33 |
isOnSpecial | true |
promoLabel | "Clearance" |
currency | "AUD" |
averageRating | 4.6 |
reviewCount | 316 |
colour | "Blue" |
size | "One Size" |
seller | "kmart" |
isMarketplace | false |
inStockNationally | true |
url | "https://www.kmart.com.au/product/sample-bath-towel-42442370/" |
images | ["https://assets.kmart.com.au/transform/.../42442370-1", "..."] |
variations | [{ "colour": "Blue", "size": "One Size", "price": 12.0, "apn": "0000000000000", "inStock": true, "outOfStockStates": null }] |
description | "Sample lead sentence.<br /><br /><strong>Product Details</strong><ul><li><strong>Material:</strong> Cotton</li></ul>" |
descriptionText | "Sample lead sentence.\nProduct Details:\n- Material: Cotton" |
features | ["Sample feature", "Another feature"] |
specifications | { "Dimensions/Size": "135cm (L) x 68cm (W)", "Material": "Cotton" } |
Every product record also carries careInstructions, additionalInfo, warnings and manuals, split from the same description text, plus a detailSections view that keeps every heading Kmart publishes, even ones not named above, in the order they were published. An absent section comes back as null, never as an empty list or object.
Each entry in variations also carries inStock and outOfStockStates, Kmart's own per-state stock flag for that exact colour/size combination, straight from the same product card (no extra request). outOfStockStates is null when a variant is in stock everywhere Kmart reports, otherwise an array of the Australian states/territories it is currently out of stock in (e.g. ["NSW", "VIC"]); inStock is false only once every state is out of stock. This is what lets you monitor availability at the colour/size level, not just whether the product as a whole is listed.
Reviews and review statistics attach to the same product record: reviews is an array of { rating, title, content, author, createdAt, verifiedBuyer, votesUp, votesDown, subRatings }, and reviewStats carries the totalReviews, averageScore, starDistribution and subRatings summary; when Fetch reviews is off (or Max reviews is 0), both come back null, but a product with no reviews returns reviews: [] and a reviewStats with totalReviews: 0.
How to Use
- Pick a mode:
search(keywords, with optional sort, filters and a specials collection) orurl(paste product, category, search or specials-collection links). - In search mode, add one or more search terms, or leave them empty and pick a Specials collection to browse Clearance, Catalogue or Online Exclusives instead.
- Set Max products to control run size and cost, and turn Fetch reviews on or off.
- Click Start, then download the dataset as JSON, CSV or Excel, or read it through the API.
Search for a keyword:
{"mode": "search","searchTerms": ["towel"],"maxItems": 20}
Search with sorting and filters:
{"mode": "search","searchTerms": ["towel"],"sortBy": "price-asc","brand": "Anko","minPrice": 5,"maxPrice": 30,"maxItems": 25}
Browse a specials collection (Clearance, Catalogue or Online Exclusives):
{"mode": "search","specialsCategory": "clearance","maxItems": 50}
Discounted products carry wasPrice, savingsAmount, savingsPercent and isOnSpecial. Kmart runs an everyday-low-price model, so a was/original price is populated only when an item is genuinely reduced right now; otherwise those fields are null and isOnSpecial reflects clearance status instead. A specials collection can also be reached in url mode by pasting its page URL.
Paste URLs:
{"mode": "url","urls": ["https://www.kmart.com.au/search/?searchTerm=towel","https://www.kmart.com.au/product/sample-bath-towel-42442370/"],"maxItems": 30}
Supported URL shapes (URL mode): department pages (/toys/, /womens/; ?page=N starts at that page), specials (/catalogue/, /clearance/, /category/online-exclusives/), brand pages (/brand/target/), nested category pages (/category/home-and-living/home-decor/), search (/search/?searchTerm=towel) and product pages (/product/<name>-<id>/). A URL that matches none of these, or a product that is no longer listed, is skipped with a warning in the run log.
Behaviour change: the urls field now has a default (one sample URL per shape above) instead of being empty. A URL-mode run started through the API without a urls value now scrapes those sample pages instead of returning nothing; pass urls explicitly to control what is scraped.
Run it from your code
Python:
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_TOKEN>")run = client.actor("abotapi/kmart-au-scraper").call(run_input={"mode": "search", "searchTerms": ["towel"]})for product in client.dataset(run["defaultDatasetId"]).iterate_items():print(product["name"], product["price"])
JavaScript:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const run = await client.actor('abotapi/kmart-au-scraper').call({ mode: 'search', searchTerms: ['towel'] });const { items } = await client.dataset(run.defaultDatasetId).listItems();
Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.
Resume and recurring updates
-
Resume (
resumeFromRunId) continues one interrupted run: paste its run or dataset id and the actor skips every product already collected there, so you don't pay twice. An automatic same-run checkpoint also protects against platform migrations without any input needed. -
Incremental mode (
incrementalMode) is for scheduling the same search, specials collection or URL set again and again (for example, daily). The actor remembers the previous run of that exact scope by itself, so you never paste a run id. The first run returns everything asNEW. Later runs return onlyNEWandUPDATEDproducts by default, withchangedFieldslisting what changed on anUPDATEDrow; products unchanged since the last run are suppressed and not billed unlessemitUnchangedis on.EXPIREDrows are produced only whenemitExpiredis on, and only after a run that scanned the whole tracked scope (not capped by Max products or Max pages, not a resume, and not a pasted listing link with?page=2or higher, which skips the earlier pages). A product must have been markedEXPIREDat least once before it can later be classifiedREAPPEARED, soREAPPEAREDnever appears in a run whereemitExpiredhas not previously been turned on.stateKeynames or deliberately shares a monitoring campaign; left empty, it is derived automatically from the search/filter setup.ignoreFieldsForChangeslets you exclude extra top-level fields from change detection if something in your own setup turns out to be noisy; reviews, review stats, the average rating andgroupIds(Kmart's merchandising-group ids, which change when a product joins or leaves a catalogue or seasonal group without the listing itself changing) are already excluded by default and never triggerUPDATED. One-time migration note: the first Incremental run after the release that addedwasPrice,savingsAmountandsavingsPercentfrom Kmart's "WAS $x" text, and the extra card fields (uri, fulfilment and shipping flags, marketplace badges), treats those newly filled fields on an already-tracked, otherwise unchanged product asUNCHANGED, so you are not billed for it. A real price or name change on the same product still comes backUPDATED. -
Start from an existing dataset (
baselineDatasetId, optional, Incremental mode only): if you already scraped the catalogue with this Actor, pick that run's dataset in the input form and your first Incremental run returns only products that changed since then, instead of the whole catalogue again. Pick the dataset unedited: it must be this Actor's own product output (a CSV or Excel export, renamed columns or another tool's data is refused, and the run stops before scraping with a message saying why). It is only used while the state key has no saved state; once a run has completed it is ignored. Products in the dataset that are unchanged are not returned or billed; changes since the dataset was made come back asUPDATED, new products asNEW, and withemitExpiredon, products no longer on the site asEXPIRED. It cannot be combined with Resume from a previous run, and it must be selected from the list (a pasted id may not be readable). -
Reviews are still fetched for every scanned product, needed to detect whether it changed, but the review surcharge is only charged for products that actually reach the dataset. A product suppressed as
UNCHANGEDis never charged for its reviews.
Send results into your apps (MCP connectors)
Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape: the Apify dataset is never changed.
What gets written to the connector: a condensed, human-readable summary of each product, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.
- Authorize a connector once under Apify then Settings then Integrations (Notion, Linear, Airtable, or Apify).
- Select it in the "Pipe results into your apps" input field. If the picker is empty, you haven't authorized a connector yet.
- For Notion, also set
notionParentPageUrlto the page where items should be created.
The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.
Input Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
mode | string | search | search for keywords (and the specials collection), url for pasted links. |
searchTerms | array | none (prefill: ["towel"]) | Keywords to search. Search mode only. |
specialsCategory | string | "" (none) | Optional specials collection: clearance, catalogue, or online-exclusives. Search mode only. |
urls | array | 10 sample URLs, one per supported shape (see URL mode) | Product, department, category, brand, search or specials URLs. URL mode only. |
sortBy | string | relevance | relevance, popular, newest, price-asc, price-desc. |
brand | string | none | Keep only this brand (exact facet value, e.g. Anko). |
colour | string | none | Keep only this colour (exact facet value). |
category | string | none | Keep only this category (exact facet value). |
includeMarketplace | boolean | false | Also keep third-party marketplace sellers' products. By default only the Kmart, Target and Officeworks ranges are returned. |
minPrice | integer | none | Keep products at or above this price (AUD). |
maxPrice | integer | none | Keep products at or below this price (AUD). |
fetchReviews | boolean | true | Attach reviews and review stats to each product. |
maxReviews | integer | 20 | Cap on reviews captured per product (maximum 1000). 0 disables reviews. |
maxItems | integer | 20 | Total products to return. 0 = unlimited. |
maxPages | integer | 0 | Safety cap on result pages per search term. 0 = no cap; a run still stops on its own once the storefront's result total is reached or a page repeats. |
resumeFromRunId | string | none | Continue one specific interrupted previous run or dataset: products already collected there are skipped. |
incrementalMode | boolean | false | Daily or recurring monitoring of the same search, specials collection, or URL set. See "Resume and recurring updates" above. |
stateKey | string | none | Optional name for a monitoring campaign. Auto-derived from your search and filter settings when left empty. |
baselineDatasetId | string | none | Incremental mode only. Pick the dataset of an earlier run of this Actor to use as the starting point, so the first Incremental run returns only changes. Not combinable with Resume. |
emitUnchanged | boolean | false | Incremental mode only. Also return products unchanged since the last run, marked UNCHANGED. |
emitExpired | boolean | false | Incremental mode only. Also return products from a previous run no longer found, marked EXPIRED, once a run has fully scanned the tracked search or URLs. |
ignoreFieldsForChanges | array | [] | Incremental mode only. Extra top-level field names to exclude from UPDATED change detection, on top of the built-in exclusions (reviews, review stats, average rating, group ids). |
proxy | object | { "useApifyProxy": true } | Connection configuration. |
mcpConnectors | array | none | Optional MCP connectors to export results into. |
notionParentPageUrl | string | none | Notion parent page for the Notion connector. |
maxNotifyListings | integer | 50 | Cap on items exported per connector. |
Output Example
Sample shape: values are illustrative placeholders, not from a live listing.
{"kind": "product","id": "42442370","name": "Sample Bath Towel","title": "Sample Brand Sample Bath Towel","url": "https://www.kmart.com.au/product/sample-bath-towel-42442370/","brand": "Sample Brand","apn": "0000000000000","description": "Sample lead sentence about the product.<br /><br /><strong>Product Details</strong><ul><li><strong>Dimensions/Size:</strong> 000cm (L) x 00cm (W)</li><li><strong>Material:</strong> Cotton</li></ul><strong>Features</strong><ul><li>Sample feature</li></ul><strong>Care Instructions</strong><ul><li>Warm machine wash with similar colours</li></ul>","descriptionText": "Sample lead sentence about the product.\nProduct Details:\n- Dimensions/Size: 000cm (L) x 00cm (W)\n- Material: Cotton\nFeatures:\n- Sample feature\nCare Instructions:\n- Warm machine wash with similar colours","descriptionSummary": "Sample lead sentence about the product.","features": ["Sample feature"],"specifications": { "Dimensions/Size": "000cm (L) x 00cm (W)", "Material": "Cotton" },"careInstructions": ["Warm machine wash with similar colours"],"additionalInfo": null,"warnings": null,"manuals": null,"detailSections": [{ "heading": "Product Details", "items": ["Dimensions/Size: 000cm (L) x 00cm (W)", "Material: Cotton"] },{ "heading": "Features", "items": ["Sample feature"] },{ "heading": "Care Instructions", "items": ["Warm machine wash with similar colours"] }],"price": 8.0,"listPrice": 8.0,"promoPrice": 12.0,"wasPrice": 12.0,"savingsAmount": 4.0,"savingsPercent": 33,"isOnSpecial": true,"promoLabel": "Clearance","currency": "AUD","onSale": false,"clearance": true,"freeShipping": false,"averageRating": 4.6,"reviewCount": 316,"colour": "Blue","size": "One Size","seller": "kmart","isMarketplace": false,"merchDepartment": "Home","inStockNationally": true,"images": ["https://assets.kmart.com.au/transform/00000000-0000-0000-0000-000000000000/42442370-1"],"variations": [{ "colour": "Blue", "size": "One Size", "price": 12.0, "apn": "0000000000000", "inStock": true, "outOfStockStates": null },{ "colour": "Grey", "size": "One Size", "price": 12.0, "apn": "0000000000001", "inStock": false, "outOfStockStates": ["ACT", "NSW", "NT", "QLD", "SA", "TAS", "VIC", "WA"] }],"reviewStats": {"totalReviews": 316,"averageScore": 4.58,"starDistribution": { "5": 222, "4": 64, "3": 24, "2": 4, "1": 2 },"subRatings": { "Value": 5.0, "Quality": 4.0 }},"reviews": [{"rating": 5,"title": "Sample title","content": "Sample review text.","author": "Sample R.","createdAt": "2026-01-01T00:00:00.000Z","verifiedBuyer": true,"votesUp": 6,"votesDown": 0,"subRatings": { "Value": 5, "Quality": 5 }}]}
When incrementalMode is on, every returned record also carries changeType (NEW, UPDATED, UNCHANGED, REAPPEARED or EXPIRED), changedFields (non-empty only for UPDATED), firstSeenAt and lastSeenAt. Change detection compares the product itself (price, was/now pricing and specials, stock including the per-variant inStock/outOfStockStates on each colour/size, brand, colour, size, seller, images and the description); reviews, reviewStats, averageRating, reviewCount and groupIds are deliberately excluded, because a new review or a fresh vote count between two runs does not mean the product changed.
Output views
The dataset has four views in the Console: Products Overview (price, discount, rating, stock and images), Reviews (one row per product with its reviews list and rating summary in single columns), Variants & stock (one row per product with its colour/size variations list, each with its own stock status, in a single column) and Changes (incremental) (changeType and changedFields, populated when Incremental mode is on).
Plan Requirement
The default proxy setting works out of the box on standard Apify datacenter proxies; residential proxies are not required. The actor reads Kmart's product data feeds rather than its web pages, and those feeds load through a datacenter connection. The actor manages its own connection tiers and moves to a backup connection when one is persistently refused, so there is nothing to tune under Connection. A paid Apify plan (https://apify.com/pricing) or your own proxy URLs is needed, because Apify free plans do not include proxy access.
What you may see in the run log:
- If the selected connection is unavailable (Apify free plans do not include residential proxies), the run logs "The selected connection is unavailable to this run" and continues on a backup connection; some pages may still be unavailable. When that backup serves the run, the log says "Served over the backup connection (the default connection was unavailable)."
- If the proxy refuses the account, the run ends FAILED with: "The proxy connection was refused for this account, so no page could be read. Your Apify plan does not include proxy access; a paid plan is required." Check your own proxy URLs' credentials if you entered any.
- If residential proxies are unavailable and the backup connection could not load the requested pages, the run ends with "No results: residential proxies are unavailable on this run (Apify free plans do not include them)".
- If requests fail for another reason, the run ends with "Could not load any results page (the requests failed), so nothing was collected. This is a connection problem, not an empty search. Please try again later."
FAQ
How much does it cost?
Pricing is pay per event: $0.002 per product returned, $0.0008 per review-enrichment unit (billed only for products that actually had reviews fetched and reached the dataset) and $0.06 per run start, at the Free plan rate. Reviews are capped by Max reviews per product (maxReviews, default 20, up to 1000), so a larger cap raises the review charge. A product suppressed by Incremental mode as UNCHANGED is never charged for its reviews. The Pricing tab shows the current rates. Use Max products to cap the cost of any run.
Is it legal to scrape Kmart Australia?
This actor collects only publicly available product and review data. You are responsible for how you use it: follow Kmart's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Product names, prices and specifications are generally facts, but photos and customer review text may be subject to third-party rights.
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 by default, and unchanged ones are suppressed and not billed.
Why does the was/original price come back null for most products?
Kmart runs an everyday-low-price model rather than constant discounting, so wasPrice, savingsAmount and savingsPercent are populated only when an item is genuinely reduced right now. A product with no active promotion returns those fields as null, and isOnSpecial reflects its clearance status instead.
Why did my run fail or return nothing?
The run fails outright only when a Resume id cannot be read, or when Resume is combined with Incremental mode on a search that already has saved monitoring state. If requests keep being refused after retries, the affected search or page is skipped with a warning in the log. A run that ends with no products finishes with a status message asking you to check your search terms, URLs and filters, so look at the log for fetch warnings before assuming nothing matched. A pasted category URL that does not match a Kmart category is reported and skipped. A pasted marketplace product URL returns nothing while Include marketplace products is off.
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 a summary of each product into Notion, Linear or Airtable.
๐ Want more e-commerce data?
Pair this actor with these related scrapers from the same team:
| ๐ Target AU Scraper Scrape products and customer reviews from Target.com.au. Search by keyword or use... | ๐ BIG W Marketplace Scraper Scrape BIG W Marketplace seller listings from bigw.com.au: name, brand, price, was-price... |
| ๐ 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... | ๐ Bunnings Scraper Scrape bunnings.com.au products with full specifications, price, brand, stock, image... |
๐ 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.