Woolworths Scraper — Prices, Specials, Barcodes & Nutrition avatar

Woolworths Scraper — Prices, Specials, Barcodes & Nutrition

Pricing

from $1.30 / 1,000 results

Go to Apify Store
Woolworths Scraper — Prices, Specials, Barcodes & Nutrition

Woolworths Scraper — Prices, Specials, Barcodes & Nutrition

Woolworths Australia scraper: export woolworths.com.au products with price, was price, specials, half-price & multibuy deals, unit price, GTIN barcode, ingredients, allergens, nutrition, health star rating and ratings. Search, categories, specials or the whole ~25,000-product range. No login.

Pricing

from $1.30 / 1,000 results

Rating

0.0

(0)

Developer

Logiover

Logiover

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Woolworths Scraper

Every product on woolworths.com.au as clean data — shelf price, was price, specials, half-price and multibuy deals, unit (cup) price, GTIN barcode, ingredients, allergens, nutrition, Health Star Rating, country of origin and customer ratings — exported to JSON, CSV or Excel.

Independent tool. Not affiliated with, endorsed by, or sponsored by Woolworths Group Limited or Woolworths Supermarkets. "Woolworths" is a trademark of its owner and is used here only to describe the website this Actor reads.

Woolworths Scraper is a fast, dependable Woolworths API alternative for anyone who needs Australian grocery prices as data instead of web pages. It lets you scrape woolworths.com.au — the online store of Woolworths Supermarkets Australia — by keyword, by category URL, by stockcode or barcode, or take the whole Woolworths range of about 25,000 products in a single run, with no login, no cookies, no browser and no API key. Use it as a Woolworths price tracker, a daily feed of Woolworths specials and half-price data, a Woolworths barcode (GTIN) database, a source of product ingredients & allergens data, or the backbone of an Australian grocery prices dataset, and export to CSV, Excel or JSON (or XML, HTML and RSS) straight from the Apify dataset, the API or any of the integrations below.

Each row is one product with 78 fields: the price the shelf shows and the price it was, savings in dollars and percent, the special type (half price, lower shelf price, everyday low price, seasonal price, multibuy), the multibuy deal ("2 for $8.00"), the cup price ("$2.20 / 1L"), the 13-digit barcode (EAN/GTIN), brand, pack size, images, availability and purchase limit, the full department > category > subcategory path plus Woolworths' internal merchandise hierarchy, ingredients, allergens ("contains" and "may contain"), dietary and lifestyle claims, the Health Star Rating, a parsed nutrition panel per 100 g and per serve, star ratings with review counts, and — one switch away — the Australian country-of-origin label. Optional store-level prices by postcode cover the regions where Woolworths prices differ. It is built for supermarket price monitoring in Australia — FMCG brands, category managers, price-comparison apps, nutrition apps, analysts, economists and journalists who track grocery prices week after week — and it uses the same field names as our Coles dataset, so both supermarkets stack into one table.


Table of contents


At a glance

Sourcewoolworths.com.au — Woolworths Supermarkets Australia, read through the same JSON the website itself loads
CoverageWoolworths' own range: 24,990 unique products in one run (measured 2026-10-18). Optional: the Everyday Market marketplace (third-party sellers, about 1.19 million listings on 2026-10-18)
What to scrapeSearch terms · category URLs or names · the whole catalogue · all specials & offers · half-price specials · stockcodes, barcodes or product URLs
Speed1,000 products in 18 s with the default settings, 74 s with the country-of-origin option · the whole range in 124 s
Fields78 per product: price, was price, savings, specials, multibuy, cup price, barcode, brand, size, images, availability, purchase limit, categories, ingredients, allergens, dietary claims, Health Star Rating, nutrition per 100 g and per serve, country of origin, ratings, store
Store pricesOptional, by postcode or store number (prices differ in some regions — measured below)
OutputApify dataset → JSON, CSV, Excel, XML, HTML, RSS · REST API · webhooks · Make, Zapier, n8n, Google Sheets, Airtable, BI tools, warehouses, MCP
NeedsNothing: no Woolworths account, no login, no cookies, no proxy setup
PricePay per product — from $1.30 per 1,000 products, compute and proxies included (What you pay)

All numbers on this page were measured on the Apify platform on 2026-10-18 unless the line says otherwise.


What you get

One row per product. Fields that do not apply are null — never an empty string or a guessed zero.

GroupFieldsExample values
IdentityproductId, stockcode, barcode, retailer, name, brand, title, size, variety, url, imageUrl, imageUrls33557 · 9300639500041 · Devondale · Devondale Pure Full Cream Long Life Milk 1L · 1L
Priceprice, wasPrice, savings, savingsPercent, instorePrice2.5 · 5 · 2.5 · 50
Unit (cup) priceunitPrice, unitOfMeasure, unitPriceText, isSoldByWeight0.25 · 100G · $0.25 / 100G · false
Specials & offersisOnSpecial, isHalfPrice, isMultibuy, isOnlineOnly, specialType, promoLabel, multibuyQuantity, multibuyPrice, multibuyLabel, multibuyUnitPrice, priceNote, offerIdHALF_PRICE · Half price · Save $2.50 · 2 for $8.00 · Was $6.60 - 25/08/2026
AvailabilityisAvailable, isInStock, purchaseLimit, isNew, isAgeRestricted, deliveryRestrictiontrue · 36 · Remote Orders Restricted Goods
Ratingsrating, ratingCount, reviewCount4.45 · 11 · 11
Categoriesdepartment, category, subCategory, categoryPath, allCategoryPaths, departmentId, categoryId, subCategoryIdDairy, Eggs & Fridge > Milk > Long Life Milk
Merchandise hierarchymerchandiseDepartment, merchandiseCategory, merchandiseSubCategory, merchandiseSegmentFRESH CONVENIENCE · DAIRY - MILK · WHOLE 1.5L TO 2L
Food datadescription, ingredients, allergens, allergensMayContain, allergenFreeFrom, lifestyle, lifestyleClaims, healthStarRating, servingSize, servingsPerPackage, nutritionPer100g, nutritionPerServing, nutritionText, storageInstructionsMilk | Gluten | Soy · Gluten Free | Vegan · 4.5 · {"energyKj":262,"proteinG":3.2}
Country of origin (option)countryOfOrigin, countryOfOriginStatement, australianIngredientsPercentAustralia · Made in Australia from at least 95% Australian ingredients · 95
MarketplaceisMarketplaceProduct, sellerNametrue · KG Superstore
Store & provenancestoreId, storeName, storeState, source, scrapedAt5652 · Darwin City · NT · search: milk

The Output tab has four ready-made views: Overview, Specials & offers, Ingredients & nutrition and Catalogue data.


Who uses it — 15 workflows

