Chemist Warehouse AU - Products, Prices & Reviews avatar

Chemist Warehouse AU - Products, Prices & Reviews

Pricing

from $1.20 / 1,000 products

Go to Apify Store
Chemist Warehouse AU - Products, Prices & Reviews

Chemist Warehouse AU - Products, Prices & Reviews

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.

Pricing

from $1.20 / 1,000 products

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

1

Bookmarked

13

Total users

5

Monthly active users

13 hours

Issues response

13 hours ago

Last modified

Security

Limited permissions

Share

Chemist Warehouse Scraper: Products, Pricing & Reviews

Chemist Warehouse Scraper turns the Chemist Warehouse pharmacy and beauty catalogue into structured product data. Search by keyword, browse the Promotions or Clearance collections, or paste product and listing URLs, and get pricing with the was-price and savings the site itself shows, stock and delivery flags, pharmacy scheduling details, full descriptions, and every individual customer review. Export the dataset as JSON, CSV or Excel, or pull it straight into your app through the API.

Why This Scraper?

  • 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.
  • Send results straight into your apps through MCP connectors, no extra code required.

Use Cases

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

Data You Get

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

FieldExample
productId / sku57134 / "2720171"
name / title"Blackmores Bio C 1000 150 Tablets"
brand"Blackmores"
url"https://www.chemistwarehouse.com.au/buy/57134-blackmores-bio-c-1000-150-tablets"
price / rrp21.99 / 48.99
wasPrice48.99 (only set when below RRP)
savingsAmount / savingsPercent27.00 / 55.11
isOnSpecial / promoLabeltrue / "Better Than Half Price" (the site's own catalogue badge)
currency / isInStock"AUD" / true
isClickAndCollect / isFastDeliverytrue / true
prescriptionType / schedule"Pharmacist Only Medicine" / "S3"
isAppendixH / purchaseLimit / transactionLimitfalse / null / 6
rating / reviewCount4.6286 / 35
imageUrl"https://static.chemistwarehouse.com.au/products/57134/1.jpg" (first image)
categories["Chemist Warehouse Australia", "Vitamins & Supplements"]
categorySlugs["258-medicines", "196-pain-relief"] (the site's category ids and slugs)
salesProjectionScore / isTopPerformer1.1 / true (the site's own popularity ranking; salesRankBuckets carries its ranking buckets)
ingredients"Ascorbic Acid (Vitamin C) ..."
directions / warnings"Adults take 1 tablet a day ..." / "Vitamin supplements should not replace ..."
images["https://static.chemistwarehouse.com.au/products/57134/1.jpg"]
createdAt / scrapedAt"2019-03-04T00:00:00.000Z" / "2026-09-29T04:00:00.000Z"

When Fetch reviews is on, each product record also carries a reviews array plus reviewsTotal and ratingBreakdown. Every review entry carries rating, title, author, content, createdAt, positiveFeedbackCount, negativeFeedbackCount and syndicationName (the review platform that supplied it, when the site reports one); reviewsTotal is the site's own total review count for the product, which can be higher than the number of entries returned if Max reviews per product capped it, and ratingBreakdown is the star-by-star distribution the site publishes.

How to Use

  1. Pick a mode: search (keywords and filters) or url (paste product pages or catalogue/category listing links).
  2. For search mode, add one or more Search keywords, and optionally narrow with Specials / offers, Brand, Category, a price range or In-stock only.
  3. Turn on Fetch reviews to collect individual customer reviews, and set Max reviews per product to cap how many are pulled per item.
  4. Set Max items (and optionally Max pages) to control run size and cost, then click Start.

Search by keyword:

{
"mode": "search",
"queries": ["panadol"],
"maxItems": 30
}

Browse a specials collection with price and stock filters:

{
"mode": "search",
"specialsCategory": "promotions",
"minPrice": 5,
"maxPrice": 50,
"inStockOnly": true,
"sort": "price_asc",
"maxItems": 50
}

URL shapes

URL shapeExampleBehaviour
Product pagehttps://www.chemistwarehouse.com.au/buy/145683/panadol-500mg-16-tabletsOne product, unfiltered.
Product page, bare hosthttps://chemistwarehouse.com.au/buy/145683/panadol-500mg-16-tabletsHost normalised to www, same as above.
Cataloguehttps://www.chemistwarehouse.com.au/cataloguePromotions listing.
Specials collectionhttps://www.chemistwarehouse.com.au/shop-online/3240/clearanceClearance listing.
Categoryhttps://www.chemistwarehouse.com.au/shop-online/130/shampoo-conditionerCategory name resolved against the site's real category list.
Brandhttps://www.chemistwarehouse.com.au/shop-online/587/swisseBrand name resolved against the site's real brand list.
Category with ?page=2https://www.chemistwarehouse.com.au/shop-online/130/shampoo-conditioner?page=2The site ignores the page number: the walk starts from the first page, a warning is logged, and the URL counts as a partial scope (nothing is marked EXPIRED from it).
Site search linkhttps://www.chemistwarehouse.com.au/search?q=panadolScraped as the keyword search "panadol" (the search page itself is never fetched). A search link without a q parameter is skipped.
Sorted listinghttps://www.chemistwarehouse.com.au/shop-online/3240/clearance?sort=pricesort=price maps to Price: low to high unless the Sort input is a price sort.

Links the site answers with 404 (/buy/{id} without a slug, /shop-online/{id} without a slug, /brands/...) and site search links without a q parameter are skipped with a warning in the log. A category or brand name that cannot be matched logs an error and scrapes nothing for that URL.

A product page link whose product is missing from the site's search catalogue is still collected: the actor reads that product page itself for the record. This covers recently launched and re-listed products that the catalogue has not picked up yet. The product page carries the same product fields (price, RRP, stock, images, ingredients, ratings); catalogue-only extras (sales ranking, full category path) come from the catalogue record and are simply absent on such rows. A URL is reported as not found only when the site answers 404 for it (the product is gone). If a product page cannot be read or does not contain the product record, the URL is reported as unreadable in the log and the run counts as incomplete rather than declaring the product gone.

Paste product and listing URLs, with reviews:

{
"mode": "url",
"productUrls": [
"https://www.chemistwarehouse.com.au/buy/145683/panadol-500mg-16-tablets",
"https://www.chemistwarehouse.com.au/shop-online/3240/clearance"
],
"fetchReviews": true,
"maxReviewsPerProduct": 20
}

Narrow a whole category by brand:

{
"mode": "search",
"brand": "Blackmores",
"category": "Vitamins & Supplements",
"maxItems": 100
}

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/chemistwarehouse-com-au-scraper").call(run_input={"mode": "search", "queries": ["panadol"], "maxItems": 30})
for product in client.dataset(run["defaultDatasetId"]).iterate_items():
print(product["name"], product["price"], product["isOnSpecial"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/chemistwarehouse-com-au-scraper').call({ mode: 'search', queries: ['panadol'], maxItems: 30 });
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.

How Max items and Max pages shape a run

Chemist Warehouse's own product search only returns up to 1,000 results for a single query or filter combination. A run stops once Max items is reached, or once Max pages result pages have been walked for the current query, whichever comes first. To reach deeper into a large catalogue, narrow with brand, category, price or a specials collection rather than raising Max items alone.

Resume and recurring updates

  • Resume (resumeFromRunId) continues one interrupted catalogue pull: paste its run or dataset ID and the actor skips every product already saved there, so you don't pay twice. It cannot be combined with an incremental-mode search that already has saved state; the run fails with a clear message asking you to pick one or the other.
  • Incremental mode (incrementalMode) is for scheduled runs over the same search. Each product is classified NEW, UPDATED (with changedFields), UNCHANGED (suppressed and not billed unless emitUnchanged is on), or EXPIRED (only after a run that scanned the whole tracked search, and only with emitExpired on). REAPPEARED is produced only for a product that a previous emitExpired run had already marked EXPIRED, and that is then found again in a later run; until that has happened once, a product that comes back after being missed simply classifies as UPDATED or UNCHANGED, never REAPPEARED. What is compared: every output field (price, was-price, stock, promo flags, name, brand, categories, images, rating, review count and, with Fetch reviews, review entries) decides UPDATED; the scrape timestamp, per-review helpful-vote counters and the site's popularity-ranking fields (salesProjectionScore, isTopPerformer, salesRankBuckets) never do, plus anything listed in ignoreFieldsForChanges. Ignored fields stay in the output. A run capped by Max items or Max pages, or one that hit a search error, never produces EXPIRED rows. stateKey names or shares the stored state; leaving it empty derives a separate state automatically per mode/query/filter/fetch-reviews combination.

Send results into your apps (MCP connectors)

Optionally pipe the scraped products 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 haven't 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

ParameterTypeDefaultDescription
modestringsearchsearch (keyword and filters) or url (paste product or listing URLs).
queriesarray["vitamin c"]Search mode only. One or more keywords. Leave empty to browse the whole catalogue with the filters below.
brandstring(none)Search mode only. Restrict to one brand, exact spelling as shown on the site.
categorystring(none)Search mode only. Restrict to one category, exact spelling as shown on the site.
specialsCategorystring`` (Any, all products)Search mode only. promotions or clearance, or empty for all products.
productUrlsarrayone example per URL shape (see the URL shapes table)URL mode only. Product page URLs return that single product, unfiltered. Catalogue, specials, category and brand listing URLs return multiple products, narrowed by price range, in-stock only and sort order. Leaving this field untouched in URL mode scrapes one example per shape; replace it with your own links.
minPriceinteger(none)Only products priced at or above this amount, in whole dollars.
maxPriceinteger(none)Only products priced at or below this amount, in whole dollars.
inStockOnlybooleanfalseExclude out-of-stock products.
sortstringrelevancerelevance, price_asc, or price_desc.
fetchReviewsbooleanfalseCollect individual customer reviews for each product. Adds one review-enrichment unit per full 10 reviews delivered.
maxReviewsPerProductinteger20Cap on reviews collected per product when Fetch reviews is on (maximum 1000).
maxItemsinteger20Maximum number of products to collect. 0 for no item limit.
maxPagesinteger0Maximum result pages walked per query. 0 means no limit of your own; a hard cap of 1000 pages per query always applies. The run normally stops at Max items first.
resumeFromRunIdstring(none)Continue one interrupted run without re-scraping or re-charging products already collected there.
incrementalModebooleanfalseClassify each product as NEW, UPDATED, UNCHANGED, REAPPEARED, or EXPIRED against the last run's saved state.
ignoreFieldsForChangesarray[]Incremental mode only: output fields (or dotted nested paths such as reviews.createdAt) that never make a product UPDATED or appear in changedFields. They stay in the output.
stateKeystring(none)Name or share an incremental-mode state. Leave empty to derive one automatically from the search settings.
emitUnchangedbooleanfalseAlso return (and bill) products that have not changed since the last run.
emitExpiredbooleanfalseAlso return (and bill) products no longer found, once a run has fully scanned the tracked search.
proxyobject{ "useApifyProxy": true }Connection settings.
mcpConnectorsarray(none)Optional: send a summary of each product to apps you authorized under Integrations.
notionParentPageUrlstring(none)Notion connector only: page under which product pages are created.
maxNotifyListingsinteger50Cap 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.

{
"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.00,
"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"
}

Plan Requirement

The default proxy setting works out of the box: product, catalogue and category pages load through the datacenter lane, and the actor upgrades to a backup connection automatically after repeated blocks within a run (the log then says "Served over the backup connection"). Search pages can be challenged more often, so for large or frequent runs the residential proxy group gives more headroom; pick it under Proxy & connection. If your account has no proxy access, the run fails with a clear message pointing to https://apify.com/pricing instead of returning an empty dataset.

FAQ

How much does it cost?

Pay-per-event pricing: a start charge, a per-product charge for every record in the dataset, and a review-enrichment charge (the detail-enrichment event) when Fetch reviews is on: one unit per full 10 reviews delivered on a product, charged right after that product is saved, so a product with fewer than 10 reviews adds nothing; never charged for a suppressed unchanged row. Max reviews per product and Max pages are capped at 1000. The Pricing tab shows the current rates. Use Max items to cap the cost of any run.

This actor collects only publicly available product and review data. You are responsible for how you use it: follow Chemist Warehouse's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Product descriptions, images and customer reviews may carry their own rights.

Can I get only new or changed products on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then 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 does was-price sometimes stay empty?

wasPrice, savingsAmount, savingsPercent and isOnSpecial are filled in only when the current price is genuinely below the site's own RRP for that product. When a product is priced at RRP, those fields are null or false rather than a fabricated saving; promoLabel separately surfaces the site's own catalogue badge (for example "Clearance" or "In Catalogue") when one is set.

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.

๐Ÿ”— Want more e-commerce data?

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

๐Ÿ›’ Target AU Scraper
Scrape products and customer reviews from Target.com.au. Search by keyword or use...
๐Ÿ›’ Kmart Scraper
Scrape products and customer reviews from Kmart.com.au. Search by keyword or use...
๐Ÿ›’ Myer Scraper
Scrape Myer (myer.com.au) department-store products: name, brand, price, was-price...
๐Ÿ›’ Officeworks Scraper
Scrape Officeworks products by keyword, category, or URL. Extract names, brands, prices...
๐Ÿ›’ Costco AU Scraper
Scrape Costco.com.au products by keyword or product, search and category URLs. Extract...
๐Ÿ›’ Amazon Australia Product & Reviews Scraper
Scrape Amazon Australia (amazon.com.au) products and customer reviews. Search by keyword...

๐Ÿ‘‰ Browse all abotapi scrapers

๐Ÿ’ฌ Support

  • ๐Ÿž Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
  • ๐Ÿ› ๏ธ Need another site, extra fields or a private build? Email contact@abotapi.com.
  • โญ Enjoying it? A quick review on the actor page helps other users find it.