# Woolworths Scraper (`automly/woolworths-australia-scraper`) Actor

Scrape Woolworths Australia grocery products by keyword, category, specials page, product link or stockcode: price, was price, unit price, half-price and multi-buy specials, stock, category, images, barcode, ingredients, allergens and nutrition.

- **URL**: https://apify.com/automly/woolworths-australia-scraper.md
- **Developed by:** [Automly](https://apify.com/automly) (community)
- **Categories:** E-commerce, Lead generation
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.29 / 1,000 products

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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

## Woolworths Australia Scraper - Prices, Specials & Stock

### What is Woolworths Australia Scraper?

**Woolworths Australia Scraper** is a tool that lets you **scrape grocery products from woolworths.com.au**: price, was price, unit price, half-price and other specials, multi-buy offers, stock, category, images, barcode, ingredients, allergens and the full nutrition panel. Type a search term or paste any Woolworths category, specials, search or product link (or just a stockcode), click **Start**, and download the products as Excel, CSV or JSON.

- ⚡ **Fast:** thousands of products a minute; a whole specials page or category in one run
- 🏷️ **Every special:** half price, Buy More Save More multi-buys, lower shelf prices, online-only deals and Everyday Rewards bonus points, with the was price and saving as numbers
- 🥫 **Full product facts:** barcode, ingredients, allergens, free-from and dietary claims, Health Star Rating and the nutrition panel for every product that has them
- 📍 **In-store stock by postcode:** see which of the nearest Woolworths stores have each product
- 🔓 **No login:** no Woolworths account needed
- 💸 **Free to try:** the $5 of free usage every Apify account gets each month covers about 10,000 products

### What can Woolworths Australia Scraper do?

- **Scrape Woolworths search results** for any keyword, like `milk`, `tim tam` or `gluten free bread`
- **Scrape a whole Woolworths category or aisle**, like Fruit & Veg or Dairy, Eggs & Fridge
- **Scrape Woolworths specials**: the half-price page, Buy More Save More, lower shelf prices, or every special at once
- **Track Woolworths grocery prices** over time: price, was price, saving and unit price per litre, kilo or 100 g
- **Look up products by stockcode or link** to monitor a fixed list of products
- **Check in-store stock** at the stores nearest any Australian postcode
- **Build food and nutrition datasets** with barcodes, ingredients, allergens and nutrition panels
- Export to Excel, CSV, JSON, HTML or XML, or send the data to Google Sheets, Make, Zapier and more

### What data can you extract from Woolworths?

| | | |
|---|---|---|
| 🏷️ Product name, brand, size | 💲 Price in AUD | 🔖 Was price and saving |
| ⚖️ Unit price (per 1L, 100g, 1kg) | 🎯 Half price and special type | 🛒 Multi-buy offers (2 for $6.50) |
| ⭐ Everyday Rewards offers | 📦 Online stock and availability | 📍 In-store stock near a postcode |
| 🗂️ Departments and categories | 🖼️ All product images | 🔢 Barcode and stockcode |
| 🥣 Ingredients | ⚠️ Allergens and may-contain | 🌱 Free-from and dietary claims |
| 🍎 Nutrition panel per 100 g and per serving | ⭐ Health Star Rating | 🌏 Country of origin |

### How to scrape Woolworths

1. [Create a free Apify account](https://console.apify.com/sign-up).
2. Open **Woolworths Australia Scraper**.
3. Enter search terms, or paste Woolworths category, specials, search or product links (or stockcodes), one per line.
4. Set how many products you want per search term or link, and optionally a postcode for in-store stock.
5. Click **Start**, then download the products as Excel, CSV, JSON or HTML.

### How much does it cost to scrape Woolworths products?

You pay only for the products you get. Products saved with **Include product page details** turned on, or with a **Postcode for in-store stock**, have their own price:

| Apify plan | Products per 1,000 | Products with page details or store stock per 1,000 |
|---|---|---|
| Free | **$0.50** | **$1.20** |
| Starter (Bronze) | **$0.45** | **$1.08** |
| Scale (Silver) | **$0.40** | **$0.96** |
| Business (Gold) and higher | **$0.35** | **$0.85** |

Platform usage is included in these prices, so there is nothing else to pay.

Example: 1,000 products from the half-price specials page cost $0.50 on the Free plan and $0.35 on Business. The same 1,000 products with product page details or store stock cost $1.20 on the Free plan.

Every Apify account gets **$5 of free usage each month**, enough for about 10,000 products at Free-plan prices. See the **Pricing** tab for details.

### ⬇️ Input

| Setting | What it does |
|---|---|
| **Search terms** | Words to search Woolworths for, like `milk` or `tim tam` |
| **Links and stockcodes** | Any mix of categories (`https://www.woolworths.com.au/shop/browse/fruit-veg/fruit`), specials pages (`https://www.woolworths.com.au/shop/browse/specials/half-price`, or `/shop/browse/specials` for every special), search pages (`https://www.woolworths.com.au/shop/search/products?searchTerm=coffee`), product pages (`https://www.woolworths.com.au/shop/productdetails/888137/woolworths-full-cream-milk`) and bare stockcodes (`888137`) |
| **Max products per search term or link** | How many products to save from each search term, category or specials page (default 100). Set 0 for all of them |
| **Sort by** | Relevance, price low to high, price high to low, or name |
| **Search: specials only** | Keep only products on special in search results |
| **Include product page details** | Adds the country of origin label, serving size, servings per pack and main aisle |
| **Postcode for in-store stock** | An Australian postcode, like `2000`: adds whether the nearest Woolworths stores have each product in stock |

Every half-price special:

```json
{
  "startUrls": ["https://www.woolworths.com.au/shop/browse/specials/half-price"],
  "maxItemsPerInput": 0
}
```

Cheapest milk first, with stock at stores near Sydney CBD:

```json
{
  "searchTerms": ["milk"],
  "sortBy": "priceLowToHigh",
  "maxItemsPerInput": 50,
  "postcode": "2000"
}
```

A fixed list of products by stockcode, with product page details:

```json
{
  "startUrls": ["888137", "6073909", "133211"],
  "includeDetails": true
}
```

### ⬆️ Output

Every product is one row. A product on special with product page details and a postcode:

```json
{
  "stockcode": 123906,
  "name": "La Molisana Extra Lusso Fusilli Pasta 500g",
  "brand": "La Molisana",
  "packageSize": "500g",
  "price": 2.45,
  "wasPrice": 3.5,
  "savings": 1.05,
  "currency": "AUD",
  "unitPrice": 0.49,
  "unitPriceMeasure": "100G",
  "unitPriceText": "$0.49 / 100G",
  "soldBy": "each",
  "isOnSpecial": true,
  "isHalfPrice": false,
  "specialType": "30% Off",
  "promotionText": "Save $1.05",
  "promotions": ["Save $1.05", "30% Off"],
  "multibuyQuantity": null,
  "multibuyPrice": null,
  "isRewardsOffer": false,
  "rewardsOffer": null,
  "inStock": true,
  "isAvailable": true,
  "isNew": false,
  "isOnlineOnly": false,
  "isMarketplace": false,
  "seller": null,
  "isSponsored": false,
  "departments": ["Pantry"],
  "categories": ["Italian", "Dried Pasta"],
  "aisle": "pasta sheets",
  "description": "Durum wheat semolina pasta",
  "image": "https://cdn0.woolworths.media/content/wowproductimages/large/123906.jpg",
  "images": [
    "https://cdn0.woolworths.media/content/wowproductimages/large/123906.jpg",
    "https://cdn0.woolworths.media/content/wowproductimages/large/123906_2.jpg"
  ],
  "rating": null,
  "ratingCount": 0,
  "reviewCount": 0,
  "barcode": "8004690310281",
  "ingredients": "Durum Wheat Semolina",
  "allergens": ["Gluten"],
  "mayContain": ["Soy"],
  "freeFrom": ["Dairy Free", "Egg Free", "Fish Free", "Lactose Free"],
  "dietary": ["High Protein", "Kosher", "Low Fat", "Low Salt", "Low Sugar", "Source of Protein", "Vegan", "Vegetarian"],
  "healthStarRating": null,
  "nutrition": [
    {"nutrient": "Carbohydrate", "per100": "Approx.70g", "perServing": "Approx.70g"},
    {"nutrient": "Energy kJ", "per100": "Approx.1489kJ", "perServing": "Approx.1489kJ"}
  ],
  "servingSize": "100g",
  "servingsPerPack": null,
  "storage": null,
  "countryOfOrigin": "Italy",
  "countryOfOriginLabel": "Product of Italy",
  "postcode": "4000",
  "nearbyStores": [
    {"storeId": "2596", "name": "Macarthur Central", "suburb": "Brisbane", "state": "QLD", "postcode": "4000", "distanceKm": 0.34, "inStock": true}
  ],
  "url": "https://www.woolworths.com.au/shop/productdetails/123906/la-molisana-extra-lusso-fusilli-pasta",
  "source": "pasta",
  "scrapedAt": "2026-10-02T08:09:23Z"
}
```

Prices are numbers in Australian dollars, ready for spreadsheets and charts. `wasPrice` and `savings` are filled only when the product is on special. A multi-buy deal such as "2 for $6.50" gives `multibuyQuantity: 2` and `multibuyPrice: 6.5`.

The **Products** tab shows every product with its image, price and deal, and the **Prices and specials** tab puts prices, unit prices, specials, multi-buys and Rewards offers side by side. The run report lists, for every search term and link, how many products Woolworths lists and how many were saved, and names any stockcode or category that does not exist.

### Which fields come with which setting?

| Field | Default | With product page details | With a postcode |
|---|---|---|---|
| Prices, unit price, specials, multi-buy, Rewards offers, stock | ✅ | ✅ | ✅ |
| Barcode, images, categories, description | ✅ | ✅ | ✅ |
| Ingredients, allergens, dietary claims, Health Star Rating, nutrition | ✅ | ✅ | ✅ |
| Country of origin label, serving size, servings per pack, aisle | | ✅ | |
| In-store stock at the nearest stores | | | ✅ |

Ingredients, allergens and nutrition come with every product Woolworths publishes them for; fresh produce and some imported or marketplace items have none.

### How can I use Woolworths data?

- **Grocery price tracking:** follow prices, was prices and unit prices for a basket of products week by week
- **Specials monitoring:** collect every half-price and multi-buy deal as soon as the weekly specials change
- **Competitor and brand analysis:** see how a brand is priced and promoted across a category
- **Price comparison apps and newsletters:** feed current Woolworths prices and deals into your own product
- **Nutrition and dietary research:** build datasets of ingredients, allergens and nutrition panels
- **Retail analytics:** measure range, pricing and promotion depth by department and aisle

### Scrape more grocery and retail data

| Actor | What it gets |
|---|---|
| [Walmart Scraper - Products, Prices, Stock & Reviews](https://apify.com/automly/walmart-scraper) | Walmart products by keyword, category or link: price, was price, unit price, stock and seller |
| [Target.com Scraper - Products, Prices & Stock](https://apify.com/automly/target-com-scraper) | Target products by keyword, category, link or TCIN: prices, availability, ratings and promotions |
| [Amazon Products Scraper - Fast & Efficient (with Sales Data)](https://apify.com/automly/amazon-products-scraper---fast-efficient-with-sales-data) | Amazon product pages: price, BSR, badges, variants, reviews and monthly sales estimates |
| [Shopify Products Scraper](https://apify.com/automly/shopify-products-scraper) | Any public Shopify store's catalog: titles, prices, variants, images and availability |
| [eBay Scraper](https://apify.com/automly/ebay-scraper) | eBay listings on 8 marketplaces: prices, shipping, condition and seller ratings |

### ❓FAQ

#### How much does it cost to scrape Woolworths?

$0.50 per 1,000 products on the Free plan and less on paid plans, with platform usage included. See the cost section above for every plan and price. Set **Max products per search term or link** or a maximum cost per run to keep a run within budget.

#### How many products can I get?

A category or specials page is read to the end: every product it lists (the half-price page lists about 1,800). A search term lists up to 10,000 products; use narrower terms or category links to go deeper. A product that shows up in several search terms or links is saved once per run.

#### Are prices the same in every store?

The prices are the woolworths.com.au online prices. A postcode adds which of the nearest stores have each product in stock; it does not change the prices shown.

#### Can I scrape the weekly specials and half-price deals?

Yes. Paste `https://www.woolworths.com.au/shop/browse/specials/half-price` for the half-price list, `https://www.woolworths.com.au/shop/browse/specials/buy-more-save-more` for multi-buys, or `https://www.woolworths.com.au/shop/browse/specials` for every special. Or turn on **Search: specials only** to keep only discounted results for your search terms.

#### Does it include ratings and reviews?

Every row has `rating`, `ratingCount` and `reviewCount`. Most Woolworths products show no ratings at the moment, so these are usually empty or 0.

#### Do I need a Woolworths account?

No. You don't need a Woolworths account, cookies or an API key: the scraper collects the public product information anyone can see without signing in. Personal offers that need an Everyday Rewards login are not included.

#### What happens with a wrong stockcode or link?

The run goes on with the other inputs, and the run report lists the stockcodes and categories that do not exist. A link that is not a Woolworths page is named in the run report too.

#### Can I connect Woolworths Australia Scraper to other tools or AI agents?

Yes. Start runs and download results with the Apify API or the Python and JavaScript clients, send results to Make, Zapier, n8n, Google Sheets or Slack with Apify integrations and webhooks, or let AI assistants and agents run it through the Apify MCP server at [mcp.apify.com](https://mcp.apify.com). For instant answers inside your app, its real-time API returns products directly for `/search?q=milk` and `/product?id=888137`, without starting a run.

#### Is it legal to scrape Woolworths?

This scraper only collects public product information that anyone can see on woolworths.com.au: prices, specials, stock and product facts. It does not collect personal data or anything behind an Everyday Rewards login. If your own use involves personal data, it may be protected by laws such as GDPR, so only scrape for a legitimate reason and ask a lawyer if you are unsure. You can read more in [Is web scraping legal?](https://blog.apify.com/is-web-scraping-legal/)

Woolworths Australia Scraper is an independent tool. It is not affiliated with, endorsed by or sponsored by Woolworths Group.

#### Something isn't working?

Open the **Issues** tab and tell us your input and what you expected, or which field you need. We read every one and usually reply within a day.

### ⭐ Your feedback

Have an idea or found a problem? Tell us in the **Issues** tab. If Woolworths Australia Scraper saved you time, a short review on the **Reviews** tab helps other people find it.

# Actor input Schema

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

Words to search Woolworths for, like milk, tim tam or gluten free bread. Each term is searched on its own.

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

Paste woolworths.com.au links, one per line: categories and aisles (https://www.woolworths.com.au/shop/browse/fruit-veg/fruit), specials pages (https://www.woolworths.com.au/shop/browse/specials/half-price, or https://www.woolworths.com.au/shop/browse/specials for every special), search pages (https://www.woolworths.com.au/shop/search/products?searchTerm=coffee) and product pages (https://www.woolworths.com.au/shop/productdetails/888137/woolworths-full-cream-milk). You can also enter a product's stockcode on its own, like 888137.

## `maxItemsPerInput` (type: `integer`):

Set how many products to save from each search term, category or specials page. 0 saves every product listed (a search lists up to 10,000).

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

The order products are listed in, which decides which ones come first when you set a maximum. A search link that carries its own order keeps it.

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

Keep only products on special in search results (search terms and search links).

## `includeDetails` (type: `boolean`):

Add what only the product page shows: the country of origin label, serving size and servings per pack, and the main aisle. Nutrition, ingredients, allergens, barcode and images are included either way.

## `postcode` (type: `string`):

Enter an Australian postcode (like 2000) to add whether each product is in stock at the nearest Woolworths stores. Prices are always the woolworths.com.au online prices.

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

The default works for most runs.

## Actor input object example

```json
{
  "searchTerms": [
    "milk"
  ],
  "startUrls": [
    "https://www.woolworths.com.au/shop/browse/specials/half-price"
  ],
  "maxItemsPerInput": 50,
  "sortBy": "relevance",
  "specialsOnly": false,
  "includeDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `products` (type: `string`):

No description

## `pricing` (type: `string`):

No description

## `results` (type: `string`):

No description

## `report` (type: `string`):

No description

# 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"
    ],
    "startUrls": [
        "https://www.woolworths.com.au/shop/browse/specials/half-price"
    ],
    "maxItemsPerInput": 50,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("automly/woolworths-australia-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"],
    "startUrls": ["https://www.woolworths.com.au/shop/browse/specials/half-price"],
    "maxItemsPerInput": 50,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("automly/woolworths-australia-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"
  ],
  "startUrls": [
    "https://www.woolworths.com.au/shop/browse/specials/half-price"
  ],
  "maxItemsPerInput": 50,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call automly/woolworths-australia-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,automly/woolworths-australia-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/sbpRPv0IdN0K4tVpX/builds/WIRnAaRoMLJEePHgz/openapi.json
