Chemist Warehouse AU at a glance
Chemist Warehouse AU is a ready-to-run Apify actor from abotapi for collecting ecommerce data. Its documented output includes image, name, brand, price and rrp, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $1.80 per 1,000 results on the Apify Free plan and from $1.20 on paid plans, with smaller per-run or optional feature charges listed on Apify.
- Runs on
- Apify cloud: console, API, schedules and integrations
- Data type
- Ecommerce, Developer Tools, Automation
- Region
- Oceania
- Pricing
- $1.80 per 1,000 results (Free plan), from $1.20 on paid plans
- Output
- Documented below · JSON, CSV, Excel
- Inputs
- 23 options
- Run success
- 99.3% of completed public runs in the last 30 days
Scrape chemistwarehouse.com.au products with prices, RRP, discounts, stock, images, ingredients, directions, warnings, categories, and full customer reviews. Search by keyword or product URLs, with brand, category, price, in-stock filters, and price sorting.
What Chemist Warehouse AU can do
- Three ways in. Search by keyword, browse the Promotions or Clearance collections, or paste product and catalogue/category listing URLs.
- Real was-price and savings, never invented. wasPrice, savingsAmount and savingsPercent are filled in only when the site itself shows a reduction below RRP; equal pricing returns null instead of a fabricated saving.
- Pharmacy detail beyond the product card. Prescription type, poison schedule, purchase limits, Appendix H eligibility and instant-consult eligibility all come through as separate fields.
- Every individual review, not just a rating average. Title, author, body, date, helpful-vote counts and the star-rating breakdown, with an adjustable cap per product.
- Real filters that actually apply. Brand and category narrow a keyword search. Price range and in-stock only narrow both a keyword search and a pasted catalogue/category listing URL.
- Built for schedules. Incremental mode returns only new and changed products on recurring runs, and a resume option continues one interrupted catalogue pull without re-scraping what is already saved.
Choose what to collect
These inputs let you configure Chemist Warehouse AU - Products, Prices & Reviews. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
modestring | How to collect products. Search runs keyword/filter queries. URL scrapes whatever chemistwarehouse.com.au links you paste: product pages, brand pages, category pages or the specials collections. Discontinued product URLs are reported as not found in the log. |
queriesarray | Search mode only. One or more keywords, e.g. "panadol", "vitamin c". Leave empty to browse the whole catalogue with the filters below. |
brandstring | Search mode only. Restrict results to one brand, e.g. "Blackmores" or "Panadol" (exact spelling as shown on site). |
categorystring | Search mode only. Restrict results to one category, e.g. "Vitamins & Supplements" or "Pain Relief" (exact spelling as shown on site). |
specialsCategorystring | Search mode only. Limit results to a Chemist Warehouse specials collection. Promotions covers the current weekly-catalogue offers (½-price, 50% off, better-than-half-price); Clearance is reduced-to-clear stock. Combine with keywords, brand or price to narrow within the specials. Leave as 'Any' for all products. |
productUrlsarray | URL mode only. Paste product pages (/buy/{id}/{slug}, with or without www), the catalogue, a specials collection, a category or a brand page (/shop-online/{id}/{slug}). Product URLs return that single product, unfiltered; listing URLs return multiple products, filtered like a keyword search by the Filters section. ?page=N is ignored by the site (the walk starts at the first page and counts as a partial scope)?sort=price maps to Price: low to high. Site search links with a q parameter (/search?q=panadol) are scraped as that keyword search. Forms the site answers with 404 (/buy/{id}, /shop-online/{id}, /brands/x) are skipped with a warning. Leaving this untouched in URL mode scrapes one example per URL shape. |
minPriceinteger | Only products priced at or above this amount, in whole dollars. |
Show 16 more inputs
| Input | What it controls |
|---|---|
maxPriceinteger | Only products priced at or below this amount, in whole dollars. |
inStockOnlyboolean | Exclude out-of-stock products. |
sortstring | Result ordering. |
fetchReviewsboolean | Fetch individual customer reviews (rating, title, author, body, date, helpful counts) for each product. Adds a review-enrichment charge per product. |
maxReviewsPerProductinteger | Cap on reviews collected per product when Fetch reviews is on (maximum 1000). |
maxItemsinteger | Maximum number of products to collect. This is the run cap. Set to 0 for no item limit (the run then stops at Max pages). |
maxPagesinteger | Maximum number of search result pages to walk per query. 0 (the default) means no page limit from you; the actor enforces a hard cap of 1000 pages per query, and the run normally stops at Max items first. |
resumeFromRunIdstring | Paste a previous run ID or dataset ID to continue a large catalogue pull without returning or charging for products already collected there. Use this after an interrupted run. For recurring monitoring of the same search, use Incremental mode below instead. |
incrementalModeboolean | Turn this on for daily or recurring monitoring. The first run returns all matching products as NEW. Later runs normally return only NEW, UPDATED, and REAPPEARED products. What is compared: every output field (price, was-price and savings, stock, promo flags, name, brand, categories, images, rating, review count and, with Fetch reviews, the review entries) decides UPDATED, and changedFields names the fields that moved; the scrape timestamp, per-review helpful-vote counters and the site's popularity-ranking fields (salesProjectionScore, isTopPerformer, salesRankBuckets) never do, plus anything you list in the ignore-fields input below. Rows with no change are UNCHANGED and are neither returned nor billed. Turn on "Emit unchanged" or "Emit expired" only when you also want those products returned (and billed). State is kept separately for each mode/query/filter/fetch-reviews setup; use State key when you want to name or deliberately share a monitoring campaign. To continue one specific interrupted run instead, use Resume from a previous run above. |
stateKeystring | Optional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from the mode/query/filter/fetch-reviews settings, different searches then never mix state with each other. |
emitUnchangedboolean | Off by default. Turn on to also return products that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have, so leave it off unless you specifically want the full snapshot every run. |
emitExpiredboolean | Off by default. Turn on to also return products that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned the tracked search, not when Max items capped it or when Resume was used. This returns, and bills, extra synthetic rows, so leave it off unless you need expiry tracking. |
ignoreFieldsForChangesarray | Output fields that must never make a product UPDATED or appear in changedFields in incremental mode, for example images or rating. Use a field name, or a dotted path for nested data such as reviews.createdAt (lists are searched element by element). The fields stay in the output; only change detection skips them. The scrape timestamp and the site's popularity-ranking fields (salesProjectionScore, isTopPerformer, salesRankBuckets) are always ignored. Changing this list does not re-bill your saved products. |
mcpConnectorsarray | Optionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify Settings, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON; the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com). |
notionParentPageUrlstring | URL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors. |
maxNotifyListingsinteger | Cap on items written to each connector per run. Does not affect the dataset. |
Fields in the output
The documented dataset includes the fields below. Availability can depend on the source page and selected mode.
imageUrlImage (image)nameNamebrandBrandpricePricerrpRRP (number)discountPercentDiscount % (number)wasPriceWas (RRP)savingsAmountSave $savingsPercentSave %isOnSpecialOn specialpromoLabelPromoisInStockIn stockShow 28 more fields
ratingRatingreviewCountReviewsurlURLchangeTypeChange (incremental mode)changedFieldsChanged fieldsfirstSeenAtFirst seenlastSeenAtLast seenimagesimagestitletitlemanufacturermanufacturerskuskuproductIdproductIdproductKeyproductKeyepidepidslugslugcurrencycurrencydescriptiondescriptioningredientsingredientsdirectionsdirectionswarningswarningscategoriescategoriescategorySlugscategorySlugsproductTypeproductTypescheduleschedulequantityquantitydimensionsdimensionsscrapedAtscrapedAtreviewsreviewsExample output
An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.
{
"productId": 57134,
"sku": "2720171",
"name": "Blackmores Bio C 1000 150 Tablets",
"title": "Blackmores Bio C 1000 150 Tablets",
"brand": "Blackmores",
"url": "https://www.chemistwarehouse.com.au/buy/57134-blackmores-bio-c-1000-150-tablets",
"price": 21.99,
"rrp": 48.99,
"wasPrice": 48.99,
"savingsAmount": 27,
"savingsPercent": 55.11,
"isOnSpecial": true,
"promoLabel": "Better Than Half Price",
"currency": "AUD",
"isInStock": true,
"isClickAndCollect": true,
"isFastDelivery": true,
"prescriptionType": null,
"schedule": null,
"isAppendixH": false,
"purchaseLimit": null,
"transactionLimit": null,
"rating": 4.6286,
"reviewCount": 35,
"categories": [
"Chemist Warehouse Australia",
"Categories",
"Vitamins & Supplements"
],
"ingredients": "Ascorbic Acid (Vitamin C) ...",
"directions": "Adults take 1 tablet a day ...",
"warnings": "Vitamin supplements should not replace ...",
"images": [
"https://static.chemistwarehouse.com.au/products/57134/1.jpg"
],
"reviews": [
{
"rating": 5,
"title": "Great product",
"author": "Reviewer123",
"content": "Works really well ...",
"createdAt": "2025-11-20T00:44:12.000+00:00",
"positiveFeedbackCount": 2,
"negativeFeedbackCount": 0
}
],
"reviewsTotal": 35,
"createdAt": "2019-03-04T00:00:00.000Z",
"scrapedAt": "2026-09-29T04:00:00.000Z"
}Ways to use this data
- Price and promotion tracking: monitor RRP, savings and promo labels across the Promotions and Clearance collections to catch new discounts.
- Pharmacy compliance and catalogue audits: check schedule, prescription type, Appendix H and purchase-limit fields across a brand or category.
- Review and reputation research: pull every review for a product line to analyse sentiment, ratings trends and complaint patterns.
- Competitor and assortment analysis: build a dataset of a category or brand's full range, pricing and stock status.
- Deal alerts and dashboards: feed a price-comparison site, alert bot or inventory dashboard with a recurring incremental feed.
Before you run
Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.
Questions about this actor
What data does Chemist Warehouse AU return?
The documented output for Chemist Warehouse AU includes image, name, brand, price, rrp, discount %, was (rrp) and save $. Availability of each field depends on the source page and the selected mode.
How much does Chemist Warehouse AU cost?
It costs $1.80 per 1,000 results on the Apify Free plan and from $1.20 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.
Can I get only new or changed products on a schedule?
Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then classifies every product as NEW, UPDATED, UNCHANGED, REAPPEARED or EXPIRED against the previous run's saved state, and unchanged products are not billed unless you turn Emit unchanged on. REAPPEARED only appears for a product that a previous run had already marked EXPIRED, which itself needs Emit expired on and a complete, uncapped scan; until that has happened once, a product that comes back simply classifies as UPDATED or UNCHANGED.
Why did my run fail instead of returning an empty dataset?
The run fails outright in only two cases: a Resume from a previous run value that doesn't match a run or dataset this Apify account can read, or turning on Incremental mode together with Resume from a previous run when that search already has saved incremental state. Outside those two cases, a connectivity problem on part of the catalogue is logged as a warning and the run still finishes, returning whatever was found. An empty result can mean either that nothing matched, or that the source could not be reached for that search; check the run log for warnings to tell them apart.
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.
