Woolworths AU Scraper at a glance
Woolworths AU Scraper is a ready-to-run Apify actor from abotapi for collecting ecommerce data. Its documented output includes name, full title, brand, price and was, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.20 per 1,000 results on the Apify Free plan and from $1.50 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
- $2.20 per 1,000 results (Free plan), from $1.50 on paid plans
- Output
- Documented below · JSON, CSV, Excel
- Inputs
- 26 options
- Run success
- 100.0% of completed public runs in the last 30 days
Scrape Woolworths Australia (woolworths.com.au) grocery products and reviews. Search by keyword or paste product / search links. Returns name, brand, price, was price, unit price, pack size, specials, availability, images, category, nutrition, allergens, ingredients, rating and customer reviews.
What Woolworths AU Scraper can do
- Three ways to start. Search by keyword with filters, browse a whole Woolworths specials category, or paste product, category, specials or search links, including bare numeric product codes.
- Full price picture. Current price, strike-through was price, savings amount and percentage, unit (cup) price, offer label, and multibuy or member-price details when they apply.
- A separate in-store price. Woolworths prices delivery/pickup and in-store purchases as two independent offers on the same product; this actor returns both, with no extra request needed.
- Deep specials coverage. Walk any single promotions category, or sweep every currently discounted product in one run, including markdowns that never get a promotions-menu category.
- Full product detail on demand. Rich description, department and category, country of origin, health star rating, ingredients, allergens, dietary statement, storage instructions, the nutrition panel, and sibling variants.
- Ratings and reviews. Aggregate rating, star distribution and a capped list of customer reviews per product.
Choose what to collect
These inputs let you configure Woolworths AU Scraper - Products, Prices & Reviews. Open the actor on Apify to enter your values and review the current options.
| Input | What it controls |
|---|---|
modestring · required | Choose 'search' to use keywords and filters, or 'url' to scrape specific Woolworths Australia product or search URLs (or bare product codes) you paste below. |
queriesarray | One or more keywords to search, for example 'milk' or 'tim tam'. Each keyword is searched separately. |
specialsCategorystring | Optional. Browse a whole Woolworths specials / offers category instead of (or as well as) searching keywords. Leave blank to skip. • "All Specials (complete)" is the one to pick to catch EVERY currently-discounted product. Woolworths' own promotions menu is a curated selection, so a genuine markdown can sit in none of its buckets; this option instead sweeps every department for the products the store currently flags as on special. It returns only products whose price is actually reduced right now (you do not need to set "On special only" as well): markdowns, Buy More Save More multibuys and member prices are kept, while Everyday Low Price, Lower Shelf Price and Bundles are excluded, the store files those under specials but they are regular low shelf prices, not offers. It returns considerably more than the buckets do, so set "Max products" to bound the run. • "All Specials & Offers" and the individual buckets below walk the promotions menu exactly as it is published (Half Price, Buy More Save More, and so on). In URL mode you can instead paste a specials listing link such as https://www.woolworths.com.au/shop/browse/specials/half-price. |
urlsarray | Product, category, specials, product-group or search URLs (or bare numeric product codes) to scrape. Supported link shapes: /shop/productdetails/, /shop/browse/ (including /shop/browse/specials/...), /shop/productgroup/ (curated collections such as "our newest range"), and /shop/search/products?searchTerm=... Listing links are walked across all their result pages. Multiple entries supported. Pasted pageNumber starts the walk at that page (partial scope) and sortBy (PriceAsc, PriceDesc, ProductName, SavingsAmountDesc, TraderRelevance) overrides the Sort by input for that link. Leaving the field untouched scrapes one example of each shape. |
sortBystring | Result ordering, as offered by Woolworths. |
minRatingstring | Optional. Only keep products whose average customer rating is at least this many stars. Requires 'Fetch product details' (ratings are collected during enrichment). |
specialsOnlyboolean | Optional. Keep only products currently on special / half price. Applies to any keyword, specials category or pasted URL. |
Show 19 more inputs
| Input | What it controls |
|---|---|
excludeSpecialsCategoriesarray | Drop products belonging to these specials categories instead of collecting and paying to enrich them. Applies to the specials category above, a pasted specials listing URL, and (best-effort, for the categories the storefront flags on the product card itself) keyword searches. Excluding 'All Specials & Offers' drops every product currently on special. Leave empty to exclude nothing (existing behaviour). |
excludeCategoriesarray | Optional. Departments to leave out, so they are never collected and never charged. Use the name from a browse link, for example 'beer-wine-spirits', 'everyday-market' or 'pet'. A product is skipped when it belongs to any listed department, even if it also appears under one you keep - the storefront files the same product under several at once. To skip promo types (half price, online only) instead, use Exclude specials categories above. |
includeMarketplaceboolean | Also keep products shipped by third-party Everyday Market sellers. Category listings carry tens of thousands of these extra items per department, so they are excluded by default, only products sold directly by Woolworths are returned. Tick to include them. |
minPriceinteger | Optional. Only keep products priced at or above this amount. |
maxPriceinteger | Optional. Only keep products priced at or below this amount. |
fetchDetailsboolean | Collect each product's full detail (rich description, barcode, department / category, country of origin, health-star rating, ingredients, allergens, dietary statement, storage, nutrition panel, variants) plus its aggregate rating. |
fetchReviewsboolean | Also collect customer reviews for each product (star rating, review text, author display name, date and source), plus the aggregate rating and star distribution. |
maxReviewsPerProductinteger | Cap on reviews collected per product when 'Fetch customer reviews' is on. Values above 500 are treated as 500. Use 0 for the 500 maximum. |
maxItemsinteger | Maximum number of products to return across the whole run (hard maximum 1,000,000). Use 0 for unlimited. |
maxPagesinteger | Optional bound on how many result pages are walked per keyword or category or URL (36 products per page). Leave empty to walk every result page until the store runs out. This does not cap the number of products; Max products does that. |
resumeFromRunIdstring | 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. |
incrementalModeboolean | 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. A product counts as UPDATED when something about it changed: price, was-price and savings, specials and promotion flags, in-store price, availability or stock, size, name, and the details and rating figures; changedFields names what moved. Review text, the search path that found the product, image link hosts and the order of variants never cause UPDATED (they are still returned). Turn on Emit unchanged or Emit expired only when you also want those rows returned (and billed). State is kept separately for each search and filter setup; use State key to name or deliberately share a monitoring campaign. |
stateKeystring | 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 search and filter settings. |
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 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: never when Max products or Max pages capped it, Resume was used, a pasted link starts at page 2 or later, or a result page failed to load. |
ignoreFieldsForChangesarray | Optional. Output field names (for example 'cupString' or 'images') that should NOT make a product count as UPDATED and are left out of changedFields. The fields are still returned on every row. Useful when one field changes on every run for your setup. Leave empty to compare everything listed in the Incremental changes description. Changing this list never re-bills the products you already track. |
mcpConnectorsarray | 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). |
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.
nameNametitleFull titlebrandBrandpricePricewasPriceWassavingsAmountSave $savingsPercentSave %promoLabelOffercupStringUnit pricepackageSizeSizeisOnSpecialOn special (boolean)ratingRatingShow 29 more fields
reviewCountReviewsratingDistributionStar distribution (object)isInStockIn stock (boolean)stockcodeCodecategoryCategorythumbnailImageImage (image)reviewsCollectedReviews collectedurlURL (link)departmentsDepartments (array)departmentNamesDepartment names (array)ageRestrictedAge restricted (boolean)inStorePriceIn-store priceinStoreIsOnSpecialIn-store on special (boolean)barcodeBarcodeingredientsIngredientsallergenContainsAllergens (contains)allergenMayContainAllergens (may contain)nutritionNutrition (object)healthStarRatingHealth starsbreadcrumbsBreadcrumbs (array)reviewsreviewsbodyReviewauthorAuthordateDatesyndicatedFromSourcechangeTypeChangechangedFieldsChanged fields (array)firstSeenAtFirst seenlastSeenAtLast seenExample output
An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.
{
"stockcode": "100000",
"name": "Full Cream Milk 2L",
"displayName": "Full Cream Milk 2L",
"title": "Full Cream Milk 2L",
"brand": "Example Brand",
"url": "https://www.woolworths.com.au/shop/productdetails/100000/full-cream-milk",
"price": 3.1,
"wasPrice": 3.9,
"savingsAmount": 0.8,
"savingsPercent": 21,
"isOnSpecial": true,
"isHalfPrice": false,
"isEdrSpecial": false,
"promoLabel": "Prices Dropped",
"savingsLabel": "Save $0.80",
"promotionType": "Special",
"cupPrice": 1.55,
"cupMeasure": "1L",
"cupString": "$1.55 / 1L",
"packageSize": "2L",
"unit": "Each",
"currency": "AUD",
"barcode": "9300000000000",
"gtinFormat": 13,
"isAvailable": true,
"isInStock": true,
"isNew": false,
"isOnlineOnly": false,
"ageRestricted": false,
"isTobacco": false,
"inStorePrice": 3.5,
"inStoreWasPrice": 3.9,
"inStoreSavingsAmount": 0.4,
"inStoreSavingsPercent": 10,
"inStoreIsOnSpecial": true,
"inStoreCupPrice": 1.75,
"inStoreCupString": "$1.75 / 1L",
"image": "https://www.woolworths.com.au/wowproductimages/large/100000.jpg",
"thumbnailImage": "https://www.woolworths.com.au/wowproductimages/small/100000.jpg",
"departments": [
"dairy-eggs-fridge",
"lunch-box"
],
"departmentIds": [
"1_C2FCE2B",
"1_9E92C35"
],
"departmentNames": [
"Dairy, Eggs & Fridge",
"Lunch Box"
],
"richDescription": "A fresh Australian full cream milk, rich and creamy.",
"department": "Dairy, Eggs & Fridge",
"category": "Milk",
"subCategory": "Full Cream Milk",
"countryOfOrigin": "Made in Australia",
"healthStarRating": "4.5",
"ingredients": "Full cream milk.",
"allergenContains": "Milk",
"dietaryStatement": "Vegetarian",
"storageInstructions": "Keep refrigerated below 4C.",
"nutrition": {
"servingsPerPack": "8",
"servingSize": "250mL"
},
"rating": 4.6,
"ratingCount": 128,
"reviewCount": 54,
"ratingDistribution": {
"1": 2,
"2": 3,
"3": 7,
"4": 20,
"5": 96
},
"reviews": [
{
"rating": 5,
"body": "Fresh and creamy, our family buys it every week.",
"author": "sampleShopper",
"date": "2025-02-14T06:01:00.000Z",
"syndicatedFrom": "woolworths"
}
],
"reviewsCollected": 1,
"searchMode": "search"
}Ways to use this data
- Price and specials monitoring: track price, was price and offer labels across a shopping list or a whole department, and catch markdowns the promotions menu never lists.
- Grocery comparison and deal sites: publish weekly specials roundups using savings amount, unit price and multibuy details.
- Nutrition and dietary research: collect ingredients, allergens, health star rating and dietary statements at scale.
- Review and sentiment analysis: gather star ratings and review text per product for brand or category studies.
- Catalog and compliance auditing: filter or flag alcohol and tobacco listings using the built-in restricted-item flags.
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 Woolworths AU Scraper return?
The documented output for Woolworths AU Scraper includes name, full title, brand, price, was, save $, save % and offer. Availability of each field depends on the source page and the selected mode.
How much does Woolworths AU Scraper cost?
It costs $2.20 per 1,000 results on the Apify Free plan and from $1.50 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 returns only new, updated and reappeared products, and unchanged ones are not billed unless you turn on Emit unchanged.
What is the difference between Resume and Incremental mode?
They solve different problems. Resume continues ONE specific interrupted run: paste its run or dataset ID and already-collected products are skipped once. Incremental mode is for running the same search or category again and again, for example daily, and remembers its own baseline between runs so a recurring run returns only what changed. Use Resume to finish a run that stopped partway; use Incremental mode for ongoing monitoring.
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 your results into Notion, Linear or Airtable.
