# Woolworths Australia Scraper (`parseforge/woolworths-au-scraper`) Actor

Scrape Woolworths Australia products by search, category or URL: price, was price, specials, unit price, stock, rating, nutrition and barcode. Export CSV, Excel, JSON or XML.

- **URL**: https://apify.com/parseforge/woolworths-au-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** E-commerce, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.40 / 1,000 result items

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

![ParseForge Banner](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner-v4.webp)

## 🛒 Woolworths Australia Scraper

> 🚀 **Export Woolworths Australia products in seconds.** 44 fields per product: price, was price, specials, multibuy offers, unit price, stock, star rating, nutrition, barcode, allergens and images, from search terms, departments, aisles or product links.

This Actor reads the public Woolworths online catalogue (woolworths.com.au) and returns one clean row per product. No browser and no login: it calls the same JSON endpoints the website itself uses, so runs are fast and cheap. A single search term lists about 2,000 products, and a department can list thousands.

| 🎯 Target Audience | 💡 Primary Use Cases |
|---|---|
| Price-comparison sites, grocery analysts, FMCG brands, retailers, researchers | Price tracking, specials monitoring, competitor benchmarking, nutrition and allergen datasets |

### 📋 What the Woolworths Australia Scraper does

- 🔎 **Search terms:** any product search, one per line, paged until Max Items.
- 🗂 **Departments and aisles:** pick a department, or paste an aisle URL such as `/shop/browse/fruit-veg/fruit`.
- 🏷 **Specials:** a Specials only switch, plus was price, savings, half price flag and multibuy text ("2 for $12.00").
- 🔗 **Product links:** paste `/shop/productdetails/<stockcode>` URLs to add country of origin.
- ↕️ **Sorting:** relevance, price low to high, price high to low, unit price, or name.
- ⭐ **Ratings:** average stars, rating count and review count.
- 🧪 **Nutrition per 100 g**, ingredients, allergens, lifestyle claims and Health Star Rating.

> 💡 **Why it matters:** grocery prices move weekly and specials rotate every Wednesday. A structured export turns the shelf into a dataset you can chart, compare and alert on.

### 🎬 Full Demo (🚧 Coming soon)

### 📊 Output

| Field | Description |
|---|---|
| 🖼 imageUrl | Large product image |
| 📌 name | Product name |
| 🏷 displayName | Name with size as shown on the shelf |
| 🏢 brand | Brand |
| 🆔 stockcode | Woolworths product id |
| 🔢 barcode | GTIN barcode |
| 🔗 url | Product page |
| 💲 price | Current price in AUD |
| 📉 wasPrice | Price before the special |
| 💰 savingsAmount | Amount saved |
| 🔥 isOnSpecial | Yes / No (includes half price and multibuy) |
| ½ isHalfPrice | Yes / No |
| 🏷 promotionLabel | Shelf tag such as "Save $2.50" |
| 🧮 multibuyOffer | For example "2 for $12.00" |
| ⚖️ unitPrice | Unit price text such as "$3.65 / 1L" |
| ⚖️ cupPrice | Unit price as a number |
| 📏 cupMeasure | Unit price measure |
| 📦 packageSize | Pack size |
| 🧾 unit | Sold as (Each, Kg) |
| ✅ inStock | Yes / No |
| 🟢 isAvailable | Yes / No |
| 🚧 supplyLimit | Maximum quantity per order |
| 🆕 isNew | Yes / No |
| 🌐 isOnlineOnly | Yes / No |
| 📢 isSponsored | Yes / No, paid placement |
| ⭐ rating | Average star rating |
| 🗳 ratingCount | Number of ratings |
| 💬 reviewCount | Number of reviews |
| 🗂 department | Department |
| 📂 category | Category |
| 📁 subcategory | Subcategory |
| 📝 description | Product description |
| 🥣 ingredients | Ingredients |
| ⚠️ allergens | Contains allergens |
| 🌱 lifestyleClaims | Dietary claims (list) |
| 💚 healthStarRating | Health Star Rating |
| 🌏 countryOfOrigin | Filled on product URLs and where listed |
| 🧪 nutritionPer100g | Nutrition panel per 100 g / mL (object) |
| 🖼 images | All image URLs |
| 🔎 source | Search term or URL the row came from |
| 🧭 sourceType | search, category or product |
| 🔢 position | Position within the source |
| 🕒 scrapedAt | ISO timestamp of the scrape |
| ❌ error | null on success |

Missing values are shown as `Not Disclosed` (text and numbers) or `N/A` (labels), never left out.

