Woolworths Products Scraper — Australian Grocery Data avatar

Woolworths Products Scraper — Australian Grocery Data

Pricing

from $0.90 / 1,000 results

Go to Apify Store
Woolworths Products Scraper — Australian Grocery Data

Woolworths Products Scraper — Australian Grocery Data

Scrape Woolworths Australia grocery products: name, brand, price, unit price, package size, availability, ingredients, allergens and nutrition. Skips already-scraped items across runs.

Pricing

from $0.90 / 1,000 results

Rating

0.0

(0)

Developer

ActorFlow

ActorFlow

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

Woolworths Products Scraper — Australian Grocery Price & Product Data

Scrape grocery products, prices and nutrition data from Woolworths Australia (woolworths.com.au) without writing a line of code. This Woolworths scraper extracts product name, brand, current and was price, unit (cup) price, package size, availability, barcode, ingredients, allergens, nutrition information and country of origin from any Woolworths category page. Paste a category URL, press Start, and export the results as JSON, CSV or Excel — or call the whole thing as an API from Python, JavaScript or cURL.

Unlike most Woolworths scrapers, this one remembers what it already scraped between runs: give a run a cache project name and it skips every product collected previously, so a daily price-monitoring job only pays for what is actually new.

Target website: woolworths.com.au

✨ Features of this Woolworths grocery scraper

  • Full product extraction — name, brand, description, price, was-price, unit price, package size, availability, special status, barcode, department, aisle and the complete image gallery.
  • Nutrition, ingredients and allergen data — per-serving and per-100g nutrition panels, ingredient lists, allergen statements, "contains" warnings and dietary claims (Gluten Free, Vegan, Vegetarian).
  • Cross-run caching (skip already-scraped products) — set a cache project name and the scraper skips products collected in earlier runs. Ideal for scheduled daily or weekly price monitoring, where re-scraping an unchanged catalogue is wasted spend.
  • Consistent output schema — every record returns the same top-level fields, so your CSV columns never shift between runs. Fields that only some products have are grouped into a predictable additionalData array.
  • Unit pricing — the per-100g/per-kg cup price is captured alongside the shelf price for like-for-like comparison.
  • Pagination support — walks every page of a category automatically until your item limit is reached.
  • Whole-site mode — one toggle crawls the main Woolworths category pages instead of a hand-picked URL list.
  • Per-URL item limitsmaxItems applies to each start URL separately, so one big category cannot starve the others.
  • Proxy support — optional Apify proxy configuration (datacenter or Australian residential).
  • No browser required — runs on plain HTTP requests, which makes it fast and far cheaper than browser-based scrapers.

🚀 How to scrape Woolworths products in 5 steps

  1. Sign up for a free Apify account — includes $5 monthly credit.
  2. Open the actor page and click Try for free.
  3. Fill in the Input fields — at least one Woolworths category URL is required.
  4. Click Start and wait for the run to complete.
  5. Download results from the Output tab in JSON, CSV, or Excel format.

You can also run this actor via the Apify API or integrate it directly into your workflows using Zapier, Make, or n8n.

💰 Pricing for this Woolworths scraper

This actor uses pay-per-result billing based on the compute units a run consumes.

  • New Apify accounts include $5 of free monthly credit.
  • It runs on HTTP requests rather than a headless browser, so it costs significantly less per product than browser-based scrapers.
  • Proxies are disabled by default — Woolworths responds reliably without one at modest volume, which keeps runs cheapest.
  • The cross-run cache cuts cost further on repeat runs by skipping products you already have.

🔧 Input configuration for the Woolworths scraper

FieldTypeRequiredDefaultDescription
startUrlsarray[{"url": "https://www.woolworths.com.au/shop/browse/fruit-veg"}]Woolworths category browse URLs, e.g. https://www.woolworths.com.au/shop/browse/fruit-veg.
maxItemsinteger5Maximum number of products to scrape for each start URL.
scrapeWholeSitebooleanfalseIgnore Start URLs and crawl the main Woolworths category browse pages instead.
cacheProjectNamestringOptional. When set, products already scraped under this project name in a previous run are skipped instead of being scraped again.
proxyConfigurationobject{"useApifyProxy": false}Woolworths is protected by Akamai. It responds without a proxy in testing, but for larger runs enable datacenter proxies first, and Australian residential only if datacenter still fails.

