# Amazon Australia Product & Reviews Scraper (`abotapi/amazon-au-scraper`) Actor

Scrape Amazon Australia (amazon.com.au) products and customer reviews. Search by keyword or paste product, search and category URLs. Returns title, brand, price, list price, rating, review count, star distribution, availability, features, images, categories, specs, best-seller rank and seller.

- **URL**: https://apify.com/abotapi/amazon-au-scraper.md
- **Developed by:** [Abot API](https://apify.com/abotapi) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Features:** Limited permissions
- **Stats:** 16 total users, 1 monthly users, 97.1% 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

## Amazon Australia Scraper: Products, Deals & Reviews

Amazon Australia Scraper turns amazon.com.au into a clean product data API. Search by keyword with sort, rating and price filters, browse just the Deals & Discounts grid, or paste product, search and category links (or bare ASINs). Every product comes back as one flat record with current price, was price, savings, rating, star distribution, images, specs and, optionally, the customer reviews Amazon publishes on the product page, then export to JSON, CSV or Excel, or pull the results straight into your app through the API.

### Why This Scraper?

- **Two ways to find products.** Search by keyword with sort, rating and price filters, or paste product, search and category links (or bare 10 character ASINs) directly.
- **Deals & Discounts in one switch.** Turn on the deals filter to return only products currently on a deal, price drop or coupon, with was price, savings, discount percentage and promo label on each one.
- **Full product detail on demand.** Open each product page for brand, list price, star distribution, availability, feature bullets, description, the full image gallery, category path, specifications, best seller rank and seller, or skip it to collect just the search cards faster.
- **Customer reviews.** Collect the star rating, title, text, author, date, verified purchase flag and helpful votes for the reviews Amazon shows publicly on the product page, plus the aggregate rating and star distribution.
- **Exact price and rating filters.** Minimum rating and an AUD price range are applied to each product's own values, independent of Amazon's coarser on-site bands.
- **Built for schedules.** Incremental mode returns only new and changed products on recurring runs, and a refused run fails loudly instead of returning an empty dataset.
- **Resume without losing work.** A previous run or dataset ID can be used to pick up only the products not already collected, and the run also checkpoints itself against a platform restart.

### Use Cases

- **Price and deal monitoring:** track a product or a whole search for price drops, coupons and Deals & Discounts placements over time.
- **Retail and competitor research:** build a dataset of prices, ratings and availability across a category to benchmark against your own catalogue.
- **Review and sentiment analysis:** collect the top customer reviews and rating distribution for a product line to spot recurring complaints or praise.
- **Catalogue and content enrichment:** pull titles, images, specs and descriptions to power a comparison site, affiliate feed or internal database.
- **Stock and availability alerts:** schedule the actor and use incremental mode to catch products going in or out of stock.

### Data You Get

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

| Field | Example |
| --- | --- |
| `asin` | `"B0EXAMPLE01"` |
| `title` / `brand` | `"Example Smart Speaker (3rd Gen)"` / `"ExampleBrand"` |
| `url` | `"https://www.amazon.com.au/dp/B0EXAMPLE01"` |
| `price` / `currency` | `79.0` / `"AUD"` |
| `listPrice` / `savings` / `savingsPercent` | `99.0` / `20.0` / `20` |
| `promoLabel` / `isOnSpecial` | `"Limited time deal"` / `true` |
| `rating` / `reviewsCount` | `4.5` / `1284` |
| `ratingDistribution` | `{ "5": 72, "4": 15, "3": 6, "2": 3, "1": 4 }` |
| `availability` / `inStock` | `"In stock"` / `true` |
| `features` | list of feature bullets (when detail is enabled) |
| `description` | long product description (when detail is enabled) |
| `categories` | `["Electronics", "Smart Home", "Smart Speakers"]` |
| `specs` | key/value specification table (when detail is enabled) |
| `bestSellersRank` | `12` |
| `answeredQuestions` | `34` (when the product page shows one) |
| `deliveryDate` | `"Get it by Wednesday, 5 August"` (when shown) |
| `seller` / `shipsFrom` | `"Example Retail AU"` / `"Amazon AU"` |
| `images` / `thumbnailImage` | full gallery / primary image URL |
| `variants` / `variantDimensions` | sibling ASINs (colour, size) when the product has options |
| `sponsored` | `false` (from the search card) |
| `searchMode` | `"search"` or `"url"` |

Additional detail fields, present only when the page shows them: `stars` / `hasReviews` / `isAmazonChoice` / `amazonChoiceText` (numeric rating, reviews flag, Amazon's Choice badge and its text); `inStockText` / `monthlyPurchaseVolume` (stock wording and "N+ bought in past month" text (when shown)); `delivery` / `fastestDelivery` / `shippingPrice` / `returnPolicy` (delivery and returns details from the buy box (when shown)); `breadCrumbs` / `bestsellerRanks` (category trail and every best seller rank line (rank plus category)); `attributes` / `productOverview` / `variantAttributes` / `variantAsins` / `variantDetails` (specification, overview and variant details (when detail is enabled)); `offers` (other seller offers visible on the page (when shown)); `highResolutionImages` / `galleryThumbnails` (full resolution and thumbnail image URLs); `aPlusContent` / `brandStory` / `bookDescription` / `sustainabilityFeatures` (rich content blocks, only when the page has them); `aiReviewsSummary` (Amazon's review summary text, only when the page serves it); `author` / `visitStoreLink` (book author or brand store link (when shown)); `originalAsin` / `unNormalizedProductUrl` / `reviewsLink` / `loadedCountryCode` / `locationText` (the requested ASIN, original link, reviews link and storefront location).

When customer reviews are turned on, each product also carries `reviews` (an array with `reviewId`, `rating`, `title`, `body`, `author`, `date`, `reviewedIn`, `verifiedPurchase`, `helpfulCount`, `variation` and `reviewUrl`), `reviewsCollected` (how many were returned) and `reviewStats` (aggregate `averageRating`, `totalRatings` and `ratingDistribution`). A value Amazon does not publish for a given product is omitted or `null` rather than guessed. Amazon sign-in gates the full paginated review list, so reviews are limited to the top reviews shown publicly on the product page (default 10, never more than 100). The dataset has four views in the Console: **Products**, **Product details**, **Reviews** (one row per review) and **Changes** (incremental runs).

### How to Use

1. Pick a **mode**: `search` (keyword and filters) or `url` (paste product, search, category links or bare ASINs).
2. In `url` mode, supported links are listed in the table below. **Default behaviour:** if you leave **URLs** untouched, the actor works through the example links in order until **Max products** (default 20) is reached, so a default run stops inside the first example (a search link fills the cap on its own) and never reaches the product, bestsellers or store examples further down. Clear the list and paste your own links for a real run, or raise **Max products** to cover more of the examples.

| Link type | Example |
|---|---|
| Keyword search | `https://www.amazon.com.au/s?k=echo+dot` |
| Paginated search (that page onward) | `https://www.amazon.com.au/s?k=echo+dot&page=2` |
| Sorted search (the link's sort wins) | `https://www.amazon.com.au/s?k=echo+dot&s=price-asc-rank` |
| Filtered search (rating facet) | `https://www.amazon.com.au/s?k=headphones&rh=p_72:1248882011` |
| Category plus keyword | `https://www.amazon.com.au/s?k=headphones&rh=n:4851447051` |
| Category browse | `https://www.amazon.com.au/s?i=electronics&rh=n:4851447051` |
| Deals refinement (also `/deals`) | `https://www.amazon.com.au/s?rh=p_n_deal_type:10343589051` |
| Product, slug, `/gp/product/`, `/gp/aw/d/`, apex host | `https://www.amazon.com.au/dp/B0DM8RVBLW` |
| Bestsellers chart, root or department (top 100 over 2 pages, never marked expired) | `https://www.amazon.com.au/gp/bestsellers/electronics` |
| Brand store page (follows the redirect to a keyword search) | `https://www.amazon.com.au/stores/Amazon/page/1` |
| Product-reviews page (requires sign-in, so mapped to the product page with a warning) | `https://www.amazon.com.au/product-reviews/B0DM8RVBLW` |

`/b?node=` links are mapped to a category search. Seller storefront links (`/s?me=`, `/sp?seller=`) show no public result cards and are skipped with a warning in the log.
3\. Fill in the fields for that mode, and set the shared filters (minimum rating, price range) if you want a narrower result.
4\. Turn on **Fetch product details** and **Fetch customer reviews** as needed, then set **Max products** to control run size and cost.
5\. Click **Start**, then download the dataset as JSON, CSV or Excel, or read it through the API.

**Search with filters:**

```json
{
  "mode": "search",
  "queries": ["echo dot"],
  "sortBy": "avg_rating",
  "minRating": "4",
  "minPrice": 30,
  "maxPrice": 150,
  "fetchDetails": true,
  "maxItems": 20
}
```

**Deals & Discounts only, in a category:**

```json
{
  "mode": "search",
  "queries": ["coffee machine"],
  "specialsOnly": true,
  "fetchDetails": true,
  "maxItems": 20
}
```

**Paste product and search links:**

```json
{
  "mode": "url",
  "urls": [
    "https://www.amazon.com.au/dp/B0EXAMPLE01",
    "https://www.amazon.com.au/s?k=echo+dot"
  ],
  "maxItems": 30
}
```

**Products with customer reviews:**

```json
{
  "mode": "search",
  "queries": ["robot vacuum"],
  "fetchDetails": true,
  "fetchReviews": true,
  "maxReviewsPerProduct": 15,
  "maxItems": 10
}
```

#### Run it from your code

Python:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/amazon-au-scraper").call(run_input={"mode": "search", "queries": ["echo dot"]})
for product in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(product["title"], product["price"])
```

JavaScript:

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

const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/amazon-au-scraper').call({ mode: 'search', queries: ['echo dot'] });
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 or large previous crawl: paste its run 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 a platform restart, with no input needed.
- **Incremental mode** (`incrementalMode`) is for a schedule against the same search or URLs. The actor remembers the previous run itself, so you never paste a run ID. The first run returns everything as `NEW`. Later runs return only `NEW` and `UPDATED` (with `changedFields` listing what changed) by default; `UNCHANGED` products are suppressed and not billed unless `emitUnchanged` is on. `EXPIRED` (a product no longer found) is only produced when `emitExpired` is on and the run reached the natural end of every search and URL (not capped by Max products or Max pages, and not a resume). `REAPPEARED` only happens to a product that was previously marked `EXPIRED` by an earlier run with `emitExpired` on and then shows up again; with `emitExpired` left off, a run never produces `REAPPEARED` at all. `stateKey` names or shares the stored state. A product counts as `UPDATED` when its price, list price, promo, availability, title, seller, images, variants or specs change; `rating`, `reviewsCount`, `ratingDistribution`, `reviewStats`, `bestSellersRank`, `sponsored`, `deliveryDate`, `answeredQuestions`, `stars`, `starsBreakdown`, `bestsellerRanks`, `delivery`, `fastestDelivery`, `hasReviews`, `monthlyPurchaseVolume`, `aiReviewsSummary`, `locationText`, `visitStoreLink` and `unNormalizedProductUrl`, the "only N left" stock number in `availability` and `inStockText`, and image host changes on `images`, `thumbnailImage`, `highResolutionImages` and `galleryThumbnails` never do (they stay in the output). The long text fields (`aPlusContent`, `brandStory`, `bookDescription`, `returnPolicy`) are remembered as a digest to keep the stored state small, so an `EXPIRED` row leaves them out. `ignoreFieldsForChanges` adds more field names to leave out of change detection (dotted names like `specs.Weight` reach nested fields).

### 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**.

1. Authorize a connector once under **Apify, Settings, Integrations** (Notion, Linear, Airtable, or Apify).
2. Select it in the **"Pipe results into your apps"** input field. If the picker is empty, you have not authorized a connector yet.
3. For **Notion**, also set `notionParentPageUrl` to 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` (keyword and filters) or `url` (paste links / ASINs). |
| `queries` | array | none (prefill: `["echo dot"]`) | Search keywords (search mode). Each keyword is searched separately. Leave empty with `specialsOnly` on to browse all deals. |
| `sortBy` | string | `relevance` | `relevance`, `price_asc`, `price_desc`, `newest`, `avg_rating`, or `best_selling`. |
| `specialsOnly` | boolean | `false` | Search mode only. Return only products currently on Amazon Australia's Deals & Discounts. |
| `urls` | array | example links of every supported type, used in order until Max products is reached (see the table in How to Use) | Product, search, category, bestsellers or store URLs, or bare 10 character ASINs (url mode). |
| `minRating` | string | `0` (any rating) | Keep products rated at least `3`, `4` or `5` stars. Applies to both modes. |
| `minPrice` | integer | none | Keep products priced at or above this amount, in AUD. Applies to both modes. |
| `maxPrice` | integer | none | Keep products priced at or below this amount, in AUD. Applies to both modes. |
| `fetchDetails` | boolean | `true` | Open each product page for full detail (brand, list price, star distribution, availability, features, description, images, specs, best seller rank, seller). |
| `fetchReviews` | boolean | `false` | Also collect the customer reviews shown on each product page, plus aggregate rating statistics. |
| `maxReviewsPerProduct` | integer | `10` | Cap on reviews collected per product when reviews are on. `0` returns all reviews available on the page, capped at 100 per product. |
| `maxProductVariantsAsSeparateResults` | integer | `0` | Also return up to this many other variants (colours, sizes) of each product as their own full rows. Needs `fetchDetails`. Variant rows count toward `maxItems` and are returned and billed like any other product. `0` is off. |
| `maxItems` | integer | `20` | Maximum number of products to return for the whole run. `0` is unlimited. |
| `maxPages` | integer | none (walks every result page) | Optional bound on result pages walked per keyword or URL. Does not cap products; `maxItems` does. |
| `resumeFromRunId` | string | none | ID of a previous run of this actor (or a dataset ID). Products already in that dataset are skipped. |
| `incrementalMode` | boolean | `false` | Recurring monitoring of the same search or URL list. Later runs return only new and changed products by default. |
| `stateKey` | string | none (auto derived) | Name or share an incremental mode state, so it stays stable or is deliberately shared across runs. |
| `emitUnchanged` | boolean | `false` | Incremental mode only. Also return (and bill for) products unchanged since the last run. |
| `emitExpired` | boolean | `false` | Incremental mode only. Also return (and bill for) products from a previous run no longer found, once a run has fully scanned the search or URLs. |
| `ignoreFieldsForChanges` | array | none | Incremental mode only. Field names (dotted for nested) left out of change detection; they stay in the output. |
| `proxy` | object | Apify Proxy, Australian residential | Connection settings. |
| `mcpConnectors` | array | none | Optional: send a summary of each product to apps you authorized under Integrations. |
| `notionParentPageUrl` | string | none | Notion connector only: page under which item pages are created. |
| `maxNotifyListings` | integer | `50` | Cap on items written to each connector per run. Does not affect the dataset. |

### Output Example

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

```json
{
  "asin": "B0EXAMPLE01",
  "title": "Example Smart Speaker (3rd Gen) with Voice Assistant, Charcoal",
  "url": "https://www.amazon.com.au/dp/B0EXAMPLE01",
  "brand": "ExampleBrand",
  "price": 79.0,
  "listPrice": 99.0,
  "currency": "AUD",
  "savings": 20.0,
  "savingsPercent": 20,
  "promoLabel": "Limited time deal",
  "isOnSpecial": true,
  "rating": 4.5,
  "reviewsCount": 1284,
  "ratingDistribution": { "5": 72, "4": 15, "3": 6, "2": 3, "1": 4 },
  "availability": "In stock",
  "inStock": true,
  "features": [
    "Rich, room filling sound with clear vocals",
    "Ask the voice assistant to play music, set timers and control smart devices"
  ],
  "description": "A compact smart speaker for any room.",
  "categories": ["Electronics", "Smart Home", "Smart Speakers"],
  "specs": { "Model Number": "EX-3000", "Release Year": "2024", "Connectivity": "Wi-Fi, Bluetooth", "Best Sellers Rank": "#12 in Smart Speakers" },
  "bestSellersRank": 12,
  "seller": "Example Retail AU",
  "shipsFrom": "Amazon AU",
  "images": [
    "https://m.media-amazon.com/images/I/EXAMPLE01._AC_SL1000_.jpg",
    "https://m.media-amazon.com/images/I/EXAMPLE02._AC_SL1000_.jpg"
  ],
  "thumbnailImage": "https://m.media-amazon.com/images/I/EXAMPLE01._AC_SL1000_.jpg",
  "sponsored": false,
  "searchMode": "search",
  "reviewsCollected": 1,
  "reviewStats": {
    "averageRating": 4.5,
    "totalRatings": 1284,
    "ratingDistribution": { "5": 72, "4": 15, "3": 6, "2": 3, "1": 4 }
  },
  "reviews": [
    {
      "reviewId": "REXAMPLE00001",
      "rating": 5.0,
      "title": "Great value",
      "body": "Easy to set up and the sound is excellent for the size.",
      "author": "Sample Reviewer",
      "date": "2025-02-14",
      "reviewedIn": "Australia",
      "verifiedPurchase": true,
      "helpfulCount": 6,
      "variation": "Colour Name: Charcoal",
      "reviewUrl": "https://www.amazon.com.au/gp/customer-reviews/REXAMPLE00001"
    }
  ]
}
```

### Plan Requirement

The actor uses an Australian residential Apify Proxy exit by default and rotates to a fresh exit on every request. This is already set as the default under **Proxy & connection**, so most users do not need to change it. Amazon Australia can refuse some non residential exits, so residential is the supported choice and the only one this page promises. If residential proxies are not available on your plan (Apify free plans do not include them), the run logs a warning that the selected connection is unavailable, continues on a backup connection and notes that some pages may still be unavailable; upgrade at apify.com/pricing or supply your own proxy URLs for reliable results. If no connection can load a results page, the run ends as failed with a clear connection message (the proxy refused for this account, residential unavailable and the backup could not load the pages, or the requests failed) rather than returning an empty dataset.

### FAQ

#### How much does it cost?

You pay per product returned, plus an extra charge for the detail page fetch when **Fetch product details** or **Fetch customer reviews** is on (both are billed together as one surcharge per product, not twice). A product link or bare ASIN pasted directly always opens the product page too, so it carries this surcharge even with both options off. The **Pricing** tab on the actor page shows the current rates. Use **Max products** to cap the cost of any run.

#### Is it legal to scrape Amazon Australia?

This actor collects only publicly available product data shown to any visitor on amazon.com.au. You are responsible for how you use it: follow Amazon's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Prices, ratings and stock levels change constantly and reflect only the moment they were scraped.

#### 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 not billed. Turn on `emitUnchanged` or `emitExpired` only if you also want those rows returned, and billed for.

#### Why does review collection only return some of a product's reviews?

amazon.com.au shows its aggregate rating, star distribution and a set of top customer reviews to anonymous visitors, and this actor collects exactly those. The full paginated review list is gated behind sign in for anonymous visitors, so review collection does not walk past that wall; it returns the top reviews Amazon exposes publicly on the product page, capped by `maxReviewsPerProduct` (default 10, never more than 100 per product), which keeps a large review run from running up compute.

#### Why did my run fail instead of returning an empty dataset?

If every request this run made was refused before any page could be read, the run stops with a clear message so "no products matched" is never confused with "nothing could be connected". Check the connection warning in the run log and your proxy configuration, then try again. A run that genuinely reached the site and found nothing (for example, an overly narrow filter) completes normally with an empty dataset and a status message explaining why.

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

### 🔗 Want more e-commerce data?

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

<table>
<tr><td>🛒 <a href="https://apify.com/abotapi/harvey-norman-scraper"><b>Harvey Norman Scraper</b></a><br>Scrape Harvey Norman Australia products: name, brand, price, was-price / discount...</td><td>🛒 <a href="https://apify.com/abotapi/officeworks-scraper"><b>Officeworks Scraper</b></a><br>Scrape Officeworks products by keyword, category, or URL. Extract names, brands, prices...</td></tr>
<tr><td>🛒 <a href="https://apify.com/abotapi/target-au-scraper"><b>Target AU Scraper</b></a><br>Scrape products and customer reviews from Target.com.au. Search by keyword or use...</td><td>🥦 <a href="https://apify.com/abotapi/woolworths-au-scraper"><b>Woolworths AU Scraper</b></a><br>Scrape Woolworths Australia (woolworths.com.au) grocery products and reviews. Search by...</td></tr>
<tr><td>🛒 <a href="https://apify.com/abotapi/costco-au-scraper"><b>Costco AU Scraper</b></a><br>Scrape Costco.com.au products by keyword or product, search and category URLs. Extract...</td><td>🛒 <a href="https://apify.com/abotapi/bunnings-com-au-scraper"><b>Bunnings Scraper</b></a><br>Scrape bunnings.com.au products with full specifications, price, brand, stock, image...</td></tr>
</table>

👉 [Browse all abotapi scrapers](https://apify.com/abotapi)

### 💬 Support

- 🐞 **Found a bug or a missing field?** Open a ticket on the [Issues tab](https://apify.com/abotapi/amazon-au-scraper/issues/open). 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.

# Actor input Schema

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

Choose 'search' to use keywords and filters, or 'url' to scrape specific Amazon Australia product, search or category URLs (or bare ASINs) you paste below.

## `queries` (type: `array`):

One or more keywords to search, for example 'echo dot' or 'coffee machine'. Each keyword is searched separately.

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

Result ordering, as offered by Amazon.

## `specialsOnly` (type: `boolean`):

Only return products currently on Amazon Australia's Deals & Discounts (deals, price drops and coupons). Combine with a keyword to find deals in a category, or leave keywords empty to browse the whole deals grid. Each result carries its was/original price, savings, discount percentage and promo label when discounted.

## `urls` (type: `array`):

Product, search, category, bestsellers or brand-store URLs (or bare 10-character ASINs) to scrape. Each example link is a different page type; left untouched they are used in order until Max products (default 20) is reached, so a default run stops inside the first example and never reaches the later ones. Other product link forms (/gp/product/, /gp/aw/d/) are also accepted. For example https://www.amazon.com.au/s?k=echo+dot or a product page ending in /dp/<ASIN>. Multiple entries supported.

## `minRating` (type: `string`):

Optional. Only keep products whose average customer rating is at least this many stars.

## `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.

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

Open each product page to collect its full detail (brand, list price, star distribution, availability, feature bullets, description, all images, category path, specifications, best-seller rank, seller). Adds one page fetch per product.

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

Also collect the customer reviews Amazon publishes on each product page (star rating, title, text, author, date, verified-purchase flag, helpful votes) plus aggregate rating statistics. Uses the same product-page fetch as details. Note: Amazon Australia gates its full paginated review list behind sign-in for anonymous visitors, so this returns the top reviews Amazon exposes publicly.

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

Cap on reviews collected per product when 'Fetch customer reviews' is on. Use 0 for all publicly available reviews on the product page (capped at 100). Amazon shows anonymous visitors only the top reviews embedded on the product page, so you will rarely get more than that.

## `maxProductVariantsAsSeparateResults` (type: `integer`):

For each product, also return up to this many of its other variants (colours, sizes, pack sizes) as their own rows, each with its full product page details. Needs 'Fetch product details'. Every variant row counts toward Max products and is returned and billed like any other product, so leave it at 0 (off) unless you want variants as separate rows.

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

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

## `maxPages` (type: `integer`):

Optional bound on result pages walked per keyword/URL. Leave empty to walk every result page. This does NOT cap the number of products; the run stops at Max products.

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

Apify Proxy is required for reliable results. The actor connects through an Australian residential exit by default.

## `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. For recurring daily monitoring of the same search, use Incremental mode below instead.

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

Daily/recurring monitoring of this same search or URL list. The actor remembers the previous run 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 (unchanged products are suppressed and not billed). A product counts as UPDATED when its price, list price, savings, promo, availability or stock state, title, brand, seller, features, images, variants or specs change. These never trigger UPDATED on their own: rating, reviewsCount, ratingDistribution, reviewStats, bestSellersRank, sponsored, deliveryDate, answeredQuestions, stars, starsBreakdown, bestsellerRanks, delivery, fastestDelivery, hasReviews, monthlyPurchaseVolume, aiReviewsSummary, locationText, visitStoreLink and unNormalizedProductUrl, the "only N left" stock number in availability and inStockText, and image host changes on images, thumbnailImage, highResolutionImages and galleryThumbnails. They stay in the output. Combine with 'Resume from a previous run' only when bootstrapping a brand-new monitoring campaign from an existing dataset. See resumeFromRunId above for continuing one specific interrupted run instead.

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

Optional name for a monitoring campaign, so its incremental state stays stable or is deliberately shared across otherwise-different search setups. Auto-derived from your mode/keywords/URLs/sort/filters/detail settings when left empty.

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

Incremental mode only. Also return products unchanged since the last run, marked changeType 'UNCHANGED'. Adds and bills extra rows you already have.

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

Incremental mode only. Also return products from a previous run no longer found, marked changeType 'EXPIRED', once a run has fully scanned the search/URLs (not capped by Max products/Max pages, not a resume). Adds and bills extra synthetic rows.

## `ignoreFieldsForChanges` (type: `array`):

Optional. Field names to exclude from UPDATED change detection, on top of the built-in exclusions listed under Incremental changes. Use it when another field turns out to be noisy in your setup. Dotted names reach nested fields, for example specs.Weight, and apply to every element of a list. Ignored fields stay in the output.

## `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.

## Actor input object example

```json
{
  "mode": "search",
  "queries": [
    "echo dot"
  ],
  "sortBy": "relevance",
  "specialsOnly": false,
  "urls": [
    "https://www.amazon.com.au/s?k=echo+dot",
    "https://www.amazon.com.au/s?k=echo+dot&page=2",
    "https://www.amazon.com.au/s?k=echo+dot&s=price-asc-rank",
    "https://www.amazon.com.au/s?k=&rh=n:4851447051",
    "https://www.amazon.com.au/b?node=4851799051",
    "https://www.amazon.com.au/s?rh=p_n_deal_type:10343589051",
    "https://www.amazon.com.au/dp/B0DM8RVBLW",
    "https://www.amazon.com.au/Echo-Dot/dp/B0HKNKRD46/ref=sr_1_1?th=1",
    "https://www.amazon.com.au/gp/bestsellers",
    "https://www.amazon.com.au/gp/bestsellers/electronics",
    "https://www.amazon.com.au/stores/Amazon/page/1"
  ],
  "minRating": "0",
  "fetchDetails": true,
  "fetchReviews": false,
  "maxReviewsPerProduct": 10,
  "maxProductVariantsAsSeparateResults": 0,
  "maxItems": 20,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "AU"
  },
  "incrementalMode": false,
  "emitUnchanged": false,
  "emitExpired": false,
  "ignoreFieldsForChanges": [],
  "maxNotifyListings": 50
}
```

# Actor output Schema

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

No description

## `detail` (type: `string`):

No description

## `reviews` (type: `string`):

No description

## `changes` (type: `string`):

No description

## `summary` (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": "search",
    "queries": [
        "echo dot"
    ],
    "urls": [
        "https://www.amazon.com.au/s?k=echo+dot",
        "https://www.amazon.com.au/s?k=echo+dot&page=2",
        "https://www.amazon.com.au/s?k=echo+dot&s=price-asc-rank",
        "https://www.amazon.com.au/s?k=&rh=n:4851447051",
        "https://www.amazon.com.au/b?node=4851799051",
        "https://www.amazon.com.au/s?rh=p_n_deal_type:10343589051",
        "https://www.amazon.com.au/dp/B0DM8RVBLW",
        "https://www.amazon.com.au/Echo-Dot/dp/B0HKNKRD46/ref=sr_1_1?th=1",
        "https://www.amazon.com.au/gp/bestsellers",
        "https://www.amazon.com.au/gp/bestsellers/electronics",
        "https://www.amazon.com.au/stores/Amazon/page/1"
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ],
        "apifyProxyCountry": "AU"
    },
    "ignoreFieldsForChanges": []
};

// Run the Actor and wait for it to finish
const run = await client.actor("abotapi/amazon-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": "search",
    "queries": ["echo dot"],
    "urls": [
        "https://www.amazon.com.au/s?k=echo+dot",
        "https://www.amazon.com.au/s?k=echo+dot&page=2",
        "https://www.amazon.com.au/s?k=echo+dot&s=price-asc-rank",
        "https://www.amazon.com.au/s?k=&rh=n:4851447051",
        "https://www.amazon.com.au/b?node=4851799051",
        "https://www.amazon.com.au/s?rh=p_n_deal_type:10343589051",
        "https://www.amazon.com.au/dp/B0DM8RVBLW",
        "https://www.amazon.com.au/Echo-Dot/dp/B0HKNKRD46/ref=sr_1_1?th=1",
        "https://www.amazon.com.au/gp/bestsellers",
        "https://www.amazon.com.au/gp/bestsellers/electronics",
        "https://www.amazon.com.au/stores/Amazon/page/1",
    ],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
        "apifyProxyCountry": "AU",
    },
    "ignoreFieldsForChanges": [],
}

# Run the Actor and wait for it to finish
run = client.actor("abotapi/amazon-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": "search",
  "queries": [
    "echo dot"
  ],
  "urls": [
    "https://www.amazon.com.au/s?k=echo+dot",
    "https://www.amazon.com.au/s?k=echo+dot&page=2",
    "https://www.amazon.com.au/s?k=echo+dot&s=price-asc-rank",
    "https://www.amazon.com.au/s?k=&rh=n:4851447051",
    "https://www.amazon.com.au/b?node=4851799051",
    "https://www.amazon.com.au/s?rh=p_n_deal_type:10343589051",
    "https://www.amazon.com.au/dp/B0DM8RVBLW",
    "https://www.amazon.com.au/Echo-Dot/dp/B0HKNKRD46/ref=sr_1_1?th=1",
    "https://www.amazon.com.au/gp/bestsellers",
    "https://www.amazon.com.au/gp/bestsellers/electronics",
    "https://www.amazon.com.au/stores/Amazon/page/1"
  ],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "AU"
  },
  "ignoreFieldsForChanges": []
}' |
apify call abotapi/amazon-au-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,abotapi/amazon-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/wwVdY3x1WdS1uVPml/builds/VtjqUffgejJM3zwcn/openapi.json