```json
[
  {
    "imageUrl": "https://cdn1.woolworths.media/content/wowproductimages/large/208064.jpg",
    "name": "a2 Milk Full Cream Milk",
    "displayName": "a2 Milk Full Cream 2L",
    "brand": "a2",
    "stockcode": "208064",
    "barcode": "9335390000035",
    "url": "https://www.woolworths.com.au/shop/productdetails/208064/a2-milk-full-cream-milk",
    "price": 7.3,
    "wasPrice": 7.3,
    "savingsAmount": 0,
    "isOnSpecial": "No",
    "isHalfPrice": "No",
    "promotionLabel": "N/A",
    "multibuyOffer": "N/A",
    "unitPrice": "$3.65 / 1L",
    "cupPrice": 3.65,
    "cupMeasure": "1L",
    "packageSize": "2L",
    "unit": "Each",
    "inStock": "Yes",
    "isAvailable": "Yes",
    "supplyLimit": 34,
    "isNew": "No",
    "isOnlineOnly": "No",
    "isSponsored": "Yes",
    "rating": 4.65,
    "ratingCount": 77,
    "reviewCount": 77,
    "department": "Dairy, Eggs & Fridge",
    "category": "Milk",
    "subcategory": "Full Cream Milk",
    "description": "a2 Milk® Full Cream is fresh Australian full cream milk with a rich, creamy taste, from cows that produce mil…",
    "ingredients": "Milk",
    "allergens": "Milk",
    "lifestyleClaims": [
      "Gluten Free",
      "Low Salt",
      "Source of Protein",
      "Vegetarian",
      "Egg Free",
      "Fish Free",
      "Soy Free",
      "Wheat Free"
    ],
    "healthStarRating": "Not Disclosed",
    "countryOfOrigin": "Not Disclosed",
    "nutritionPer100g": {
      "Calcium": "109.0mg",
      "Carbohydrate": "5.0g",
      "Energy kJ": "275.0kJ",
      "Fat Saturated": "2.4g",
      "Fat Total": "3.5g",
      "Potassium": "147.0mg",
      "Protein": "3.3g",
      "Sodium": "33.0mg",
      "Sugars": "4.7g"
    },
    "images": [
      "https://cdn0.woolworths.media/content/wowproductimages/large/208064.jpg",
      "https://cdn0.woolworths.media/content/wowproductimages/large/208064_2.jpg",
      "https://cdn0.woolworths.media/content/wowproductimages/large/208064_8.jpg"
    ],
    "source": "milk",
    "sourceType": "search",
    "position": 1,
    "scrapedAt": "2026-09-29T02:05:39.945Z",
    "error": null
  },
  {
    "imageUrl": "https://cdn1.woolworths.media/content/wowproductimages/large/6073909.jpg",
    "name": "Full+ On The Go Meal Replacement Chocolate",
    "displayName": "Full+ On The Go Meal Replacement Chocolate 480mL",
    "brand": "Full+",
    "stockcode": "6073909",
    "barcode": "9300662892908",
    "url": "https://www.woolworths.com.au/shop/productdetails/6073909/full-on-the-go-meal-replacement-chocolate",
    "price": 4.75,
    "wasPrice": 5.95,
    "savingsAmount": 1.2,
    "isOnSpecial": "Yes",
    "isHalfPrice": "No",
    "promotionLabel": "Save $1.20",
    "multibuyOffer": "N/A",
    "unitPrice": "$9.90 / 1L",
    "cupPrice": 9.9,
    "cupMeasure": "1L",
    "packageSize": "480mL",
    "unit": "Each",
    "inStock": "Yes",
    "isAvailable": "Yes",
    "supplyLimit": 4,
    "isNew": "No",
    "isOnlineOnly": "No",
    "isSponsored": "Yes",
    "rating": 0,
    "ratingCount": 0,
    "reviewCount": 0,
    "department": "Dinner",
    "category": "High Protein",
    "subcategory": "Protein Drinks",
    "description": "Full+ is the next generation of fast food - nutritionally complete, purposefully formulated, and ready when y…",
    "ingredients": "Skim Milk, Milk Protein Concentrate, Medium Chain Triglycer…",
    "allergens": "Milk",
    "lifestyleClaims": [
      "Gluten Free",
      "High Fibre",
      "High Protein",
      "Low Salt",
      "Source of Fibre",
      "Source of Protein",
      "Vegetarian",
      "Egg Free",
      "Fish Free",
      "Soy Free",
      "Wheat Free"
    ],
    "healthStarRating": "Not Disclosed",
    "countryOfOrigin": "Not Disclosed",
    "nutritionPer100g": {
      "Calcium": "83.0mg",
      "Carbohydrate": "6.0g",
      "Dietary Fibre": "1.2g",
      "Energy kJ": "323.0kJ",
      "Fat Saturated": "2.4g",
      "Fat Total": "2.5g",
      "Protein": "7.3g",
      "Sodium": "48.0mg",
      "Sugars": "5.0g"
    },
    "images": [
      "https://cdn0.woolworths.media/content/wowproductimages/large/6073909.jpg",
      "https://cdn0.woolworths.media/content/wowproductimages/large/6073909_2.jpg",
      "https://cdn0.woolworths.media/content/wowproductimages/large/6073909_4.jpg"
    ],
    "source": "milk",
    "sourceType": "search",
    "position": 2,
    "scrapedAt": "2026-09-29T02:05:39.956Z",
    "error": null
  },
  {
    "imageUrl": "https://cdn1.woolworths.media/content/wowproductimages/large/6074037.jpg",
    "name": "Full+ On The Go Meal Replacement Iced Coffee",
    "displayName": "Full+ On The Go Meal Replacement Iced Coffee 480mL",
    "brand": "Full+",
    "stockcode": "6074037",
    "barcode": "9300662892915",
    "url": "https://www.woolworths.com.au/shop/productdetails/6074037/full-on-the-go-meal-replacement-iced-coffee",
    "price": 4.75,
    "wasPrice": 5.95,
    "savingsAmount": 1.2,
    "isOnSpecial": "Yes",
    "isHalfPrice": "No",
    "promotionLabel": "Save $1.20",
    "multibuyOffer": "N/A",
    "unitPrice": "$9.90 / 1L",
    "cupPrice": 9.9,
    "cupMeasure": "1L",
    "packageSize": "480mL",
    "unit": "Each",
    "inStock": "Yes",
    "isAvailable": "Yes",
    "supplyLimit": 4,
    "isNew": "No",
    "isOnlineOnly": "No",
    "isSponsored": "Yes",
    "rating": 0,
    "ratingCount": 0,
    "reviewCount": 0,
    "department": "Dinner",
    "category": "Drinks",
    "subcategory": "Flavoured Milk & Drinks",
    "description": "Full+ is the next generation of fast food - nutritionally complete, purposefully formulated, and ready when y…",
    "ingredients": "Skim Milk, Milk Protein Concentrate, Medium Chain Triglycer…",
    "allergens": "Milk",
    "lifestyleClaims": [
      "Gluten Free",
      "High Fibre",
      "High Protein",
      "Low Salt",
      "Source of Fibre",
      "Source of Protein",
      "Vegetarian",
      "Egg Free",
      "Fish Free",
      "Soy Free",
      "Wheat Free"
    ],
    "healthStarRating": "Not Disclosed",
    "countryOfOrigin": "Not Disclosed",
    "nutritionPer100g": {
      "Calcium": "83.0mg",
      "Carbohydrate": "6.5g",
      "Dietary Fibre": "1.0g",
      "Energy kJ": "333.0kJ",
      "Fat Saturated": "2.3g",
      "Fat Total": "2.5g",
      "Protein": "7.3g",
      "Sodium": "48.0mg",
      "Sugars": "5.1g"
    },
    "images": [
      "https://cdn0.woolworths.media/content/wowproductimages/large/6074037.jpg",
      "https://cdn0.woolworths.media/content/wowproductimages/large/6074037_2.jpg",
      "https://cdn0.woolworths.media/content/wowproductimages/large/6074037_4.jpg"
    ],
    "source": "milk",
    "sourceType": "search",
    "position": 3,
    "scrapedAt": "2026-09-29T02:05:39.960Z",
    "error": null
  }
]
```

