Woolworths Australia Grocery Products Scraper avatar

Woolworths Australia Grocery Products Scraper

Pricing

from $0.99 / 1,000 products

Go to Apify Store
Woolworths Australia Grocery Products Scraper

Woolworths Australia Grocery Products Scraper

Scrape Woolworths Australia grocery products by keyword or URL: prices, specials, ingredients, nutrition, ratings and reviews.

Pricing

from $0.99 / 1,000 products

Rating

0.0

(0)

Developer

ParseBird

ParseBird

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Woolworths Australia Grocery Products Scraper

Scrape Woolworths Australia grocery products by keyword search or by pasting product, category, or specials URLs β€” no coding or API access required.

Search by keyword or crawl a whole department or specials category, then enrich every product with price, unit price, ingredients, nutrition, allergens, ratings and customer reviews β€” export as JSON, CSV, or Excel.

Copy to your AI assistant

Copy this block into ChatGPT, Claude, Cursor, or any LLM to start using this Woolworths scraper: parsebird/woolworths-au-scraper on Apify. Call it with the ApifyClient (Python: ApifyClient(token).actor("parsebird/woolworths-au-scraper").call(run_input={"mode": "search", "queries": ["milk"], "maxItems": 20, "fetchDetails": True})) or the equivalent JS client. Key inputs: mode ("search" or "url"), queries (string array), specialsCategory (half-price, lower-shelf-price, online-only-specials, everyday-low-price, seasonal-price, buy-more-save-more, bundles, all-specials, all-specials-complete), excludeCategories/excludeSpecialsCategories, sortBy, minRating, specialsOnly, includeMarketplace (default false), minPrice/maxPrice, urls (product/category/specials/product-group/search links or bare stockcodes), fetchDetails (default true), fetchReviews (default false), maxReviewsPerProduct (default 20, 0 = all), maxItems (default 20, 0 = unlimited), maxPages, resumeFromRunId for incremental delta runs, and proxy. Output is one JSON object per product with price, was-price, savings, department taxonomy, ingredients, nutrition, rating, and reviews. Full API reference: https://apify.com/parsebird/woolworths-au-scraper/api. Get an API token at https://console.apify.com/account/integrations.

What does Woolworths Australia Grocery Products Scraper do?