Supported URL types:

  • Category browse pageshttps://www.woolworths.com.au/shop/browse/{category}, e.g. .../shop/browse/fruit-veg, .../shop/browse/bakery, .../shop/browse/pantry, .../shop/browse/dairy-eggs-fridge, .../shop/browse/drinks or .../shop/browse/freezer.

Individual product pages are not used as start URLs: Woolworths renders its listings from a category feed, so a whole category is scraped in one pass and each product is then enriched with its full detail record.

📦 Woolworths scraper output data

Each record is returned as JSON (exportable to CSV, Excel, XML or RSS) with a fixed set of top-level fields: url, stockcode, name, brand, description, price, wasPrice, currency, unitPrice, packageSize, isAvailable, isOnSpecial, category, image, barcode, unit, department, aisle, images, productDetails, countryOfOrigin, nutrition and additionalData.

Because not every grocery product carries the same information — fresh produce has no ingredient list, a seasoning has no health star rating — the variable fields are collected into additionalData as { "key": ..., "value": ... } pairs rather than appearing and disappearing as top-level columns. Keys you will see there include ingredients, allergenStatement, allergenContains, allergensMayBePresent, dietaryStatement, storageInstructions, healthStarRating, servingSize, servingsPerPack and sections (labelled description blocks such as "How to Store" or "Cooking Methods").

The dataset has two views. Overview is a compact table of name, brand, price, was-price, unit price, package size, availability and URL. Product details shows the long-form data: description, country of origin, nutrition and the additionalData array.

Sample output:

{
"url": "https://www.woolworths.com.au/shop/productdetails/6072786/masterfoods-garlic-truffle-seasoning",
"stockcode": 6072786,
"name": "Masterfoods Garlic Truffle Seasoning",
"brand": "Masterfoods",
"description": "Masterfoods Garlic Truffle Seasoning 50g",
"price": 3.9,
"wasPrice": 4.95,
"currency": "AUD",
"unitPrice": "$0.78 / 10G",
"packageSize": "50g",
"isAvailable": true,
"isOnSpecial": true,
"category": "pantry",
"image": "https://cdn1.woolworths.media/content/wowproductimages/large/6072786.jpg",
"barcode": "9310012100546",
"unit": "Each",
"department": "cooking, seasoning & gravy",
"aisle": "herbs & spices a-k",
"images": [
"https://cdn0.woolworths.media/content/wowproductimages/large/6072786.jpg",
"https://cdn0.woolworths.media/content/wowproductimages/large/6072786_1.jpg"
],
"productDetails": null,
"countryOfOrigin": null,
"nutrition": null,
"additionalData": [
{
"key": "ingredients",
"value": "Spices 43% (Garlic, Black Pepper), Onion 26%, Rice Flour, Salt, Vegetable Oil, Natural Flavour 0.5% (Truffle)."
},
{
"key": "allergenStatement",
"value": [
"Dairy Free",
"Egg Free",
"Fish Free",
"Gluten Free",
"Lactose Free",
"Soy Free",
"Wheat Free"
]
},
{
"key": "dietaryStatement",
"value": [
"Gluten Free",
"Vegan",
"Vegetarian"
]
}
]
}
{
"url": "https://www.woolworths.com.au/shop/productdetails/6078131/bega-raspberry-marshmallow-peanut-spread",
"stockcode": 6078131,
"name": "Bega Raspberry Marshmallow Peanut Spread",
"brand": "Bega",
"description": "Bega Raspberry Marshmallow Peanut Spread 325g",
"price": 6,
"wasPrice": 6,
"currency": "AUD",
"unitPrice": "$1.85 / 100G",
"packageSize": "325g",
"isAvailable": true,
"isOnSpecial": false,
"category": "pantry",
"image": "https://cdn1.woolworths.media/content/wowproductimages/large/6078131.jpg",
"barcode": "9352042005033",
"unit": "Each",
"department": "jams & spreads",
"aisle": "nut butter",
"images": [
"https://cdn0.woolworths.media/content/wowproductimages/large/6078131.jpg",
"https://cdn0.woolworths.media/content/wowproductimages/large/6078131_2.jpg"
],
"productDetails": "Bega Marshmallow Raspberry Peanut Spread is crunchy, delicious, and full of flavour. Made for a spoon, enjoy it as a snack, a topping, or your favourite after-hours treat. Introducing Bega Marshmallow Raspberry Flavoured Peanut Spread , designed to elevate your peanut spread experience to new heights. Brought to you by Australia's favourite peanut butter, this spread boasts a crunchy texture with a hit of delicious marshmallow raspberry flavour, making it perfect for a variety of uses. Whether you're eating it straight off the spoon, dipping it with your favourite snacks, or topping your dessert, Bega Marshmallow Raspberry Flavoured Peanut Spread adds the ultimate indulgent hit. Plus, enjoy the benefits of 5g of protein per serve, a source of vitamin B3 and magnesium, no artificial colours or flavours, and its gluten free. Bega flavoured peanut spreads are ideal for those who love the rich, nutty flavour of traditional peanut butter but are looking for extra sweetness. Try it today and discover a delicious twist on a classic. Crunchy texture Marshmallow Raspberry flavoured 5g protein per serve Source of Vitamin B3 and magnesium No artificial colours, flavours or preservatives Gluten Free",
"countryOfOrigin": "Australia",
"nutrition": [
{
"nutrient": "Carbohydrate",
"perServing": "4.3g",
"per100g": "17.1g"
},
{
"nutrient": "Dietary Fibre",
"perServing": "1.7g",
"per100g": "6.7g"
},
{
"nutrient": "Energy kJ",
"perServing": "638.0kJ",
"per100g": "2550.0kJ"
},
{
"nutrient": "Fat Saturated",
"perServing": "2.6g",
"per100g": "10.2g"
}
],
"additionalData": [
{
"key": "ingredients",
"value": "ROASTED PEANUTS(82%),SUGAR,VEGETABLE OIL(ANTIOXIDANT(307b)),FLAVOUR,SALT."
},
{
"key": "allergenStatement",
"value": [
"Dairy Free",
"Egg Free",
"Fish Free",
"Gluten Free",
"Lactose Free",
"No Artificial Colours or Flavours",
"Soy Free",
"Wheat Free"
]
},
{
"key": "allergenContains",
"value": [
"Peanuts"
]
},
{
"key": "dietaryStatement",
"value": [
"Gluten Free",
"Source of Protein",
"Vegan",
"Vegetarian"
]
},
{
"key": "storageInstructions",
"value": "STORE IN A COOL, DRY PLACE."
},
{
"key": "healthStarRating",
"value": "3.5"
}
]
}```
## 🐍 How to scrape Woolworths with Python, JavaScript or the API
Run the actor programmatically with the official Apify clients. Replace `<YOUR_API_TOKEN>` with the token from your [Apify Console](https://console.apify.com/account/integrations).
**Python** (`pip install apify-client`):
```python
from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("<username>/woolworths-products-scraper").call(run_input={
"startUrls": [{"url": "https://www.woolworths.com.au/shop/browse/fruit-veg"}],
"maxItems": 20,
"cacheProjectName": "woolworths-daily",
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)

JavaScript (npm install apify-client):

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('<username>/woolworths-products-scraper').call({
startUrls: [{ url: 'https://www.woolworths.com.au/shop/browse/fruit-veg' }],
maxItems: 20,
cacheProjectName: 'woolworths-daily',
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

cURL — start a run and wait for the dataset:

curl -X POST "https://api.apify.com/v2/acts/<username>~woolworths-products-scraper/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"startUrls":[{"url":"https://www.woolworths.com.au/shop/browse/fruit-veg"}],"maxItems":20,"cacheProjectName":"woolworths-daily"}'

💡 What you can use Woolworths product data for

  • Grocery price monitoring — track shelf prices, was-prices and specials across Woolworths categories day by day.
  • Unit-price and shrinkflation analysis — compare per-kg and per-100g pricing over time to spot package-size changes.
  • Competitor and own-brand benchmarking — measure private-label versus branded pricing for FMCG category reviews.
  • Product catalogue building — populate a price-comparison site or grocery app with names, images, barcodes and package sizes.
  • Nutrition and dietary research — analyse health star ratings, ingredients, allergens and nutrition panels across a whole category.
  • Repricing and dashboard feeds — push current Australian grocery pricing into BI tools, pricing engines or inventory systems.

This Woolworths product data is typically used by grocery and FMCG pricing analysts, e-commerce and price-comparison services, market researchers, and retail intelligence teams working in Australian grocery retail, consumer goods and price monitoring.

⚠️ Limitations & known issues

  • Prices are national, not store-level — the actor reads the default catalogue and does not set a delivery postcode, so store-specific pricing and stock are not reflected.
  • Rate limiting — Woolworths is protected by Akamai. Runs succeed without a proxy at modest volume; for larger runs enable a proxy and keep concurrency low.
  • Not every product has every field — fresh produce typically has no ingredient list or nutrition panel. These fields are simply absent from additionalData rather than returned as empty values.
  • Ratings are not collected — Woolworths serves customer reviews from a separate system, so review counts and star ratings are not part of the output.

❓ Frequently asked questions

Can I scrape Woolworths legally?

This actor only collects data that is already publicly visible on Woolworths category and product pages — it does not log in, add items to a cart, or access account-only areas such as order history or personalised pricing. Scraping publicly available data is generally considered lawful (see hiQ Labs v. LinkedIn as precedent). You remain responsible for complying with Woolworths' Terms of Service and any applicable laws.

How do I avoid re-scraping the same Woolworths products every run?

Set a cache project name in the input. The actor stores the product URLs it has already collected under that name and skips them on every later run using the same name, so a scheduled job only returns products it has not seen before. Leave the field empty to scrape everything each time.

Does this scraper get nutrition and ingredient data?

Yes. Each product is enriched with its full detail record, which includes per-serving and per-100g nutrition panels, ingredients, allergen statements, dietary claims, health star rating, storage instructions and country of origin, where Woolworths publishes them.

How many products can I scrape from one Woolworths category?

There is no hard cap — maxItems limits results per start URL, and the scraper paginates through the category until that limit is reached. Set a high value to take a whole category, or a low one for a quick test run.

Do I need a proxy to scrape woolworths.com.au?

Not for small and medium runs — proxies are disabled by default and Woolworths responded reliably without one in testing, which keeps costs down. For large or frequent runs, enable Apify datacenter proxies first, and Australian residential proxies only if datacenter requests start getting blocked.

How do I scrape Woolworths with Python?

Install the Apify client with pip install apify-client, then call the actor with your API token and a Woolworths category URL, as shown in the Python example above. The dataset can be iterated directly or exported to CSV, Excel or JSON.

Can I run this Woolworths scraper on a schedule?

Yes. Use Apify Schedules to run the actor hourly, daily or weekly. Combined with the cacheProjectName input, a scheduled run will skip products already collected and return only new ones — the cheapest way to keep an Australian grocery price dataset current.

What output formats are supported?

JSON, CSV, Excel, XML and RSS, either from the Output tab or through the Apify API.

🔗 Other actors you may find useful

More scrapers from ActorFlow on the Apify Store — all public actors covering e-commerce, property, news and research data:

  • 🛒 Tokopedia Product Scraper — Deduplication Ability — Scrape Tokopedia product data (title, shop, price in IDR, stock, category and images) from any keyword listing or product URL. Like this Woolworths scraper, it never re-scrapes the same product twice across runs.
  • 🏷️ Carousell Products Scraper — Scrape Carousell.sg product listings for prices, seller ratings, deal methods and more. Export clean JSON/CSV data from any category, search or listing URL.
  • 🏠 Spotahome Property Scraper — Deduplication Ability — Scrape Spotahome rental listings across Europe: price, full address, coordinates, bedrooms, amenities, rating and images, with automatic duplicate removal and exact per-URL item limits.
  • 📰 Sydney Morning Herald (SMH) News Scraper — Scrape Australian news from smh.com.au: headline, author, publish date, section, keywords, images and full public article text, with a paywall flag.
  • 🧴 INCIDecoder Scraper — Scrape skincare product pages for full ingredient lists, key and other ingredient groupings by function, per-ingredient ratings and detailed explanations — a good companion when you need deeper ingredient data than a retailer publishes.

💬 Support & contact

If you encounter any issues, have a feature request, or need a different Australian retailer scraped, please raise an issue from the actor's Issues tab: open an issue.

You can also browse all All ActorFlow actors on the Apify Store.