### ✨ Why choose this Actor

- 🧠 **44 fields per row**, more than a plain price list: nutrition, allergens, barcode, rating.
- 🏃 **HTTP only:** no browser, so a 1,000 product run takes a few minutes.
- 🔄 **Sessions and addresses rotate automatically** when the store pushes back.
- 💳 **Billing is per product delivered.** Error rows are never charged, and the run stops cleanly at your spending limit.
- ✅ **Fails loudly:** a run that finds nothing ends as failed with the reason, not as an empty success.

### 📈 How it compares to alternatives

This Actor goes beyond a price list by adding nutrition, allergens, barcode and ratings in the same row. Honest ceiling: the online catalogue is national, so store-specific shelf prices and stock are not available, and a single search term lists about 2,000 products (split larger pulls by department or aisle).

### 🚀 How to use

1. Create a free Apify account with $5 credit: https://console.apify.com/sign-up?fpr=vmoqkp
2. Open the Actor and add search terms, pick departments or paste Woolworths URLs, then set Max Items.
3. Run and download CSV / Excel / JSON / XML from the dataset.

### 💼 Business use cases

#### 🏷 Price monitoring

Schedule a daily run over your basket of search terms and chart price, was price and unit price over time.

#### 🔥 Specials tracking

Turn on Specials only and export every half price and multibuy deal each week.

#### 🏭 FMCG benchmarking

Compare your brand shelf price, rating and promotion frequency against competing brands in the same aisle.

#### 🥗 Nutrition and allergen datasets

Build product databases for diet apps and research from the per 100 g panels, allergens and Health Star Ratings.