This Woolworths scraper extracts structured grocery product data from woolworths.com.au without touching the site's anti-bot protection yourself. It works as both a Woolworths API alternative and a bulk export tool:

  • πŸ” Search mode β€” search by keyword, exactly like the Woolworths search bar, or walk a whole Specials & offers category (Half Price, Buy More Save More, Bundles, and more).
  • πŸ”— URL mode β€” paste product, department, specials, product-group, or search URLs (or bare product/stockcode numbers) and get every product on those pages.
  • 🏷️ Price & specials data β€” current price, was-price, savings amount, unit price, multibuy pricing, and the offer label shown on-site.
  • πŸ§ͺ Full product detail β€” department/category taxonomy (both the storefront browse taxonomy and Woolworths' internal merchandising hierarchy), ingredients, allergens, nutrition panel, storage instructions, and country of origin.
  • ⭐ Ratings & reviews β€” aggregate rating, rating distribution, and individual customer reviews.
  • πŸ›’ Marketplace control β€” Woolworths-sold products only by default; optionally include third-party Everyday Market sellers.
  • πŸ“€ Delta runs β€” pass resumeFromRunId to fetch only products that weren't in a previous run's dataset.
  • πŸ”Œ Connector notifications β€” optionally push new listings into Notion, Linear, Airtable, or another Apify dataset as they're found.

Because it runs on the Apify platform, you also get scheduling (run it daily to track price changes), instant API and webhook access, and one-click export to JSON, CSV, Excel, HTML, or XML.

What data can you extract from Woolworths?

FieldDescription
stockcode, barcodeWoolworths product ID and barcode/GTIN
name, displayName, brandProduct name, full display name (with size), and brand
price, wasPrice, savingsAmountCurrent price, pre-special price, and dollar savings (AUD)
cupPrice, cupString, packageSize, unitUnit pricing and pack size
isOnSpecial, isHalfPrice, offerLabelSpecial flags and the on-site offer label text
multibuyPrice, multibuyMinQuantityBuy-more-save-more multibuy pricing, when offered
departments, departmentIds, departmentNamesEvery storefront browse department the product is filed under
department, category, subCategoryWoolworths' internal single-valued merchandising hierarchy (needs fetchDetails)
ingredients, allergenContains, containsGluten, containsNutsIngredients and allergen flags
nutritionalInformation, healthStarRatingFull nutrition panel and health star rating
rating, ratingCount, ratingDistributionAggregate rating and star breakdown
reviewsIndividual reviews: rating, title, text, author, date
isMarketProductWhether it's a third-party Everyday Market listing
url, smallImage/mediumImage/largeImage, imagesProduct URL and image URLs

How to scrape Woolworths product data

  1. Click Try for free on the Woolworths Australia Grocery Products Scraper page (no credit card needed to start).
  2. Choose search mode and enter one or more keywords (e.g. milk, pasta sauce) β€” or switch to url mode and paste product, category, or specials links.
  3. Optionally set filters: price range, specials category, minimum rating, departments to exclude.
  4. Turn on fetchDetails and fetchReviews if you need ingredients, nutrition, and customer reviews.
  5. Click Start and watch results land in the dataset in real time.
  6. Export the finished dataset as JSON, CSV, Excel, HTML, or XML, or pull it via the API / integrations.

Input / Output

The input schema mirrors the Woolworths site's own vocabulary β€” departments, specials categories, and product codes β€” see the Input tab for the full form. Example input:

{
"mode": "search",
"queries": ["milk"],
"sortBy": "relevance",
"minPrice": 1,
"maxPrice": 20,
"fetchDetails": true,
"fetchReviews": true,
"maxReviewsPerProduct": 20,
"maxItems": 20
}

Output example (one dataset item per product):

{
"stockcode": 842806,
"name": "Pantene Pro V Daily Moisture Renewal Nourishing Shampoo Dry Hair",
"brand": "Pantene",
"price": 15.5,
"wasPrice": 15.5,
"isOnSpecial": false,
"url": "https://www.woolworths.com.au/shop/productdetails/842806/pantene-pro-v-daily-moisture-renewal-nourishing-shampoo-dry-hair",
"department": "PERSONAL CARE",
"category": "HAIR CARE",
"rating": 4.5,
"ratingCount": 333,
"ratingDistribution": { "5": 204, "4": 107, "3": 13, "2": 3, "1": 6 }
}

Download results as JSON, CSV, Excel, HTML, or XML from the Console, or via the Apify API.

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("parsebird/woolworths-au-scraper").call(run_input={
"mode": "search",
"queries": ["milk"],
"maxItems": 20,
"fetchDetails": True,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["name"], item["price"])

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('parsebird/woolworths-au-scraper').call({
mode: 'search',
queries: ['milk'],
maxItems: 20,
fetchDetails: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

Specials & offers categories

Pick a category under specialsCategory to walk a whole promotion, or paste a specials listing link in URL mode:

Category valueCovers
all-specials-completeEvery currently-discounted product, department by department β€” including offers with no promotions-menu category.
all-specialsEvery promotions-menu category below, merged.
half-priceHalf Price.
lower-shelf-priceLower Shelf Price.
online-only-specialsOnline Only Specials.
everyday-low-priceEveryday Low Price.
seasonal-priceSeasonal Price.
buy-more-save-moreBuy More Save More (multibuy).
bundlesBundles.

The promotions menu is a curated selection, not an index of every markdown, so a genuine discount can appear in none of its categories β€” all-specials-complete reads each department's on-special listing directly and catches those too. Use excludeSpecialsCategories to drop a category instead of collecting it (skipped listings are never fetched, so they cost nothing), and excludeCategories to skip whole departments (e.g. beer-wine-spirits, pet) before anything is fetched.

Link shapeWhat you get
/shop/productdetails/<code> β€” or just the bare codeThat single product
/shop/browse/<department>The department, walked in full
/shop/browse/specials/<category>That specials category
/shop/productgroup/<id>A curated collection / landing page
/shop/search/products?searchTerm=...That keyword search

Use cases

  • Price monitoring β€” track prices and specials on a shopping list or competitor product range over time (schedule daily runs).
  • Market research β€” analyze pricing, ingredients, and ratings across a category or brand.
  • Deal hunting / couponing tools β€” pull every Half Price or Buy More Save More offer for a comparison site or newsletter.
  • Nutrition and allergen datasets β€” build a database of ingredients, allergens, and nutrition panels for grocery products.
  • Assortment tracking β€” see which departments a product is cross-listed under, or when new products appear in a category.

How it works

  1. The Actor opens a residential Australian session against woolworths.com.au and calls the same internal search/category APIs the website itself uses.
  2. In search mode, it pages through keyword results (or a specials category) applying your price, rating, and department filters as it goes.
  3. In URL mode, it classifies each link (product, department, specials, product group, or search) and fetches it the same way.
  4. When fetchDetails is on, it fetches full product detail (ingredients, nutrition, department hierarchy) and aggregate ratings for each kept product.
  5. When fetchReviews is on, it fetches individual customer reviews up to your cap.
  6. Every result is pushed to the dataset immediately, and optionally forwarded to your Notion, Linear, Airtable, or Apify connectors.

How much does it cost to scrape Woolworths?

This Actor uses the Pay-Per-Event pricing model β€” you only pay for what you get, with no separate compute charge.

EventFreeBronzeSilverGold
Product (per 1,000)$1.99$1.69$1.39$0.99
Detail (per 1,000)$0.49$0.49$0.49$0.49

A search for 1,000 products with fetchDetails on costs roughly $2.48 (Free plan) down to $1.48 (Gold plan). Turning fetchDetails off (price/specials data only) roughly halves the cost. Apify's monthly platform usage credits apply to any plan.

Yes β€” scraping publicly available data is generally legal, as confirmed in cases like hiQ Labs v. LinkedIn. This Actor only collects product information that's publicly visible on woolworths.com.au to anyone browsing the site. You are responsible for how you use the collected data β€” always check the target site's terms of service and applicable law (including the Australian Privacy Act, where relevant) before reusing scraped data commercially. See Apify's blog post on web scraping legality for more detail.

Other ParseBird e-commerce scrapers

FAQ

Does this use the official Woolworths API? No β€” Woolworths does not offer a public product API. This Actor reads the same data the woolworths.com.au website itself loads, structured into clean JSON.

Why is includeMarketplace off by default? Most departments are dominated by third-party Everyday Market sellers (for example, one department lists over 400,000 marketplace entries against under 2,000 sold directly by Woolworths), so leaving it off keeps runs fast and focused on Woolworths' own range. Turn it on to also include marketplace listings.

Some products have no rating field β€” is that a bug? No. Many grocery lines carry few or no reviews; when a product has no ratings, the field is simply omitted rather than shown as zero.

I set minRating and got fewer products than maxItems β€” why? minRating is applied after the Max products cap, not before, so a small maxItems combined with a rating filter can leave you with fewer (even zero) results if the top-ranked candidates happen to be unrated. Raise maxItems to give the filter more candidates to work with.

Can I get only new products since my last run? Yes β€” set resumeFromRunId to a previous run or dataset ID. Products already in that dataset are skipped, so you get a clean delta.

Can I schedule this to run automatically? Yes. Use Apify's Scheduler to run it daily, weekly, or at any interval, and combine it with Apify's storage integrations (Google Sheets, Slack, Make, Zapier, webhooks) to get notified of price changes.

A search with strict filters returned fewer items than I expected β€” why? To avoid walking an entire multi-hundred-thousand-item catalog when a keyword or category is almost entirely filtered out (for example a keyword Woolworths mostly doesn't sell directly, with includeMarketplace off), the Actor stops a source after 15 consecutive result pages that matched none of your filters. Loosen the filters, or split the run into narrower keywords/categories, to collect more.

I found a bug or missing field β€” where do I report it? Open an issue on the Actor's Issues tab in Apify Console, or use the API directly for programmatic access.