# Appliances Online Scraper - Products, Prices & Reviews (`abotapi/appliancesonline-com-au-scraper`) Actor

Scrape appliancesonline.com.au by category, keyword, or URL. Extract title, brand, AUD price, was-price, stock, key specs, images, ratings, badges, care plans, manuals, delivery details, questions, and customer reviews.

- **URL**: https://apify.com/abotapi/appliancesonline-com-au-scraper.md
- **Developed by:** [Abot API](https://apify.com/abotapi) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 product results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Appliances Online Australia Products & Reviews Scraper

Scrape Appliances Online Australia (appliancesonline.com.au) product listings, specifications, stock and customer reviews. Browse a whole category, a keyword the storefront resolves itself, or paste product links. Every product comes back as one flat record with the AUD price, the recommended retail price and the saving, stock status, the storefront's own spec keys, media, the aggregate customer rating with its star breakdown, badges and care plans.

### Why This Scraper?

- One browse read returns a category's complete product list, so a run collects hundreds of products in a few requests instead of walking page after page.
- Two modes: browse categories or keywords, or paste product links and product ids; each pasted entry is one fully enriched record.
- Filters narrow the results whichever mode you run: brand, reduced-only, in-stock-only, price range and result ordering, and products dropped by a filter are never collected and never charged.
- Full detail extraction: specification table, manuals, feature bullets, delivery services and the on-sale flag from the product's own document.
- Customer reviews with star rating, review text, author and syndication source, plus the review tags (best and worst features) and the what-customers-say recap.
- Warehouse-level stock counts when the storefront exposes them, care plans, efficiency labels, badges and the green-product flag on every record.

### Data You Get

| Field | Example value |
|---|---|
| `productId` | 176381 |
| `title` | Sample Appliance Co 9kg Front Load Washing Machine |
| `brand` | Sample Appliance Co |
| `price` | 1427.00 |
| `rrp` | 1699.00 |
| `savings` | 272.00 |
| `onSale` | true |
| `inStock` | true |
| `stockByWarehouse` | { "301whse": 1 } |
| `image` | cover image URL |
| `images` | up to 8 gallery URLs |
| `media` | video and 360-view URLs when the product page offers them |
| `specs` | grouped specification table (Brand, Model Number, dimensions, ...) |
| `keySpecs` | the card's key spec pairs |
| `attr` | full flattened attribute map (attr\_Brand, attr\_Washing\_Machine\_Type, ...) |
| `warrantyNote` | 6 Year Domestic Warranty on all Parts and Labour |
| `carePlans` | sample care plan name and price |
| `reviewCount` / `rating` | 534 / 4.85 |
| `ratingBreakdown` | fiveStarCount 474 ... oneStarCount 4 |
| `reviewSummary` | What customers say |
| `manuals` | document titles and links |
| `delivery` | free delivery, free connection, recycling services |
| `questions` | customer questions with answers |
| `reviews` | reviewId, rating, reviewText, author, date, source |
| `url` | product page link |

### How to Use

Browse a category, listing fields only:

```json
{
  "mode": "categories",
  "searchInputs": ["washers-and-dryers/washing-machines"],
  "fetchDetails": false,
  "maxItems": 20
}
```

Browse with filters and full details:

```json
{
  "mode": "categories",
  "searchInputs": ["refrigeration/fridges"],
  "brand": "Sample Brand",
  "onSaleOnly": true,
  "inStockOnly": true,
  "sortBy": "price_asc",
  "fetchDetails": true,
  "maxItems": 10
}
```

Keyword resolution and product links:

```json
{
  "mode": "categories",
  "searchInputs": ["sample-model-number", "cooktops"],
  "maxItems": 10
}
```

Reviews, reviews plus the question feed:

```json
{
  "mode": "products",
  "productInputs": ["176381", "https://www.appliancesonline.com.au/product/sample-product-8kg/"],
  "fetchReviews": true,
  "maxReviewsPerProduct": 50,
  "fetchQuestions": true
}
```

### Input Parameters

| Parameter | Type | Default | Description |
|---|---|---|---|
| `mode` | select | `categories` | Browse categories and keywords, or read pasted product links and ids. |
| `searchInputs` | string list | one washing-machines path | Browse mode scopes: category paths, category links, keywords or bare product ids. |
| `productInputs` | string list | one product id | Product mode: product links or numeric product ids; each entry is one fully enriched record. |
| `facets` | stringList | empty | Optional storefront facet slugs appended to category paths, applied server-side when honored. |
| `brand` | text | empty | Keep only products whose brand matches this name. |
| `onSaleOnly` | boolean | false | Keep only products currently reduced. |
| `inStockOnly` | boolean | false | Keep only products the store lists in stock. |
| `minPrice` | integer | unset | Keep only products priced at or above this AUD amount. |
| `maxPrice` | integer | unset | Keep only products priced at or below this AUD amount. |
| `sortBy` | select | popularity | popularity, price asc, price desc, name, rating. |
| `fetchDetails` | boolean | true | Read each product's own document, spec table, manuals, features and delivery services; billed as the detail-enrichment event. Product mode always fetches details. |
| `fetchReviews` | boolean | false | Also read each product's customer review feed. |
| `fetchQuestions` | boolean | false | Also read the product's questions (needs Fetch product details). |
| `maxReviewsPerProduct` | integer | 50 | Review cap per product when reviews are on. |
| `questionsCap` | integer | 20 | Question cap per product when questions are on. |
| `maxItems` | integer | 20 | Max products across the whole run; 0 for unlimited. |
| `resumeFromRunId` | text | empty | Continue ONE interrupted run: paste a prior run or dataset id. |
| `incrementalMode` | boolean | false | Recurring monitoring: later runs return only what changed. |
| `stateKey` | text | empty | Name a monitoring campaign, or share state deliberately. |
| `emitUnchanged` | boolean | false | Also return (and bill) unchanged rows. |
| `emitExpired` | boolean | false | Also return rows gone after a COMPLETE scan. |
| `proxy` | proxy | Apify proxy on | Keep the default; the read runs through a proxy connection. |
| `mcpConnectors` | array | empty | Send results into your apps through MCP connectors (optional). |
| `notionParentPageUrl` | text | empty | Notion parent page for the Notion connector. |
| `maxNotifyListings` | number | 50 | Cap on items written to each connector per run. |

#### Resume and recurring updates

Resume continues ONE interrupted run: products already collected there are skipped, not returned and not billed again. Incremental mode is for schedules: the actor remembers each scope's baseline itself, and a recurring run returns only NEW, UPDATED (with changedFields naming what moved, for example price or stock), REAPPEARED and optionally EXPIRED rows. UNCHANGED rows are suppressed by default so daily monitoring bills only what changed. Reviews are detected through the review count, the star breakdown and the rating, so a new review classifies the product UPDATED without listing every review body in changedFields. EXPIRED rows only appear after a complete scan; a capped run never tombstones anything.

### Output Example

```json
{
  "productId": "176381",
  "sku": "SAMPLESKU1",
  "title": "Sample Brand 9kg Front Load Washing Machine",
  "url": "https://www.appliancesonline.com.au/product/sample-product-9kg-176381/",
  "brand": "Sample Brand",
  "manufacturer": { "name": "Sample Manufacturer", "url": "/brand/sample-brand/" },
  "price": 1427.0,
  "rrp": 1699.0,
  "savings": 272.0,
  "currency": "AUD",
  "onSale": true,
  "inStock": true,
  "stockStatus": 1,
  "stockByWarehouse": { "301whse": 1 },
  "popularity": 504321,
  "featured": true,
  "badges": ["Made In Sampleland - Main"],
  "images": ["https://www.appliancesonline.com.au/public/images/sample-gallery-000000.png"],
  "media": ["https://www.appliancesonline.com.au/public/video/sample-video.mp4"],
  "keySpecs": [{ "name": "Brand", "value": "Sample Brand" }],
  "attr": { "attr_Brand": "Sample Brand", "attr_Washing_Machine_Type": "Front load" },
  "warrantyNote": "2 Year Manufacturer Warranty",
  "specs": { "key Specifications": [{ "name": "Brand", "value": "Sample Brand", "url": null }] },
  "manuals": [{ "title": "User manual", "type": "manual", "url": "https://www.appliancesonline.com.au/public/manuals/sample-00000000.pdf" }],
  "delivery": { "services": [{ "service": "Free delivery", "detail": "Free next day delivery to most areas.", "included": true }] },
  "questions": [{ "id": "0000001", "question": "Does this support WiFi?", "askedBy": "Sample User", "answers": [{ "answer": "Yes.", "answeredBy": "Sample Assistant", "answeredAt": "2026-01-01T00:00:00Z" }] }],
  "reviews": [{ "reviewId": "0000000001", "rating": 5.0, "title": "Sample review", "reviewText": "Sample text quiet and efficient.", "author": "sample-user", "submittedAt": "2026-01-01T00:00:00Z", "isSyndicated": false, "photos": null }],
  "reviewCount": 534,
  "rating": 4.85,
  "ratingBreakdown": { "fiveStarCount": 474, "fourStarCount": 51, "threeStarCount": 2, "twoStarCount": 3, "oneStarCount": 4 },
  "reviewSummary": "Customers praise quiet operation in this sample summary.",
  "bestFeatures": [{ "tag": "quality", "count": 6 }],
  "worstFeatures": [{ "tag": "noisy", "count": 2 }],
  "scope": "washers-and-dryers/washing-machines",
  "searchMode": "category",
  "scrapedAt": "2026-01-01T00:00:00Z"
}
```

### Plan Requirement

Authorize one MCP connector under Apify, Settings, API & Integrations, then select it in mcpConnectors; Notion also needs notionParentPageUrl. The connector export is a best-effort side channel: it writes a condensed summary per item and never changes the dataset output. Any Apify account that can start a run can use this actor; the storefront read ships through the Apify proxy connection by default, so no separate proxy configuration is required.

### Send results into your apps (MCP connectors)

Authorize one MCP connector in Apify (Notion, Linear, Airtable or Apify), set the mcpConnectors input (and notionParentPageUrl for Notion item pages), and each run writes a condensed summary per item into your tool via mcpConnectors, with the write count capped by maxNotifyListings. The complete record always stays in the Apify dataset, and a connector failure never affects the scrape.

# Actor input Schema

## `mode` (type: `string`):

Browse mode reads category or keyword listings. Product mode reads one or more product links or product ids.

## `searchInputs` (type: `array`):

Browse mode: what to read, one entry per scope. Each entry can be a category path (washing-machines), a full category link (appliancesonline.com.au/filter/washers-and-dryers/washing-machines/), a keyword (fridge, samsung wgg24403au) or a bare product id. Keywords are resolved the same way the storefront's own search box resolves them: to the nearest product link or category listing. A whole department is returned in one go (up to its full size), so set Max products to bound the run.

## `productInputs` (type: `array`):

Product mode: any link from the site works here, not just product pages. A product link (appliancesonline.com.au/product/8kg-front-load-haier-washing-machine-hwm80-1403d/) or numeric product id (176381) is read as one fully enriched record. A category, sale/clearance or other listing link (appliancesonline.com.au/filter/clearance/) or a keyword is browsed and every product found in it is fully enriched too.

## `facets` (type: `array`):

Optional storefront facet segments appended to category paths, for example front-loading or bosch. Applied server-side when the storefront honors the segment. Leave empty to filter client-side instead.

## `brand` (type: `string`):

Optional. Keep only products whose brand matches this name, for example Bosch, LG or Haier.

## `onSaleOnly` (type: `boolean`):

Keep only products the storefront currently marks as reduced (list price below the recommended retail price).

## `inStockOnly` (type: `boolean`):

Keep only products the store currently lists as in stock.

## `minPrice` (type: `integer`):

Optional. Only keep products priced at or above this amount.

## `maxPrice` (type: `integer`):

Optional. Only keep products priced at or below this amount.

## `sortBy` (type: `string`):

Ordering applied to the results after collection.

## `fetchDetails` (type: `boolean`):

Browse mode: additionally read each product's own document for the on-sale flag, availability, media gallery and 360 views, videos, care plans, efficiency labels, warranty note, manuals, feature bullets, delivery services and the specification table (billed as the detail-enrichment event, one unit per enriched record). Product mode always fetches details.

## `fetchReviews` (type: `boolean`):

Also read each product's customer review feed (star rating, review text, author display name, date, syndication source) and the ingredient-like tagging of the best and worst features. Converted reviews are collected the same way the storefront collects its own review page.

## `fetchQuestions` (type: `boolean`):

Also read the product's customer questions and answers on the product page (needs 'Fetch product details').

## `maxReviewsPerProduct` (type: `integer`):

Cap on reviews collected per product when 'Fetch customer reviews' is on. The storefront's review feed is walked in pages of up to 100. No upper limit: every 10 reviews beyond the first bills 1 more detail-enrichment unit for that product.

## `questionsCap` (type: `integer`):

Cap on customer questions collected per product when 'Fetch questions' is on. No upper limit: every 10 questions beyond the first bills 1 more detail-enrichment unit for that product.

## `maxItems` (type: `integer`):

Maximum number of products to return across the whole run. Use 0 for unlimited.

## `resumeFromRunId` (type: `string`):

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.

## `incrementalMode` (type: `boolean`):

Turn this on for daily or recurring monitoring. The first run returns every matching product as NEW. Later runs normally return only NEW, UPDATED and REAPPEARED products. Turn on Emit unchanged or Emit expired only when you also want those rows returned (and billed). State is kept separately for each scope and filter setup; use State key to name or deliberately share a monitoring campaign.

## `stateKey` (type: `string`):

Optional. Name this monitoring campaign to keep its state stable, or deliberately share state across differently configured runs. Leave empty to let the actor derive a key automatically from the scope and filter settings.

## `emitUnchanged` (type: `boolean`):

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 want the full snapshot every run.

## `emitExpired` (type: `boolean`):

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 scopes (not when Max products capped it or Resume was used).

## `mcpConnectors` (type: `array`):

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).