### 🔌 Automating Woolworths Australia Scraper

Connect the dataset to Make, Zapier, Slack, Airbyte, GitHub or Google Drive, or call it from the Apify API and schedule it with Apify Schedules.

### 🌟 Beyond business use cases

Researchers can study food inflation, students can build price-index projects, and non-profits can track the cost of essentials over time.

### 🤖 Ask an AI assistant about this scraper

Ask an assistant such as ChatGPT, Claude or Gemini: "How do I use the Apify Woolworths Australia Scraper to track weekly specials?"

### ❓ Frequently Asked Questions

#### 🔑 Do I need a Woolworths account or API key?

No. Only publicly visible catalogue data is read.

#### 📍 Which store are the prices for?

The national online range. Store-specific pricing and stock are not available.

#### 🔎 How many products can I get?

One search term or department lists up to about 2,000 products. Use several terms or aisles for more, and Max Items to cap the total.

#### 🧮 How is Max Items shared between several searches?

Evenly, and a small list gives its unused share to the bigger ones. Product links are served first.

#### 🏷 What does Specials only do?

It returns products currently on a price drop, half price or multibuy offer. `wasPrice` and `savingsAmount` show the discount.

#### 🌏 Why is countryOfOrigin "Not Disclosed" on search results?

The list endpoints rarely carry it. Paste the product URL to get it from the product page when Woolworths publishes it.

#### ⭐ Why is rating 0 for some products?

The product has no ratings yet. Turn Include ratings off to skip the lookup.

#### 🥛 Where is the nutrition?

In `nutritionPer100g`, an object keyed by nutrient (for example `Energy kJ`, `Protein`, `Sugars`) when Woolworths lists a panel.

#### 🚫 What happens with a bad URL or an unknown aisle?

That input gets an error row (not charged) and the rest keeps running. If nothing at all is found the run fails with the reason.

#### 🛡 Do I need a proxy?

The default Apify proxy is enough and is the cheapest option. If Woolworths refuses it, the Actor switches to an Australian residential address on its own.

#### 💳 How am I charged?

Per product row delivered. See the pricing tab for the current price.

#### 🆓 What can I do on the free plan?

Free runs return up to 10 products, enough to check the fields.

### 🔌 Integrate with any app

Use the Apify API, webhooks, Make, Zapier, n8n or the Apify MCP server to move the data into your own stack.

### 🔗 Recommended Actors

- [Chemist Warehouse Scraper](https://apify.com/parseforge/chemist-warehouse-scraper)
- [Amazon Products Scraper](https://apify.com/parseforge/amazon-products-scraper)
- [Google Shopping Prices Scraper](https://apify.com/parseforge/google-shopping-prices-scraper)
- [Home Depot Products Scraper](https://apify.com/parseforge/home-depot-products-scraper)

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge).

**🆘 Need Help?** [Open our contact form](https://tally.so/r/BzdKgA)

> **⚠️ Disclaimer:** independent tool, not affiliated with Woolworths Group. It collects only publicly available data.

# Actor input Schema

## `searchTerms` (type: `array`):

Product searches, one per line, as you would type them on woolworths.com.au (e.g. milk, coffee beans, nappies). Each term is paged until maxItems is reached.

## `categorySlugs` (type: `array`):

Whole store departments to list. For an aisle or a specials page (half price, lower shelf price), paste its URL in Woolworths URLs instead.

## `startUrls` (type: `array`):

Category or aisle pages (woolworths.com.au/shop/browse/...), specials pages, search result pages (/shop/search/products?searchTerm=...) or product pages (/shop/productdetails/<stockcode>). Product pages add country of origin.

## `maxItems` (type: `integer`):

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## `sortBy` (type: `string`):

Order in which Woolworths returns the products.

## `specialsOnly` (type: `boolean`):

Return only products currently on special (price drops, half price, multibuy).

## `inStockOnly` (type: `boolean`):

Skip products that are out of stock online.

## `includeRatings` (type: `boolean`):

Add the average star rating, rating count and review count (one extra lookup per page of products).

## `proxyConfiguration` (type: `object`):

Apify proxy settings. Leave the default. Choose RESIDENTIAL with country AU only if you want to force it.

## Actor input object example

```json
{
  "searchTerms": [
    "milk"
  ],
  "maxItems": 10,
  "sortBy": "relevance",
  "specialsOnly": false,
  "inStockOnly": false,
  "includeRatings": true,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Key fields

## `fullData` (type: `string`):

Complete dataset with all 44 fields

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchTerms": [
        "milk"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/woolworths-au-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchTerms": ["milk"],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/woolworths-au-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchTerms": [
    "milk"
  ],
  "maxItems": 10
}' |
apify call parseforge/woolworths-au-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/woolworths-au-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/gzXUVInsKcMKhDMng/builds/p0RdQognF7FJR8XDa/openapi.json