1. FMCG brands and key-account teams

Run your brand names (or the category URLs you sell into) every Wednesday morning, when Woolworths' weekly specials change, and compare price, wasPrice, promoLabel and multibuyLabel week over week: which competitor went half price, for how long, and at what cup price.

2. Category managers and retail buyers

Map a whole category — every product in Dairy, Eggs & Fridge > Milk with size, unitPrice per litre, private label vs branded and merchandiseSegment — and build the price ladder and share of shelf by brand in one pivot table.

3. Price-comparison and grocery apps

Pull the whole catalogue nightly or weekly, key it on barcode and join it with Coles data (same field names) to show the cheaper supermarket per product and per unit; imageUrl, title and url are ready for product cards.

4. Nutrition, allergen and diet apps

Food rows carry ingredients, allergens, allergensMayContain, allergenFreeFrom, lifestyle, healthStarRating and a parsed nutrition panel (nutritionPer100g.sugarsG, .sodiumMg …): "gluten free and Health Star Rating ≥ 4" is one line of SQL.

5. Dietitians, meal planners and recipe sites

Search the ingredients your recipes need ("rolled oats", "greek yoghurt") and attach a live price and cup price to every recipe line — a costed weekly meal plan, refreshed on every run.

6. Retail and market analysts

Measure promotional intensity — share of each brand's range on special, average savingsPercent, how often half price returns — from a weekly All specials & offers run (about 7,000 products in under a minute).

7. Economists and inflation trackers

Snapshot a fixed basket by stockcode (or the whole range) weekly: unitPrice normalises pack sizes, wasPrice separates promotions from shelf-price changes, merchandiseCategory maps to CPI-style classes.

8. Journalists and consumer advocates

Check "Prices dropped" claims against Woolworths' own notes (priceNote: Was $6.60 - 25/08/2026), spot shrinkflation by tracking size and unitPrice, and compare regions with the store prices option.

9. Marketplace sellers and Everyday Market partners

Turn on Include Everyday Market for marketplace listings with sellerName, price and category — competitor pricing for third-party sellers.

10. AI, RAG and shopping-assistant builders

Load structured product knowledge into a vector store, or call the Actor as a tool through the Apify MCP server: "vegan snacks under $4 with Health Star Rating 4+" becomes one query.

11. Public-health and academic researchers

Study the food environment: Health Star Ratings, sugar and sodium per 100 g by category, "may contain" warnings, and the share of Australian ingredients (australianIngredientsPercent).

12. Market research and consumer insight agencies

Share of shelf by brand, price-point clusters, launches (isNew) and assortment changes between snapshots — one dataset per week.

13. Supply-chain, procurement and wholesale teams

Watch purchaseLimit (lowered when stock is tight), isAvailable and deliveryRestriction to spot supply problems by category early.

14. Data engineers and BI teams

Schedule the catalogue into BigQuery, Snowflake, Postgres or S3 via the API or a webhook — a daily woolworths_products table keyed on productId and barcode.

15. Regional pricing analysts

Prices differ between some Woolworths stores. Set postcode (e.g. 0800 for Darwin, 6000 for Perth) and compare the store's prices with the default online prices — on 2026-10-18 109 of 191 milk products stocked at Darwin City were priced differently, and a Sydney Metro store charged more for 12 of 119 sampled products.


Cookbook — 16 ready-to-run inputs

Paste any of these into the JSON tab of the input form, or send them as the body of an API call. Fields you leave out use their defaults.

Recipe 1 — The whole Woolworths catalogue, every week

{
"mode": "catalog",
"maxItems": 0
}

Every department, de-duplicated by stockcode: 24,990 products in 124 s on 2026-10-18. Schedule it weekly (Wednesday, after the specials change) — see Recipe 11.

Recipe 2 — Everything, including the country-of-origin label

{
"mode": "catalog",
"maxItems": 0,
"includeDetails": true
}

Adds countryOfOrigin, countryOfOriginStatement and australianIngredientsPercent, and the shown price of products that are out of stock online, with one product-page request per product. Measured on 2026-10-18: 10,471 products from four departments in 704 s (about 15 products per second); at that rate the whole range takes roughly 28 minutes.

Recipe 3 — One category

{
"mode": "categories",
"categoryUrls": ["https://www.woolworths.com.au/shop/browse/dairy-eggs-fridge/milk"],
"maxItems": 0
}

Any department, category or subcategory URL from your browser works.

Recipe 4 — Several categories by name

{
"mode": "categories",
"categoryUrls": ["Long Life Milk", "Coffee", "Breakfast Cereal"],
"maxItems": 3000
}

Names are matched against Woolworths' live category tree; an inexact name or old URL uses the closest category and SUMMARY says which.

Recipe 5 — Search terms (top results by relevance)

{
"mode": "search",
"searchTerms": ["coffee beans", "oat milk", "gluten free bread"],
"maxItems": 300,
"sortBy": "relevance"
}

Each term gets a fair share of maxItems; spare room goes to terms with more results.

Recipe 6 — Every product on special or in an offer

{
"mode": "specials",
"maxItems": 0
}

Woolworths' own "Specials" filter in every department: 6,976 products in 54 s on 2026-10-18 — price cuts, half price, multibuys, lower shelf prices and online-only deals.

Recipe 7 — Half-price specials only

{
"mode": "halfPrice",
"maxItems": 0
}

The Half Price page: 1,844 products in 14 s on 2026-10-18.

Recipe 8 — A brand's whole range

{
"mode": "search",
"searchTerms": ["Devondale"],
"maxItems": 0
}

Woolworths' search matches brand names; keep rows whose brand equals the brand to drop stray matches.

Recipe 9 — Barcode (GTIN) lookup

{
"mode": "products",
"productIds": ["9300639500041", "9310053108327", "41554572308"]
}

EAN-13, UPC and GTIN-8/14 codes are matched exactly; barcodes Woolworths does not sell are listed in SUMMARY.

Recipe 10 — A fixed basket by stockcode or product URL

{
"mode": "products",
"productIds": [
"33557",
"406949",
"https://www.woolworths.com.au/shop/productdetails/614440/riverina-reduced-fat-fetta-cheese"
]
}

Stockcodes (the number in the product URL) are read 50 per request — a 500-product basket takes seconds.

Recipe 11 — Price-change tracking with a schedule

  1. Save one of the inputs above as a task (Console → the Actor → Save as a new task).
  2. Add a schedule to the task, e.g. 0 7 * * 3 (07:00 every Wednesday) in your time zone.
  3. After each run, compare the new dataset with the previous one on productId: a changed price is a price change, a changed wasPrice with isOnSpecial: false is a shelf-price change, and isOnSpecial flipping is a promotion starting or ending. The Python snippet in Integrations shows the comparison.

