Kmart Australia Scraper – Products, Prices & Reviews
Pricing
from $1.50 / 1,000 products
Kmart Australia 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.50 / 1,000 products
Rating
0.0
(0)
Developer
Abot API
Maintained by CommunityActor stats
0
Bookmarked
7
Total users
2
Monthly active users
3.8 hours
Issues response
5 days ago
Last modified
Categories
Share
Kmart Australia Scraper
Collect product listings and customer reviews from kmart.com.au. Search by keyword, browse a specials collection, or paste links, then get a clean, flat record per product: name, canonical title, brand, current price with the was/original price and discount (amount and percent), star rating, full per-review text with stats, colours, sizes, images, seller, category, stock flags, and every colour/size variation. Reviews and review statistics attach to each product automatically.
Why this scraper
- Specials and discounts: browse Kmart's Clearance, Catalogue, and Online Exclusives collections, and capture the was/original price, saving amount and percent, and on-special flag on every product that is genuinely reduced.
- Products and reviews together: each product carries its rating summary plus individual review text, author, date, helpful votes, and sub-ratings (Value, Quality).
- Rich, flat records: 40+ fields per product, including canonical title, was/now pricing, variations, images, and category.
- Full product copy: the product description exactly as Kmart publishes it, plus the same copy split into
features,specifications,careInstructions,additionalInfo, safetywarnings, and links to any instruction manual. See "Product description and details" below. - Two ways to start: search by keyword (with an optional specials collection), sorting and filters, or paste product, category, specials, and search URLs.
- Filters that narrow results: brand, colour, category, and a price range. Third-party marketplace sellers are excluded by default (
includeMarketplaceopts in; marketplace records carryisMarketplace: true). - Resume & recurring updates: turn on Incremental mode to get only NEW, UPDATED, and REAPPEARED products on every scheduled run, or resume one specific interrupted crawl with
resumeFromRunId. See "Resume & recurring updates" below. - Optional export: pipe results straight into Notion, Linear, Airtable, or Apify via MCP connectors.
Data you get
Sample shape, values are illustrative placeholders, not from a live listing.
| Field | Example |
|---|---|
| id | 00000001 |
| 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 |
| listPrice | 8.0 |
| promoPrice | 12.0 |
| currency | AUD |
| onSale | false |
| clearance | true |
| averageRating | 4.6 |
| reviewCount | 316 |
| colour | Blue |
| size | One Size |
| seller | kmart |
| isMarketplace | false |
| merchDepartment | Home |
| primaryCategoryId | 00000 |
| inStockNationally | true |
| url | https://www.kmart.com.au/product/sample-bath-towel-00000001/ |
| image | https://assets.kmart.com.au/transform/00000000-0000-0000-0000-000000000000/00000001-1 |
| images | ["https://assets.kmart.com.au/transform/.../00000001-1", "..."] |
| variations | [{ "colour": "Blue", "size": "One Size", "price": 12.0, "apn": "0000000000000" }] |
| 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" |
| descriptionSummary | Sample lead sentence. |
| features | ["Sample feature", "Another feature"] |
| specifications | { "Dimensions/Size": "135cm (L) x 68cm (W)", "Material": "Cotton" } |
| careInstructions | ["Warm machine wash with similar colours"] |
| additionalInfo | ["Warranty: 12 months"] |
| warnings | [{ "label": "Warning", "text": "Sample safety notice." }] |
| manuals | [{ "title": "Instruction Manual", "url": "https://www.kmart.com.au/.../00000001_Manual.pdf" }] |
| detailSections | [{ "heading": "Product Details", "items": ["Material: Cotton"] }] |
| reviewStats | { "totalReviews": 316, "averageScore": 4.58, "starDistribution": { "5": 222, "4": 64 } } |
| reviews | [{ "rating": 5, "title": "Sample title", "content": "Sample review text.", "author": "Sample R.", "createdAt": "2026-01-01T00:00:00.000Z", "verifiedBuyer": true }] |
Product description and details
Every product carries the description Kmart publishes on its product page. It arrives as a hidden field on the same storefront request that already returns the product, so there is no extra product-page visit or per-product request. The existing response is only slightly larger, with no significant runtime or request-count increase.
description: the site's own copy, verbatim, HTML and all. Nothing is reworded, summarised, or generated. Use this when you want to reproduce the product page as Kmart wrote it.descriptionText: the same copy as plain text, for search indexes and database columns.descriptionSummary: just the opening paragraph, before the detail lists start.
The rest of the fields are the same string, split along the headings Kmart's own content template uses, so you can put each part where it belongs without parsing HTML yourself:
| Field | Comes from | Shape |
|---|---|---|
features | the Features list | array of lines |
specifications | the labelled lines anywhere in the copy (Dimensions/Size, Material, Power source, Warranty, …) | object of label → value |
careInstructions | the Care Instructions list, or the Care instructions: line | array of lines |
additionalInfo | the Additional Information list, plus labelled notes such as Disclaimer: | array of lines |
warnings | inline Warning: / Caution: safety notices, kept separate from each other | array of { label, text } |
manuals | any linked document, typically the instruction manual PDF | array of { title, url } |
detailSections | every heading in the copy, in the order published, including headings not listed above such as Fit and Model Size, Technical specifications, or Ingredients | array of { heading, items } |
detailSections is the complete, un-opinionated view: if Kmart adds a new heading, it appears there rather than being dropped. Any part a product does not publish comes back as null, so an absent section is never confused with an empty one.
In a 400-product sample spanning four departments, all 400 products carried both the original description and the lossless detailSections view. Named fields such as features, specifications, and careInstructions are populated only when the product publishes the corresponding information; an absent section returns null.
How to use
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 shown only when an item is genuinely reduced; otherwise those fields are null and isOnSpecial reflects clearance status. You can also reach a collection in URL mode by pasting its page URL, e.g. https://www.kmart.com.au/category/online-exclusives/.
Search multiple keywords with reviews:
{"mode": "search","searchTerms": ["air fryer", "mug"],"fetchReviews": true,"maxReviews": 20,"maxItems": 40}
Paste URLs:
{"mode": "url","urls": ["https://www.kmart.com.au/search/?searchTerm=towel","https://www.kmart.com.au/product/sample-bath-towel-00000001/"],"maxItems": 30}
Input parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
| mode | string | search | search for keywords, url for pasted links. |
| searchTerms | array | ["towel"] | Keywords to search (search mode). |
| specialsCategory | string | Optional specials collection: clearance, catalogue, or online-exclusives. | |
| sortBy | string | relevance | relevance, popular, newest, price-asc, price-desc. |
| brand | string | Keep only this brand (exact facet value). | |
| colour | string | Keep only this colour (exact facet value). | |
| category | string | Keep only this category (exact facet value). | |
| includeMarketplace | boolean | false | Also keep third-party marketplace sellers' products (thousands of extra items). By default only the Kmart, Target and Officeworks ranges are returned. Applies in every mode, including a single pasted product URL, so while it is off a pasted marketplace product URL returns no result. |
| minPrice | integer | Keep products at or above this price. | |
| maxPrice | integer | Keep products at or below this price. | |
| urls | array | Product, category, or search URLs (url mode). | |
| fetchReviews | boolean | true | Attach reviews and review stats to each product. |
| maxReviews | integer | 20 | Cap on reviews per product. 0 disables reviews. |
| maxItems | integer | 20 | Total products to return. 0 = unlimited. |
| maxPages | integer | 0 | Safety cap on pages per search. 0 = no cap; a run still stops on its own once the storefront's result total is reached or a page repeats. |
| resumeFromRunId | string | Continue one specific interrupted previous run/dataset: products already collected there are skipped. For recurring daily monitoring of the same search, use Incremental mode instead; see "Resume & recurring updates" below. | |
| incrementalMode | boolean | false | Daily/recurring monitoring of this same search, specials collection, or URL set. First run returns everything as NEW; later runs return only NEW/UPDATED/REAPPEARED by default. See "Resume & recurring updates" below. |
| stateKey | string | Optional name for a monitoring campaign, so its incremental state stays stable or is deliberately shared. Auto-derived from your search/filter settings when left empty. | |
| emitUnchanged | boolean | false | Incremental mode only. Also return products unchanged since the last run, marked UNCHANGED. Adds and bills extra rows you already have. |
| 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 search/URLs (not capped, not a resume). Adds and bills extra synthetic rows. |
| proxy | object | Apify Proxy | Connection configuration. |
| mcpConnectors | array | Optional MCP connectors to export results into. | |
| notionParentPageUrl | string | Notion parent page for the Notion connector. | |
| maxNotifyListings | integer | 50 | Cap on items exported per connector. |
Send results into your apps (MCP connectors)
Optionally forward results into the apps you already use. Authorize a connector under Apify then Settings then Integrations, select it in the mcpConnectors input, and set notionParentPageUrl for Notion. Each item is written as a condensed, human-readable summary (a title plus key fields), not the full JSON; nested objects collapse to their main value and arrays trim to a few names. The complete record always stays in the Apify dataset.
Output example
Sample shape, values are illustrative placeholders, not from a live listing.
{"kind": "product","id": "00000001","name": "Sample Bath Towel","title": "Sample Brand Sample Bath Towel","url": "https://www.kmart.com.au/product/sample-bath-towel-00000001/","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","variantBadges": ["Clearance"],"currency": "AUD","onSale": false,"clearance": true,"freeShipping": false,"averageRating": 4.6,"reviewCount": 316,"colour": "Blue","size": "One Size","seller": "kmart","merchDepartment": "Home","inStockNationally": true,"images": ["https://assets.kmart.com.au/transform/00000000-0000-0000-0000-000000000000/00000001-1"],"variations": [{ "colour": "Blue", "size": "One Size", "price": 12.0, "apn": "0000000000000" }],"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 }}]}
Incremental mode only. When incrementalMode is on, every returned record also carries:
| Field | Description |
|---|---|
changeType | NEW | UPDATED | UNCHANGED | REAPPEARED | EXPIRED |
changedFields | Top-level fields that changed since last seen; non-empty only for UPDATED |
firstSeenAt | When this product was first observed by this monitoring campaign |
lastSeenAt | When this product was last observed |
Change detection is based on the product itself: price, was/now pricing and specials, stock, brand, colour, size, seller, images, badges, the description and its details, and so on. reviews, reviewStats, averageRating, and reviewCount are deliberately excluded from that comparison. They come from a separate review widget and normally shift between two runs of the same product (a new review, or just a fresh vote count) with nothing about the product having changed, so including them would mark almost every product UPDATED on every run.
If you were already running incremental mode before the description fields existed, your first run after this update does not re-report your whole catalogue as UPDATED just because those fields are new. The run quietly brings each stored product up to date instead, so nothing extra is emitted or charged. The trade-off: with emitUnchanged off, an already-tracked product only delivers its description once it changes for some other reason. To pull the description for an entire existing catalogue in one go, run once with a new stateKey (or with incremental mode off); every product is then reported fresh, with its full copy.
Resume & recurring updates
There are two different things here. Pick the one that matches what you're doing:
| Need | Use |
|---|---|
| A crawl stopped and should continue | resumeFromRunId / automatic checkpoint recovery |
| Run the same search/specials/URLs every day and receive only changes | incrementalMode |
| Keep separate daily campaigns for similar searches | distinct stateKey values |
| Run a normal full snapshot | leave both off |
Resume (resumeFromRunId) continues one specific interrupted or previous large crawl: paste a run ID or dataset ID and this run skips products already collected there, returning only the remaining new products. An automatic same-run checkpoint also protects against platform migrations/Resurrects without any input needed.
Incremental mode (incrementalMode) is for a schedule (for example, daily): the actor remembers the previous run of the same search/specials/URL/filter setup by itself, so you never paste a run ID. The first run returns everything as NEW. Later runs return only NEW, UPDATED, and REAPPEARED products by default; duplicates and unchanged products are suppressed (and not charged). Turn on emitUnchanged or emitExpired only when you also want those rows returned (and billed for). State is isolated per search/specials/URL/filter setup automatically; set stateKey to name or deliberately share a monitoring campaign.
Scheduled-run example, using the same search each day:
Day 1 (first run ever for this search):
{ "mode": "search", "searchTerms": ["towel"], "incrementalMode": true }
→ every product comes back with "changeType": "NEW".
Day 2 (the schedule fires again, identical input):
{ "mode": "search", "searchTerms": ["towel"], "incrementalMode": true }
→ products whose price/specials/stock/etc. changed come back as "changeType": "UPDATED" with changedFields listing what changed, brand-new products come back as "changeType": "NEW", products that vanished and came back come back as "changeType": "REAPPEARED", and products that are still there, unchanged, are not returned at all (suppressed, not charged) unless emitUnchanged is on.
Reviews are still fetched for every scanned product (needed to classify it), but the review-enrichment surcharge is only charged for products that actually reach the dataset. A product suppressed as UNCHANGED is never charged for its reviews.
Plan requirement
Apify Proxy is used by default and works on every plan. Leave proxy enabled for the most reliable results.