## `notionParentPageUrl` (type: `string`):

URL or id of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.

## `maxNotifyListings` (type: `integer`):

Cap on items written to each connector per run. Does not affect the dataset.

## `proxy` (type: `object`):

Leave enabled to use Apify Proxy (recommended). You can optionally pin specific proxy groups or a country.

## Actor input object example

```json
{
  "mode": "categories",
  "searchInputs": [
    "washers-and-dryers/washing-machines"
  ],
  "productInputs": [
    "176381",
    "appliancesonline.com.au/product/8kg-front-load-haier-washing-machine-hwm80-1403d/",
    "appliancesonline.com.au/filter/washers-and-dryers/washing-machines/",
    "appliancesonline.com.au/filter/clearance/"
  ],
  "onSaleOnly": false,
  "inStockOnly": false,
  "sortBy": "popularity",
  "fetchDetails": true,
  "fetchReviews": false,
  "fetchQuestions": false,
  "maxReviewsPerProduct": 50,
  "questionsCap": 20,
  "maxItems": 20,
  "incrementalMode": false,
  "emitUnchanged": false,
  "emitExpired": false,
  "maxNotifyListings": 50,
  "proxy": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "mode": "categories",
    "searchInputs": [
        "washers-and-dryers/washing-machines"
    ],
    "productInputs": [
        "176381",
        "appliancesonline.com.au/product/8kg-front-load-haier-washing-machine-hwm80-1403d/",
        "appliancesonline.com.au/filter/washers-and-dryers/washing-machines/",
        "appliancesonline.com.au/filter/clearance/"
    ],
    "onSaleOnly": false,
    "inStockOnly": false,
    "sortBy": "popularity",
    "fetchDetails": true,
    "fetchReviews": false,
    "fetchQuestions": false,
    "maxReviewsPerProduct": 50,
    "questionsCap": 20,
    "maxItems": 20,
    "incrementalMode": false,
    "emitUnchanged": false,
    "emitExpired": false,
    "maxNotifyListings": 50,
    "proxy": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("abotapi/appliancesonline-com-au-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "mode": "categories",
    "searchInputs": ["washers-and-dryers/washing-machines"],
    "productInputs": [
        "176381",
        "appliancesonline.com.au/product/8kg-front-load-haier-washing-machine-hwm80-1403d/",
        "appliancesonline.com.au/filter/washers-and-dryers/washing-machines/",
        "appliancesonline.com.au/filter/clearance/",
    ],
    "onSaleOnly": False,
    "inStockOnly": False,
    "sortBy": "popularity",
    "fetchDetails": True,
    "fetchReviews": False,
    "fetchQuestions": False,
    "maxReviewsPerProduct": 50,
    "questionsCap": 20,
    "maxItems": 20,
    "incrementalMode": False,
    "emitUnchanged": False,
    "emitExpired": False,
    "maxNotifyListings": 50,
    "proxy": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("abotapi/appliancesonline-com-au-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "mode": "categories",
  "searchInputs": [
    "washers-and-dryers/washing-machines"
  ],
  "productInputs": [
    "176381",
    "appliancesonline.com.au/product/8kg-front-load-haier-washing-machine-hwm80-1403d/",
    "appliancesonline.com.au/filter/washers-and-dryers/washing-machines/",
    "appliancesonline.com.au/filter/clearance/"
  ],
  "onSaleOnly": false,
  "inStockOnly": false,
  "sortBy": "popularity",
  "fetchDetails": true,
  "fetchReviews": false,
  "fetchQuestions": false,
  "maxReviewsPerProduct": 50,
  "questionsCap": 20,
  "maxItems": 20,
  "incrementalMode": false,
  "emitUnchanged": false,
  "emitExpired": false,
  "maxNotifyListings": 50,
  "proxy": {
    "useApifyProxy": true
  }
}' |
apify call abotapi/appliancesonline-com-au-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,abotapi/appliancesonline-com-au-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/Iitidl99oLGfXAOUm/builds/Xp8HLdQfzysI5yHUw/openapi.json