Recipe 12 — Prices at a particular store (Darwin, Perth, a Metro store …)

{
"mode": "categories",
"categoryUrls": ["https://www.woolworths.com.au/shop/browse/dairy-eggs-fridge/milk"],
"postcode": "0800",
"maxItems": 0
}

The nearest Woolworths pick-up store to the postcode is used (here Darwin City, NT, store 5652); price, wasPrice, specials and the cup price are that store's, and products the store does not stock are left out. Use storeId instead of postcode if you know the store number.

Recipe 13 — A nutrition dataset

{
"mode": "catalog",
"maxItems": 0,
"includeRatings": false
}

Then keep rows where nutritionPer100g is not empty: 46.1% of the range carries a parsed nutrition panel (energy, protein, fat, saturated fat, carbohydrate, sugars, sodium and, where printed, fibre, trans fat, calcium, potassium …).

Recipe 14 — Gluten-free (or nut-free, vegan …) shopping list

{
"mode": "search",
"searchTerms": ["gluten free"],
"maxItems": 0
}

Filter on allergenFreeFrom contains Gluten Free or lifestyle contains Gluten Free, and check allergensMayContain for traces.

Recipe 15 — Merge with Coles data

Run this Actor and our Coles scraper with comparable inputs, then stack or join the two datasets: the core fields share their names — productId, name, brand, title, size, url, imageUrl, barcode, price, wasPrice, savings, isOnSpecial, isHalfPrice, isMultibuy, multibuyLabel, unitPrice, unitOfMeasure, unitPriceText, isAvailable, categoryPath, ingredients, allergens, scrapedAt. Join on barcode for the same product at both supermarkets; compare unitPrice (same unitOfMeasure) across pack sizes.

Recipe 16 — Everyday Market marketplace listings

{
"mode": "categories",
"categoryUrls": ["https://www.woolworths.com.au/shop/browse/everyday-market/toys-games/toys"],
"includeEverydayMarket": true,
"maxItems": 0
}

Marketplace rows have isMarketplaceProduct: true and the sellerName. Woolworths answers at most 10,000 products per category; bigger ones are split automatically (see Scale and speed).


Tutorial: your first run in the Apify Console

  1. Open the Actor and click Try for free (or Start if you already use it). A free Apify account is enough.
  2. Choose what to scrape in What to scrape: Search terms, Category URLs, Whole catalog, All specials & offers, Half-price specials only, or Products by stockcode / barcode / URL.
  3. Fill in the matching field — e.g. type milk into Search terms, or paste a category URL from woolworths.com.au into Category URLs.
  4. Set Max results. The form starts at 50 so a first run takes seconds; 0 means no limit.
  5. Optional: tick Specials only, turn on Include country of origin, or enter a postcode for store prices.
  6. Click Start. Rows appear in the Output tab while the run is going; the status line shows progress ("Saved 800/1,000 products · 28 pages · 59 s").
  7. Export: Output → Export → CSV, Excel (XLSX), JSON, XML, HTML or RSS. Pick a view (Overview, Specials & offers, Ingredients & nutrition, Catalogue data) to export only those columns.
  8. Automate: Save as a new task, then add a schedule and, if you like, a Google Sheets, Slack or webhook integration from the task's Integrations tab.

Tutorial: run it from the API

  1. Get your API token from Apify Console → Settings → API & Integrations.
  2. Small runs (up to a few thousand products) — one synchronous call returns the rows:
curl -X POST "https://api.apify.com/v2/acts/logiover~woolworths-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN&format=json" \
-H "Content-Type: application/json" \
-d '{"mode":"search","searchTerms":["milk"],"maxItems":200}'

Use &format=csv or &format=xlsx for a file instead of JSON. 3. Big runs (the whole catalogue) — start the run, then fetch the dataset when it has finished (or let a webhook tell you):

curl -X POST "https://api.apify.com/v2/acts/logiover~woolworths-scraper/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode":"catalog","maxItems":0}'
# -> data.id (run id) and data.defaultDatasetId
curl "https://api.apify.com/v2/actor-runs/RUN_ID?token=YOUR_TOKEN" # status: RUNNING / SUCCEEDED
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?format=csv&token=YOUR_TOKEN" > woolworths.csv
  1. The run's SUMMARY record (key-value store) explains the outcome: rows saved, matching products on Woolworths, pages read, why the run stopped, notes about inputs. Read it with GET /v2/actor-runs/RUN_ID/key-value-store/records/SUMMARY.

Input reference

FieldTypeDefaultWhat it does
modestringsearchsearch · categories · catalog · specials · halfPrice · products (see the cookbook).
searchTermsarray of strings[]Keywords as typed on woolworths.com.au. One search per term.
categoryUrlsarray of strings[]Category URLs (/shop/browse/...), category names (Long Life Milk), search URLs (/shop/search/products?searchTerm=...) or product URLs.
productIdsarray of strings[]Stockcodes (33557), barcodes (9300639500041) or product URLs.
maxItemsinteger1000Unique products to save across the run. 0 = no limit.
specialsOnlybooleanfalseOnly products on special or in an offer (Woolworths' own Specials filter), in any mode.
includeUnavailablebooleantrueKeep products that are out of stock online right now (about 4% of the range).
includeEverydayMarketbooleanfalseAdd the Everyday Market marketplace (third-party sellers). Off = products sold by Woolworths.
sortBystringrelevanceOrder for a search when only its top is taken: relevance, name, priceAsc, priceDesc. A search read to the end is always read in name order (no product skipped).
includeRatingsbooleantrueStar rating, rating count and review count (one extra request per 150 products).
includeDetailsbooleanfalseCountry-of-origin label, Australian-ingredients %, and the shown price of products that are out of stock online (one extra request per product, about 4× the run time).
postcodestring—4-digit postcode: prices, specials and availability of the nearest Woolworths pick-up store.
storeIdstring—A Woolworths store number instead of a postcode.
proxyConfigurationobjectApify ProxyConnection settings. The default works; no residential proxy is needed.

Validation: an unknown mode falls back to search; a postcode must be 4 digits and a store number 1–5 digits; inputs that match nothing are reported in the run's SUMMARY and status message instead of silently widening the search.


Output data dictionary

Fill rates were measured on the whole-catalogue run of 2026-10-18 with the default settings (24,990 products); the three country-of-origin fields, which need the option, on the 10,471-product run with the option on (four departments: Pantry, Beauty, Personal Care, Health & Wellness). Fields that only apply to some products (multibuy, marketplace, store) are explained in the "Meaning" column.

FieldTypeMeaningFilledExample
productIdstringWoolworths stockcode as text — the stable product key (same name as in our Coles rows).100.0%717730
stockcodenumberWoolworths stockcode, the number in the product URL.100.0%717730
retailerstringAlways Woolworths — handy when stacking supermarkets.100.0%Woolworths
namestringProduct name without the pack size.100.0%Ayam Nasi Goreng Paste
brandstringBrand (Woolworths / Macro for private label).99.3%Ayam
titlestringFull display name including the size, as on the shelf tile.100.0%Ayam Nasi Goreng Paste 185g
sizestringPack size as Woolworths writes it (1L, 6 pack, per 100g, each).100.0%185g
varietystringVariety / flavour where Woolworths lists one.74.5%Paste
urlstringProduct page on woolworths.com.au.100.0%—
imageUrlstringMain product image (large).100.0%—
imageUrlsarrayAll product images (large), main image first.100.0%—
barcodestringGTIN / EAN barcode (13 digits for most products; 8, 12 or 14 for some; empty for marketplace listings).100.0%9556041612753
pricenumberCurrent price in AUD for the listed size (per 100 g etc. for products sold by weight).95.6%4
wasPricenumberRegular price; equals price when the product is not on special.100.0%4
savingsnumberSaving in AUD while on special.23.5%1
savingsPercentnumberSaving as a percentage of wasPrice.23.5%25
instorePricenumberPrice Woolworths lists for buying in store (same as price for almost all products).95.6%4
isOnSpecialbooleanOn special (temporary price cut).100.0%false
isHalfPricebooleanWoolworths half-price special.100.0%false
isMultibuybooleanA quantity deal applies ("2 for $8.00").100.0%false
isOnlineOnlybooleanOnline-only special.100.0%false
specialTypestringHALF_PRICE, SPECIAL, LOWER_SHELF_PRICE, EVERYDAY_LOW_PRICE, SEASONAL_PRICE or MULTIBUY.43.4%EVERYDAY_LOW_PRICE
promoLabelstringThe offer label as shown ("Half price · Save $2.50", "Lower shelf price").38.7%Everyday low price
multibuyQuantitynumberQuantity of the multibuy deal.4.7%2
multibuyPricenumberPrice for that quantity.4.7%17.6
multibuyLabelstringMultibuy text, e.g. "2 for $8.00".4.7%2 for $17.60
multibuyUnitPricestringUnit price when bought on the multibuy deal.4.4%$3.52/100G
priceNotestringPrice note under the price: previous price and date ("Was $6.60 - 25/08/2026"), container-deposit bonus, etc.8.5%Was $5 - 11/11/2025
offerIdstringWoolworths offer id shared by all products in the same promotion.29.5%25405369
unitPricenumberCup (unit) price in AUD per unitOfMeasure.82.1%2.16
unitOfMeasurestringUnit of the cup price: 100G, 100ML, 1L, 1KG, 1EA, 100EA …82.1%100G
unitPriceTextstringCup price as displayed ("$0.25 / 100G").82.1%$2.16 / 100G
isSoldByWeightbooleanSold by weight (deli, loose produce): price is for the listed size, unit price per kg.100.0%false
isAvailablebooleanCan be bought online right now.100.0%true
isInStockbooleanIn stock online.100.0%true
purchaseLimitnumberMaximum quantity per order (kg for products sold by weight).100.0%7
isNewbooleanMarked as new by Woolworths.100.0%false
isAgeRestrictedbooleanLiquor or other age-restricted product.100.0%false
deliveryRestrictionstringDelivery restriction message ("Remote Orders Restricted Goods", "Afternoon delivery & pick up").4.9%Remote Orders Restricted Goods
isMarketplaceProductbooleanEveryday Market listing from a third-party seller.100.0%false
sellerNamestringMarketplace seller (marketplace listings only).0.0%—
ratingnumberAverage star rating 1–5 (rated products only).33.8%5
reviewCountnumberNumber of written reviews (0 when none).100.0%0
ratingCountnumberNumber of star ratings (0 when none).100.0%0
departmentstringDepartment (aisle group) on woolworths.com.au, the product's home aisle.100.0%Pantry
categorystringCategory within the department.100.0%International Foods
subCategorystringSubcategory within the category.100.0%Asian
categoryPathstringDepartment > Category > Subcategory.100.0%Pantry > International Foods >…
allCategoryPathsstringEvery aisle the product is listed in, pipe-separated (when more than one).47.4%Pantry > International Foods >…
departmentIdstringWoolworths node id of the department.100.0%1_39FD49C
categoryIdstringWoolworths node id of the category.100.0%1_53601CD
subCategoryIdstringWoolworths node id of the subcategory.100.0%1_A43B787
merchandiseDepartmentstringWoolworths internal merchandise department.99.5%GROCERIES
merchandiseCategorystringInternal merchandise category.99.5%ETHNIC / GOURMET FOOD
merchandiseSubCategorystringInternal merchandise subcategory.99.5%ASIAN FOODS
merchandiseSegmentstringInternal merchandise segment (finest level).99.5%SPICE / PASTES
descriptionstringProduct description as plain text.93.2%Traditionally used as a base f…
ingredientsstringIngredients list.66.9%Onion, Water, Soybean Oil, Dar…
allergensstringAllergens the product contains, pipe-separated.32.6%Soy
allergensMayContainstring"May contain" (traces) allergens.21.3%Peanuts
allergenFreeFromstringFree-from claims ("Gluten FreeEgg Free").46.0%
lifestylestringDietary and lifestyle statements ("Gluten FreeVeganLow Fat").
lifestyleClaimsstringCertified lifestyle claims ("Halal", "Kosher", "Organic", "Vegan").13.2%Vegan
healthStarRatingnumberHealth Star Rating 0.5–5.24.7%3.5
servingSizestringServing size from the nutrition panel.45.6%46 g
servingsPerPackagenumberServings per pack.45.2%4
nutritionPer100gobjectNutrition per 100 g / 100 mL (keys listed below the table).46.1%{"carbohydrateG": 14.9, "energ…
nutritionPerServingobjectNutrition per serving.45.9%{"carbohydrateG": 6.9, "choles…
nutritionTextstringThe nutrition panel as readable text.47.0%Energy 395kJ per serve, 858kJ …
storageInstructionsstringStorage instructions.49.7%Refrigerate after opening and …
countryOfOriginstringCountry of origin (from the label; Australia, New Zealand, China …).59.9%Malaysia
countryOfOriginStatementstringCountry-of-origin label text.64.5%Made in Malaysia
australianIngredientsPercentnumberShare of Australian ingredients stated on the label.32.6%0
storeIdstringWoolworths store whose prices the row carries (1101 = the default online store).100.0%1101
storeNamestringStore name when a postcode or store number was given.0.0%—
storeStatestringState of that store.0.0%—
sourcestringWhich search, category or list found the product.100.0%category: Pantry
scrapedAtstringWhen the row was collected (ISO 8601, UTC).100.0%—

nutritionPer100g and nutritionPerServing are objects with any of these numeric keys (units in the name): energyKj, energyKcal, proteinG, fatTotalG, fatSaturatedG, fatTransG, fatPolyunsaturatedG, fatMonounsaturatedG, carbohydrateG, sugarsG, dietaryFibreG, sodiumMg, calciumMg, potassiumMg, cholesterolMg, caffeineMg, glutenMg, lactoseG. A value printed as "less than" on the pack (e.g. <1g) is left out of the object and kept in nutritionText.


Output example

A real row from the 2026-10-18 run with the country-of-origin option on (long texts shortened; empty fields, ids and the per-serve panel left out):

{
"productId": "13674",
"stockcode": 13674,
"name": "Continental Classics Cup A Soup Mild Chicken Curry",
"brand": "Continental",
"title": "Continental Classics Cup A Soup Mild Chicken Curry 58g",
"size": "58g",
"variety": "Chicken Curry",
"url": "https://www.woolworths.com.au/shop/productdetails/13674/continental-classics-cup-a-soup-mild-chicken-curry",
"imageUrl": "https://cdn1.woolworths.media/content/wowproductimages/large/013674.jpg",
"imageUrls": ["https://cdn1.woolworths.media/content/wowproductimages/large/013674.jpg", "…"],
"barcode": "9300667005938",
"price": 1.8,
"wasPrice": 3,
"savings": 1.2,
"savingsPercent": 40,
"instorePrice": 1.8,
"isOnSpecial": true,
"isHalfPrice": false,
"isMultibuy": false,
"isOnlineOnly": false,
"specialType": "SPECIAL",
"promoLabel": "Save $1.20",
"unitPrice": 3.1,
"unitOfMeasure": "100G",
"unitPriceText": "$3.10 / 100G",
"isSoldByWeight": false,
"isAvailable": true,
"isInStock": true,
"purchaseLimit": 11,
"isNew": false,
"isAgeRestricted": false,
"isMarketplaceProduct": false,
"rating": 5,
"reviewCount": 1,
"ratingCount": 1,
"department": "Pantry",
"category": "Canned Food & Instant Meals",
"subCategory": "Canned Soup & Soup Ingredients",
"categoryPath": "Pantry > Canned Food & Instant Meals > Canned Soup & Soup Ingredients",
"merchandiseDepartment": "GROCERIES",
"merchandiseCategory": "PREPARED FOODS",
"merchandiseSubCategory": "AMBIENT SOUPS",
"merchandiseSegment": "PACKET SOUP",
"description": "CONTINENTAL LOTS-A-NOODLES SOUP MILD CHICKEN CURRY 58 GR\n\nTreat yourself to Continental…",
"ingredients": "Ingredients: Noodles^ (45%) (wheat flour, gluten), starch (corn, potato), creamer veget…",
"allergens": "Milk | Wheat",
"allergensMayContain": "Crustacean | Egg | Peanuts | Sesame | Soy | Lupin",
"allergenFreeFrom": "Fish Free | No Artificial Colours or Flavours",
"lifestyle": "Low Fat | Low Sugar",
"healthStarRating": 3.5,
"servingSize": "250 mL",
"servingsPerPackage": 2,
"nutritionPer100g": {"carbohydrateG": 7.7, "dietaryFibreG": 0.2, "energyKj": 194, "fatSaturatedG": 1, "fatTotalG": 1.1, "proteinG": 1, "sodiumMg": 265, "sugarsG": 0.6},
"countryOfOrigin": "Australia",
"countryOfOriginStatement": "Made in Australia from at least 48% Australian ingredients",
"australianIngredientsPercent": 48,
"storeId": "1101",
"scrapedAt": "2026-10-18T20:59:37.419Z"
}

CSV / Excel columns (in this order): productId, stockcode, retailer, name, brand, title, size, variety, url, imageUrl, imageUrls, barcode, price, wasPrice, savings, savingsPercent, instorePrice, isOnSpecial, isHalfPrice, isMultibuy, isOnlineOnly, specialType, promoLabel, multibuyQuantity, multibuyPrice, multibuyLabel, multibuyUnitPrice, priceNote, offerId, unitPrice, unitOfMeasure, unitPriceText, isSoldByWeight, isAvailable, isInStock, purchaseLimit, isNew, isAgeRestricted, deliveryRestriction, isMarketplaceProduct, sellerName, rating, reviewCount, ratingCount, department, category, subCategory, categoryPath, allCategoryPaths, departmentId, categoryId, subCategoryId, merchandiseDepartment, merchandiseCategory, merchandiseSubCategory, merchandiseSegment, description, ingredients, allergens, allergensMayContain, allergenFreeFrom, lifestyle, lifestyleClaims, healthStarRating, servingSize, servingsPerPackage, nutritionPer100g, nutritionPerServing, nutritionText, storageInstructions, countryOfOrigin, countryOfOriginStatement, australianIngredientsPercent, storeId, storeName, storeState, source, scrapedAt. Arrays (imageUrls) and objects (nutritionPer100g, nutritionPerServing) are flattened by Apify's CSV export into numbered or dotted columns (imageUrls/0, nutritionPer100g/sugarsG).


Scale and speed — measured

Run (Apify platform, 2026-10-18)ProductsTime
First run with the form's starting values (search "milk", 50 products, default settings)505.6 s
1,000 products, whole-catalogue mode, default settings1,00018 s
1,000 products, whole-catalogue mode, country-of-origin option on1,00074 s
Search "chocolate", country-of-origin option on — every result95180 s
All specials & offers6,97654 s
Half-price specials1,84414 s
The whole Woolworths range, default settings24,990, 0 duplicates124 s
Four departments (Pantry, Beauty, Personal Care, Health & Wellness), country-of-origin option on10,471, 0 duplicates704 s
Store prices: milk category at Darwin City (postcode 0800)191 of 284 listed28 s
Everyday Market "Toys" category (Woolworths reports 13,206)13,228 (measured from a laptop against the live site, not on the platform)126 s

How big is Woolworths? On 2026-10-18 the Woolworths-sold range was 24,990 unique products; department pages list 37,241 entries because "Lunch Box", "Back to School" or "Dinner" re-list products from the core aisles. The Everyday Market marketplace adds about 1.19 million third-party listings.

What makes it fast and complete. Woolworths serves 36 products per page and at most 10,000 per category or search. The Actor reads in name order (the relevance order shifts between pages: two full passes over Pantry missed 47 and 17 products, name order none), skips sponsored repeats, splits marketplace categories above 10,000 and reads any query still above it from both ends (A→Z, Z→A: up to 20,000). Requests are spread over several connections at a steady pace; the 2026-10-18 whole-catalogue run made 1,299 requests and every one was answered.

Fill rates that matter (whole range, 2026-10-18): barcode 100.0%, price 95.6%, unit price 82.1%, brand 99.3%, category path 100.0%, description 93.2%, ingredients 66.9%, lifestyle claims 47.9%, nutrition panel 46.1%, allergens 32.6%, ratings 33.8%, Health Star Rating 24.7%; with the country-of-origin option, a label on 64.5% of the four-department run. Food fields are naturally empty for non-food products (cleaning, beauty, pet, homewares); ratings exist only for products customers have rated.


How Woolworths prices, specials, unit prices and Health Star Ratings work

Shelf price, was price and savings. price is today's price on woolworths.com.au; on special, wasPrice is the regular price and savings / savingsPercent the difference, otherwise wasPrice equals price.

Specials types. specialType names the offer Woolworths shows on the product:

  • HALF_PRICE — Woolworths' Half Price specials (isHalfPrice: true). The weekly catalogue specials start on Wednesdays.
  • SPECIAL — any other temporary price cut ("Save $1.50").
  • LOWER_SHELF_PRICE — a lasting price reduction ("Prices dropped"); priceNote often carries the previous price and the date it changed: Was $6.60 - 25/08/2026 or Range was $20 - 11/08/2026.
  • EVERYDAY_LOW_PRICE — Woolworths' "Low Price" (always-low) products.
  • SEASONAL_PRICE — a seasonal price reduction.
  • MULTIBUY — a quantity deal; multibuyLabel 2 for $8.00, multibuyQuantity 2, multibuyPrice 8, multibuyUnitPrice $1.96/100G.

isOnlineOnly marks online-only specials. promoLabel is the label text as shown ("Half price · Save $2.50", "Lower shelf price", "Everyday low price").

Cup price (unit price). Australian supermarkets must show a comparable unit price: unitPrice per unitOfMeasure (100G, 1L, 1KG, 1EA …) and unitPriceText ($0.25 / 100G) compare pack sizes — the cheapest pack is not always the cheapest per 100 g.

Products sold by weight. Deli and loose items sold by weight (isSoldByWeight: true, sizes like per 100g) carry the shelf price for that size ($1.99 per 100 g, as on the product page) in price, and the price per kilogram in unitPrice ($19.90 / 1KG). Their purchaseLimit is in kilograms.

Out-of-stock products. About 4% of the range is temporarily unavailable online at any time (isAvailable: false). Category pages hide their price, so price is empty for them by default; with Include country of origin on, the Actor takes it from the product's own page, which still shows it.

Health Star Rating. The Australian/New Zealand front-of-pack rating from 0.5 to 5 stars (healthStarRating), printed on many packaged foods; higher is healthier within a category.

Country of origin. Australia's country-of-origin food labels — "Made in Australia from at least 90% Australian ingredients", "Grown in Australia", "Made in China" — come in countryOfOriginStatement; countryOfOrigin is the country and australianIngredientsPercent the share of Australian ingredients where the label states it.

Store prices. Woolworths prices are the same in most stores, but not everywhere. We priced the same 200 randomly chosen products at seven stores on 2026-10-18 and compared them with the default online prices taken at the same moment:

Store (state)Products the store stocksPriced differentlyDirection
Pyrmont Metro (NSW)11912 (10.1%)all higher
Darwin City (NT)16715 (9.0%)all higher
Melbourne Square, Southbank (VIC)1626 (3.7%)mostly higher
Subiaco Square (WA)1754 (2.3%)mixed
Channel Court (TAS)1573 (1.9%)mixed
Mount Sheridan, Cairns (QLD)1651 (0.6%)lower
Town Hall, Sydney (NSW)990—

Fresh and chilled categories differ much more: in the milk aisle, 109 of the 191 products Darwin City stocks were priced differently. Without a postcode or store number you get woolworths.com.au's default online prices.

Sponsored products. Sponsored tiles repeat products listed in their own aisle, so the Actor skips them and every product appears once.


What you pay

A fixed price per product saved — compute, proxies and the extra requests for ratings and country of origin are included. There is no monthly rental, and you do not pay for duplicates, sponsored tiles or products that were filtered out.

Apify planPrice per 1,000 products
Free$2.00
Bronze$1.77
Silver$1.53
Gold, Platinum, Diamond$1.30

Examples: 1,000 products = $2.00 on the Free plan or $1.30 on Gold · 10,000 products = $20.00 / $13.00 · 100,000 products (e.g. four weekly catalogue snapshots) = $200 / $130 · the whole Woolworths range (24,990 products on 2026-10-18) ≈ $50.00 on Free or $32.50 on Gold.

Maximum cost per run

Every pay-per-result run has a Maximum cost per run (in the run options; Apify also applies one when you set none). The Actor reads it when it starts, saves exactly as many products as it covers and then stops cleanly with a message such as "Saved 25 products — this run's maximum cost ($0.05) covers 25 results at the current price. Raise 'Maximum cost per run' to get more." The run still ends as Succeeded, SUMMARY records stoppedBy: "MAX_COST", and you pay only for the products saved. For a whole-catalogue export, set the limit above the examples above.


Integrations

API (curl)

curl -X POST "https://api.apify.com/v2/acts/logiover~woolworths-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode":"specials","maxItems":500}'

Node.js (apify-client)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('logiover/woolworths-scraper').call({
mode: 'categories',
categoryUrls: ['https://www.woolworths.com.au/shop/browse/pantry/coffee'],
maxItems: 0,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
const cheapest = items.filter((p) => p.unitPrice).sort((a, b) => a.unitPrice - b.unitPrice).slice(0, 10);
console.log(cheapest.map((p) => `${p.title}: ${p.unitPriceText}`));

Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("logiover/woolworths-scraper").call(run_input={"mode": "specials", "maxItems": 0})
specials = list(client.dataset(run["defaultDatasetId"]).iterate_items())
# price-change tracking: compare with last week's run (saved as a dict productId -> price)
import json, pathlib
last = json.loads(pathlib.Path("last_week.json").read_text()) if pathlib.Path("last_week.json").exists() else {}
for p in specials:
old = last.get(p["productId"])
if old is not None and old != p["price"]:
print(f'{p["title"]}: {old} -> {p["price"]} ({p["promoLabel"]})')
pathlib.Path("last_week.json").write_text(json.dumps({p["productId"]: p["price"] for p in specials}))

Make, Zapier and n8n

Use the Apify app / node: Run an Actor (logiover/woolworths-scraper, your input JSON), then Get dataset items and map title, price, wasPrice, promoLabel, barcode … into Sheets, Airtable, Slack, email or a database. n8n's Apify node plus a Schedule Trigger is a no-code weekly price feed.

Google Sheets and Airtable

Add the Google Sheets integration to a task to append or replace rows after every run. For Airtable use Make, Zapier or n8n, keyed on productId.

BI tools (Power BI, Tableau, Looker Studio, Excel)

Point the tool at the dataset's CSV/JSON URL (https://api.apify.com/v2/datasets/DATASET_ID/items?format=csv&token=...) or at your warehouse table; fields are typed and consistently named.

Webhooks and scheduling

Schedule a task (cron, any time zone) and add a webhook on Run succeeded; your endpoint gets the dataset id and pulls the rows. Typical cadence: specials every Wednesday, the catalogue weekly, a basket daily.

Data warehouses (BigQuery, Snowflake, Postgres, S3)

Load each run's dataset with a webhook-triggered job (or the S3 / Google Drive integrations); key a history table on productId + scrapedAt.

MCP and AI agents

The Actor works through the Apify MCP server, so Claude, ChatGPT or your own agent can call it as a tool ("what is half price at Woolworths this week in snacks?") and receive structured rows.


Performance tips

  • Keep "Include country of origin" off for bulk price exports: the whole range takes about two minutes; with the option on it needs one extra request per product (roughly 28 minutes for the whole range).
  • Use the right mode. "All specials & offers" (about 7,000 products) is much smaller than the whole catalogue; a category URL is faster than a broad search.
  • Leave the proxy setting at its default. The Actor already spreads requests over several connections at a pace Woolworths accepts; residential proxies only add cost.
  • Set maxItems to what you need — the Actor never fetches more pages than the remaining number of products can use.
  • Ratings cost almost nothing (one request per 150 products); keep them on unless you never use them.
  • Store prices need one request per product — scope them to the categories you monitor.
  • Schedule instead of re-running by hand, and use the CSV export URL directly in your tools.

Troubleshooting

Every run ends with a status message and a SUMMARY record (outcome, rows saved, products matching on Woolworths, pages read, notes, connections).

Outcome / messageWhat happenedWhat to do
COMPLETED — "every matching product read"Everything that matched was saved.—
COMPLETED — "Saved N products (max results reached)"maxItems reached before the end.Raise maxItems or set 0.
COMPLETED, stoppedBy: MAX_COST — "maximum cost ($X) covers N results"The Maximum cost per run was reached; clean stop.Raise Maximum cost per run.
PARTIALProducts were saved, but some pages could not be read after retries (pagesSkipped > 0).Re-run; the missing pages are usually there next time.
EMPTY_RESULT — "the search ran fine but returned 0 results"Woolworths answered and nothing matched.Check spelling, try a broader term, turn off Specials only.
BAD_INPUT (run fails)No usable input: e.g. no search term, no category URL that exists, no valid stockcode or barcode, a malformed postcode.Read the message — it names the input that failed.
BLOCKED / FETCH_FAILED (run fails)Woolworths could not be reached or refused every connection after retries — never an empty "success".Retry in a few minutes; keep the default proxy setting.
INCOMPLETE_NO_ROWS (run fails)Nothing was saved and some pages failed, so an empty result cannot be confirmed.Re-run.
Note: "… not an exact Woolworths category path any more — using …"An old URL was matched to the closest current category.Paste the current URL to be exact.
Note: "N of M stockcode(s)/barcode(s) are not sold on woolworths.com.au"Not (or no longer) listed.Remove them from the basket.
Note: "Skipped 'Front of Store'"The tobacco aisle is shown to logged-in shoppers only.—
Log: "… above Woolworths' 10,000-per-query limit — reading it A→Z and Z→A"A huge marketplace category or search.Narrow it for coverage above 20,000.
"Saved X/Y products · N pages" stays put for a whileProduct-detail requests (country of origin, store prices) are running.Wait, or turn the option off.

Honest limits

  • One category or search answers at most 10,000 products. Only the Everyday Market marketplace gets there; the Actor splits by sub-category and reads from both ends, which reaches up to 20,000 per leaf category or search. Woolworths' own departments are all well below the limit.
  • Searches above 10,000 report "10,000". Woolworths never says the real total of a huge marketplace search; the Actor reads up to 20,000 and lists the search under queriesAboveTheCap in SUMMARY.
  • Member-only prices are not public. Everyday Rewards member prices and personalised offers are shown only to signed-in members; the Actor reports the public price everyone sees.
  • Store prices need one product-detail request per product; without a store you get woolworths.com.au's default online price.
  • Country of origin, ingredients, allergens, nutrition and Health Star Ratings exist only where Woolworths publishes them — mostly packaged food. Non-food products have none.
  • Marketplace listings have no barcode in Woolworths' data.
  • Ratings exist only for products customers have rated (33.8% of the range); unrated products have ratingCount: 0.
  • Prices change (specials weekly); a dataset is a snapshot at scrapedAt.

Compared with checking prices by hand

This ActorChecking woolworths.com.au by hand
Products per hourThe whole range (24,990) in about two minutesA few hundred, with care
Specials, half price, multibuy, previous-price notesStructured fieldsRead from badges
Unit (cup) priceNumber + unit, sortableText on each tile
Barcode (GTIN), merchandise hierarchyIncludedNot shown on the page
Ingredients, allergens, nutrition panel, Health Star RatingStructured fieldsOpen every product page
Country-of-origin labelStatement, country, Australian %Image on the product page
Repeatable on a scheduleYes, with historyNo
Export to CSV / Excel / JSON / APIYesCopy and paste

FAQ

Is there an official Woolworths API?

Woolworths offers no public product or price API. This Actor reads the public JSON that woolworths.com.au loads in your browser and returns a structured dataset — a Woolworths API alternative without an account or key.

How do I scrape woolworths.com.au?

Choose What to scrape (search terms, category URLs, the whole catalogue, specials, half price or a product list), press Start and export CSV, Excel or JSON. No code needed; use the API to automate.

Do I need a Woolworths account, login or cookies?

No. Everything the Actor reads is public. You need only an Apify account to run it.

Do I need proxies?

No setup. The default setting adds Apify Proxy sessions to the direct connection to keep a steady pace; residential proxies are not needed.

How many products does Woolworths sell online?

On 2026-10-18 the Woolworths-sold range was 24,990 unique products; the Everyday Market marketplace adds about 1.19 million third-party listings.

Can I download the entire Woolworths product list with prices?

Yes: mode Whole catalog with maxItems: 0 — 24,990 products in 124 s on 2026-10-18. With the country-of-origin option on, expect roughly 28 minutes.

How do I track Woolworths prices over time?

Schedule a task and compare runs on productId (Recipe 11).

When do Woolworths specials change?

On Wednesdays. Schedule specials or catalogue runs for Wednesday morning, Australian time.

How do I get only Woolworths half-price products?

Use mode Half-price specials only — 1,844 products on 2026-10-18. In other modes, filter on isHalfPrice: true.

Can I get all Woolworths specials and catalogue deals?

Yes: mode All specials & offers (6,976 products on 2026-10-18); specialType names each deal.

What is the Woolworths cup price and does the Actor include it?

The comparable unit price (per 100 g, litre, kg or item): unitPrice, unitOfMeasure, unitPriceText — 82.1% of the range.

Can I get Woolworths product barcodes (EAN / GTIN)?

Yes — barcode is filled for 100.0% of Woolworths-sold products (EAN-13 in most cases). You can also look products up by barcode in mode Products.

Can I search Woolworths by barcode?

Yes — barcodes in productIds (mode Products) are matched exactly (Recipe 9).

Does it include ingredients and allergens?

Yes: ingredients (66.9% of the range), allergens, allergensMayContain and allergenFreeFrom.

Does it include nutrition information?

Yes: per 100 g and per serve, plus serving size and nutritionText — 46.1% of the range.

Does it include the Health Star Rating?

Yes, healthStarRating (0.5–5) wherever Woolworths shows one (24.7% of the range, mostly packaged food).

Does it include country of origin ("Made in Australia")?

Yes, with Include country of origin on: countryOfOriginStatement (the label text), countryOfOrigin and australianIngredientsPercent. On our 2026-10-18 four-department run 64.5% of products had a label (non-food products have none).

Does it include customer reviews and ratings?

It includes the star rating (rating), ratingCount and reviewCount for every rated product (33.8% of the range). Review texts are not exported.

Are Woolworths prices the same in every store?

Mostly, not always. In our 2026-10-18 sample of 200 products, up to 10% of what a store stocks was priced differently — highest at a Sydney Metro store and in Darwin, near zero at a large Sydney CBD store — and in Darwin's milk aisle 109 of 191 products differed. Set postcode or storeId to get a particular store's prices.

How do I get prices for my local Woolworths store?

Enter your postcode (or a store number); rows then carry that store's prices, specials and availability, with storeName and storeState.

Can I scrape a specific Woolworths category?

Yes: mode Category URLs with the category URL or simply its name.

Can I get every product of one brand?

Yes — see Recipe 8.

How fast is it?

1,000 products in 18 s with the default settings and 74 s with the country-of-origin option; the whole range in 124 s. Measured 2026-10-18.

How much does it cost to scrape the whole Woolworths catalogue?

About $50.00 on the Apify Free plan and $32.50 on Gold and higher (24,990 products at $2.00 or $1.30 per 1,000). Compute and proxies are included.

Can I export Woolworths data to Excel or Google Sheets?

Yes: Excel/CSV from the Output tab, or the Google Sheets integration after every run.

Can I combine Woolworths and Coles prices?

Yes. Our Coles dataset uses the same field names (price, wasPrice, unitPrice, unitOfMeasure, isOnSpecial, barcode, brand, categoryPath …), so you can stack both into one table and join on barcode. See Recipe 15.

Does it scrape Everyday Market (marketplace) products?

Optionally (Include Everyday Market); rows carry isMarketplaceProduct and sellerName.

Why do some products have no price?

They are temporarily unavailable online (isAvailable: false, about 4% of the range); category pages hide their price. Turn on Include country of origin and the Actor takes the price shown on the product's own page.

Why did my run stop before Max results?

Either nothing more matched ("every matching product read") or the run reached its Maximum cost per run (the status says how many results it covers).

What happens if Woolworths is down or blocks the run?

It retries on fresh connections; if nothing works the run fails with the reason in the status message and SUMMARY — never an empty "success".

Can I use the data for an app or a commercial product?

It is public product and price information; check Woolworths' terms and your local law (legality).

Does it work for Woolworths New Zealand?

No. This Actor reads woolworths.com.au (Australia). Woolworths New Zealand runs a different website.

I need a field or a filter that is missing. Can you add it?

Yes — open an issue on the Actor's Issues tab and describe what you need.


Glossary

  • Stockcode — Woolworths' product number, the number in the product URL; our productId / stockcode.
  • GTIN / EAN / barcode — the global product number under the barcode (EAN-13 for most Australian products); barcode.
  • Cup price — Woolworths' term for the comparable unit price ("$0.25 / 100G"); unitPrice, unitOfMeasure, unitPriceText.
  • Was price — the regular price before a special; wasPrice.
  • Half Price — the weekly half-price specials; isHalfPrice.
  • Prices Dropped / Lower shelf price — a lasting price cut, often with the old price and date; LOWER_SHELF_PRICE, priceNote.
  • Low Price / Everyday low price — products kept at a low price; EVERYDAY_LOW_PRICE.
  • Multibuy — a quantity deal ("2 for $8.00"); isMultibuy, multibuyLabel.
  • Online-only special — a deal valid on woolworths.com.au only; isOnlineOnly.
  • EDR special / member price — Everyday Rewards member-only prices, shown to signed-in members only, so not part of the public data.
  • Supply limit — maximum quantity per order; purchaseLimit (kg for products sold by weight).
  • Health Star Rating (HSR) — the 0.5–5 star front-of-pack rating used in Australia and New Zealand.
  • Country-of-origin label — Australia's food origin label ("Made in Australia from at least 90% Australian ingredients").
  • Merchandise hierarchy — Woolworths' internal buying hierarchy; the merchandise* fields.
  • Everyday Market — Woolworths' marketplace of third-party sellers.
  • Sponsored product — a paid placement repeated on listing pages; skipped so every product appears once.

This Actor reads only publicly available product information — names, prices, specials, product attributes and aggregated ratings that any visitor sees on woolworths.com.au without logging in. It does not collect personal data: no customer accounts, no names of reviewers, no review texts. Product and price information is business information published to be seen. You are responsible for using the data in line with Woolworths' terms, Australian law (including the Australian Consumer Law and the Privacy Act where it applies), the GDPR or CCPA if they apply to you, and your own policies; if in doubt, ask a lawyer.

Trademark and affiliation disclaimer: This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Woolworths Group Limited, Woolworths Supermarkets or any of their subsidiaries. All trademarks mentioned are the property of their respective owners.


Changelog

  • 1.0 (2026-10-18) — First release: search, category, whole-catalogue, specials, half-price and stockcode / barcode modes; complete name-order reads with splitting past the 10,000-per-query limit; 78 fields incl. specials, cup price, barcode, ingredients, allergens, nutrition, Health Star Rating and ratings; optional country of origin and store prices; Everyday Market option; polite multi-connection pacing; clean stop at the maximum cost per run.

Support

Questions, bugs or a feature request? Open an issue on the Issues tab — we reply within 24 hours. If a run did something unexpected, include the run link so we can see its log and SUMMARY.