Woolworths AU Scraper [$1.50/1K💰] | Groceries avatar

Woolworths AU Scraper [$1.50/1K💰] | Groceries

Pricing

from $1.40 / 1,000 results

Go to Apify Store
Woolworths AU Scraper [$1.50/1K💰] | Groceries

Woolworths AU Scraper [$1.50/1K💰] | Groceries

Extract Woolworths Australia products by search, category or current specials - price, was-price, savings, unit pricing, ingredients, nutrition, allergens and reviews. Ideal for Coles price comparison and fake-specials analysis.

Pricing

from $1.40 / 1,000 results

Rating

0.0

(0)

Developer

Ahmed Jasarevic

Ahmed Jasarevic

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

10 days ago

Last modified

Categories

Share

Woolworths AU Scraper

Extract Woolworths Australia product data from search, category or specials endpoints — current price, was-price, savings, unit pricing, ingredients, nutrition, allergens and customer reviews — priced at $1.50 per 1,000 products on the FREE tier.

  • The fields that matter for price analysis. wasPrice, savingsAmount, isSpecial, isHalfPrice, promotionType and rewardCardPromotion land as separate, explicit columns — so you can analyse discount claims rather than guess at them from a price string.
  • Unit pricing built in. unitWeightInGrams, cupPrice, cupMeasure, cupString and pricePerKgLabel let you compare per-100ml and per-kg across brands, and track shrinkflation when pack size changes.
  • Nutrition is not a separate scrape. Ingredients, allergens, health stars, storage and a structured nutrition object come from the list responses, so includeDetails is off by default.
  • Reviews in the same run. Product reviews come from the BazaarVoice-backed endpoint and land in their own dataset, joined on stockcode — no second Actor needed.
  • About 6.7× cheaper than the verified premium competitor at $10.00 per 1,000 products on the FREE tier.

Main Use Cases

  • Coles vs Woolworths price comparison — collect both supermarkets' ranges and normalise by unit price and pack size
  • Grocery specials monitoring — track current promotions, multibuy offers and half-price lines as they change weekly
  • Fake specials analysis — combine wasPrice, savingsAmount and promotionType with price history to test whether a claimed discount is genuine
  • Unit price and shrinkflation tracking — compare pricePerKgLabel and unitWeightInGrams across runs to detect pack-size reductions without price cuts
  • Product ingredients and nutrition database — build an ingredient, allergen and nutrient dataset for analysis or comparison tools
  • Product review collection — gather review text and star ratings per product without a separate scraper
  • Basket cost tracking — price a fixed shopping list repeatedly to measure real household basket cost
  • Category and department mapping — enumerate whole categories and the full department hierarchy

How It Works

  1. mode selects the collection strategy: search, categories, specials, or all to run every configured source.
  2. Products are pulled from Woolworths' own JSON API over HTTP/2 — browse and content-browse endpoints for search and categories, specials endpoints for promotions.
  3. Each response is normalised into one flat row with pricing, availability, unit-pricing, nutritional and taxonomy fields. Because the list endpoints already return nutritional data, this happens without extra per-product requests.
  4. Set includeDetails: true to additionally fetch the per-product detail payload for any extra fields the list view omits.
  5. When includeReviews is on, reviews are fetched in batches of stock codes from the BazaarVoice-backed review endpoint and pushed to a separate reviews dataset.
  6. deduplicate (on by default) suppresses repeat stockcode values across overlapping searches and categories.

Five dataset views are available: overview, pricing, catalogue, details and a full json view.

Analyse Woolworths Specials, Was-Prices and Unit Pricing

The reason Woolworths data gets discussed publicly is discount transparency — whether a "was" price was genuinely charged before, and whether per-unit pricing has quietly moved. That analysis needs wasPrice and savingsAmount as real columns, unit pricing as real fields, and repeated runs to compare against.

This Actor gives you all of that as structured output, plus ingredients, allergens and a nutrition object in the same row — so a single run supports both price analysis and product-composition analysis. Customer reviews come from the same run too, rather than a separate Actor.

Input

FieldTypeRequiredDefaultNotes
modestringnoallOne of all, search, categories, specials. all runs every configured source.
searchTermsarrayno["milk"]Search terms, used in search mode.
categoriesarrayno["dairy-eggs-fridge"]Category slugs, used in categories mode. Accepts slugs and category names.
specialsTargetsarrayno—Scopes for specials collection. Empty means Woolworths' default specials scope.
maxItemsPerTargetintegerno120Products per search term or category, clamped to 1–20,000. Clamped to 10 on the FREE tier.
maxItemsTotalintegerno2000Total products for the run, clamped to 1–200,000. Clamped to 10 on the FREE tier.
sortOrderstringnoTraderRelevanceOne of TraderRelevance, PriceAsc, PriceDesc.
includeDetailsbooleannofalseAlso fetch the per-product detail payload. Off by default because list responses already carry ingredients, nutrition, allergens and ratings.
includeReviewsbooleannofalseFetch customer reviews into the reviews dataset.
maxReviewsPerProductintegerno10Reviews per product, clamped to 1–500. Clamped to 5 on the FREE tier.
reviewsOrderstringnolatestOne of latest, highest, lowest.
deduplicatebooleannotrueSuppress duplicate stockcode values across overlapping sources.
delayMsintegerno150Delay between requests, clamped to 0–10,000.
maxConcurrencyintegerno3Parallel requests, clamped to 1–8.
proxyConfigurationobjectno—Proxy configuration. Not needed on the default direct HTTP/2 path.

Output

Default dataset — products (58 fields):

stockcode, barcode, name, rawName, brand, url, price, wasPrice, savingsAmount, isSpecial, isOnSpecial, isHalfPrice, isEdrSpecial, hasMultibuy, isMemberPrice, promotionType, rewardCardPromotion, isNew, isOnlineOnly, isInStock, isAvailable, isPurchasable, isSponsored, ageRestricted, unit, packageSize, unitWeightInGrams, cupPrice, cupMeasure, cupString, pricePerKgLabel, images, badge, description, descriptionHtml, summary, ingredients, allergens, allergenStatement, healthStarRating, storageInstructions, lifestyleAndDiet, countryOfOrigin, nutrition, rating, reviewCount, ratingCount, hasProductSubs, departments, subcategories, categories, departmentNodeId, departmentNodes, sap, variants, videoUrl, countryOfOriginLabel, meta

stockcode is the stable identifier — use it as your join key and for price-history tracking.

reviews dataset (16 fields, one row per review, carrying its own product context):

reviewId, stockcode, productName, brand, productUrl, price, rating, body, createdAt, createdDay, source, ratingAverage, reviewCount, ratingCount, sortOrder, meta

Join on stockcode.

Example Input

{
"mode": "search",
"searchTerms": ["whole milk", "sourdough bread"],
"maxItemsPerTarget": 40,
"maxItemsTotal": 80,
"sortOrder": "PriceAsc",
"includeReviews": true,
"maxReviewsPerProduct": 10,
"reviewsOrder": "latest"
}

Example Output

{
"stockcode": "201186",
"barcode": "9310072011863",
"name": "Woolworths White Sliced Sandwich Bread 600g",
"rawName": "White Sliced Sandwich Bread",
"brand": "Woolworths",
"url": "https://www.woolworths.com.au/shop/productd/woolworths-white-sliced-sandwich-bread-600g-201186",
"price": 3.5,
"wasPrice": 5.0,
"savingsAmount": 1.5,
"isSpecial": true,
"isOnSpecial": true,
"isHalfPrice": false,
"isEdrSpecial": false,
"hasMultibuy": false,
"isMemberPrice": false,
"promotionType": "Promotional",
"rewardCardPromotion": null,
"isNew": false,
"isOnlineOnly": false,
"isInStock": true,
"isAvailable": true,
"isPurchasable": true,
"isSponsored": false,
"ageRestricted": false,
"unit": "each",
"packageSize": "600g",
"unitWeightInGrams": 600,
"cupPrice": 0.58,
"cupMeasure": "100g",
"cupString": "$0.58 per 100g",
"pricePerKgLabel": "$5.83 per kg",
"images": ["https://cdn.woolworths.com.au/products/201186.jpg"],
"badge": null,
"description": "Classic white sandwich loaf, sliced.",
"descriptionHtml": "<p>Classic white sandwich loaf, sliced.</p>",
"summary": "Soft white bread suitable for sandwiches and toast.",
"ingredients": "Wheat Flour (59%), Water, Sugar (4.2%), Milk Solids (3.5%), Salt, Yeast, Wheat Gluten, Soybean Oil, Preservative (200), Baking Soda.",
"allergens": ["Wheat", "Milk", "Soy"],
"allergenStatement": "Contains Wheat, Milk and Soy. May contain traces of Peanuts.",
"healthStarRating": 4,
"storageInstructions": "Store in a cool dry place. Do not refrigerate.",
"lifestyleAndDiet": ["No Added Sugar Claims"],
"countryOfOrigin": "Australia",
"nutrition": {
"energy": { "value": 1024, "unit": "kJ", "per": "100g" },
"protein": { "value": 9.2, "unit": "g", "per": "100g" },
"fatTotal": { "value": 3.1, "unit": "g", "per": "100g" },
"sugars": { "value": 4.4, "unit": "g", "per": "100g" },
"sodium": { "value": 420, "unit": "mg", "per": "100g" }
},
"rating": 4.4,
"reviewCount": 823,
"ratingCount": 4127,
"hasProductSubs": false,
"departments": ["Bakery"],
"subcategories": ["Bread"],
"categories": ["Bakery", "Bakery > Bread"],
"departmentNodeId": "bakery",
"departmentNodes": ["bakery", "bread"],
"sap": "BKR-BRD-SLC",
"variants": [],
"videoUrl": null,
"countryOfOriginLabel": "Made in Australia",
"meta": { "scrapedAt": "2026-02-11T04:11:02.140Z", "sourceEndpoint": "browse" }
}

And one row from the reviews dataset:

{
"reviewId": "rv-8841207",
"stockcode": "201186",
"productName": "Woolworths White Sliced Sandwich Bread 600g",
"brand": "Woolworths",
"productUrl": "https://www.woolworths.com.au/shop/productd/woolworths-white-sliced-sandwich-bread-600g-201186",
"price": 3.5,
"rating": 4,
"body": "Stays fresh for a few days if you keep it sealed. Slicing is a little thick for sandwich bread.",
"createdAt": "2026-02-06T11:22:00Z",
"createdDay": "2026-02-06",
"source": "BazaarVoice",
"ratingAverage": 4.4,
"reviewCount": 823,
"ratingCount": 4127,
"sortOrder": "latest",
"meta": { "scrapedAt": "2026-02-11T04:11:09.770Z" }
}

Pricing

Pay-per-result at $1.50 per 1,000 products on the FREE tier. On the FREE tier both maxItemsPerTarget and maxItemsTotal are clamped to 10 products, maxReviewsPerProduct to 5, and the request budget to 120 — so plan a paid tier for basket-level or category-level datasets.

Integrations & Automation

  • Apify API — read both datasets from Python, Node or any HTTP client.
  • Schedules — Woolworths switches its catalogue on a weekly cadence, so a weekly run on the same day and time gives clean week-over-week specials diffs. Run daily if you are watching a small, fast-moving basket.
  • Webhooks — trigger a Coles scrape or a report build when a Woolworths run completes.
  • MCP — callable by AI agents through the Apify MCP server.
  • ahmed_jasarevic/link-preview-api — extract Open Graph and JSON-LD metadata from Woolworths product URLs as a cross-check on product naming and imagery
  • ahmed_jasarevic/preply-scraper — comparable structured-catalogue extraction if you also research supplier or service listings

FAQ

Why use this actor instead of a Woolworths product API?

There is no public Woolworths developer API. This Actor uses the same JSON API the Woolworths website itself calls, over HTTP/2, with no browser and no proxy on the default path.

Can I compare Woolworths prices against Coles?

Yes, and this is the most common use case. Collect the same searchTerms from both supermarkets and normalise on price, unitWeightInGrams and cupPrice/pricePerKgLabel rather than comparing shelf prices directly — that is what makes the comparison meaningful across different pack sizes.

What is the difference between isSpecial and isOnSpecial?

They are separate flags from the source. Treat isSpecial as "currently carrying a promotion" and isOnSpecial as the mark-down indicator, and use promotionType for the promotion category. Do not collapse them into one flag.

How do I analyse whether a discount is genuine?

Track price, wasPrice and savingsAmount for the same stockcode across scheduled weekly runs. A genuine reduction in the regular price shows up as a lower price once the promotion ends, rather than the wasPrice snapping straight back to the previous value.

Do I need includeDetails to get ingredients and nutrition?

No. That is the default design: the list endpoints already return ingredients, allergens, allergenStatement, healthStarRating, storageInstructions and the structured nutrition object, so a full catalogue run costs no extra requests for that data. Enable includeDetails only if you need fields the list view omits.

Do I get product reviews too?

Set includeReviews: true. Reviews are fetched in batches of stock codes and written to a separate reviews dataset with stockcode, rating, body, createdAt and the product's ratingAverage/reviewCount. Join on stockcode.

How many products can I collect in one run?

maxItemsPerTarget governs products per search term or category, and maxItemsTotal governs the run as a whole, capped at 200,000. deduplicate: true stops the same stockcode appearing twice when your terms or categories overlap. On the FREE pricing tier both are clamped to 10.

What are alternatives to this actor?

The Apify Store has several Woolworths scrapers, most of which return a narrow set of product fields and require a residential proxy. At least one charges $10.00 per 1,000 results on the FREE tier, and in the Store product reviews are a separate Actor. No Woolworths-branded API is available as a direct alternative source.

For AI Agents & LLM Apps

Purpose: returns Woolworths Australia product rows in the default dataset and customer review rows in a named reviews dataset, joinable on stockcode.

Minimal working input — smallest input that produces a valid run:

{ "mode": "search", "searchTerms": ["milk"], "maxItemsTotal": 5 }

Search variant with reviews:

{
"mode": "search",
"searchTerms": ["whole milk", "sourdough bread"],
"maxItemsPerTarget": 40,
"maxItemsTotal": 80,
"sortOrder": "PriceAsc",
"includeReviews": true,
"maxReviewsPerProduct": 10,
"reviewsOrder": "latest"
}

Specials variant:

{
"mode": "specials",
"maxItemsPerTarget": 100,
"maxItemsTotal": 500,
"sortOrder": "TraderRelevance"
}

Category variant:

{ "mode": "categories", "categories": ["dairy-eggs-fridge"], "maxItemsTotal": 500 }

Output fields — products: stockcode, barcode, name, rawName, brand, url, price, wasPrice, savingsAmount, isSpecial, isOnSpecial, isHalfPrice, isEdrSpecial, hasMultibuy, isMemberPrice, promotionType, rewardCardPromotion, isNew, isOnlineOnly, isInStock, isAvailable, isPurchasable, isSponsored, ageRestricted, unit, packageSize, unitWeightInGrams, cupPrice, cupMeasure, cupString, pricePerKgLabel, images, badge, description, descriptionHtml, summary, ingredients, allergens, allergenStatement, healthStarRating, storageInstructions, lifestyleAndDiet, countryOfOrigin, nutrition, rating, reviewCount, ratingCount, hasProductSubs, departments, subcategories, categories, departmentNodeId, departmentNodes, sap, variants, videoUrl, countryOfOriginLabel, meta. Reviews (named dataset reviews): reviewId, stockcode, productName, brand, productUrl, price, rating, body, createdAt, createdDay, source, ratingAverage, reviewCount, ratingCount, sortOrder, meta.

Behaviors an agent should know

  • mode defaults to all, which runs search, categories and specials together. Set it explicitly to control scope and cost.
  • searchTerms and categories both ship with defaults (["milk"], ["dairy-eggs-fridge"]). If you want only your own targets, pass your own arrays or empty ones — otherwise the defaults also get collected in all mode.
  • On the FREE pricing tier maxItemsPerTarget and maxItemsTotal are clamped to 10, maxReviewsPerProduct to 5, and the request budget to 120.
  • maxItemsTotal is a run-wide stop, not a per-target target. The run halts once it is reached, so a large maxItemsPerTarget with a small maxItemsTotal will truncate.
  • Reviews land in a separate named dataset (reviews), joined on stockcode. They are batched by stock code, not fetched one product at a time.
  • includeDetails defaults to false and is usually unnecessary — list responses already include ingredients, nutrition and allergens.
  • deduplicate defaults to true; overlapping searchTerms will not produce repeated stockcode rows.
  • isSpecial and isOnSpecial are independent flags. Do not treat them as synonyms.
  • Use stockcode — not name — as the key for price-history joins, since names change between runs.
  • Five dataset views exist: overview, pricing, catalogue, details, json.
  • No proxy is required on the default path; maxConcurrency is clamped to 1–8 and delayMs to 0–10,000.

Billing: pay-per-result — $1.50 per 1,000 products on the FREE tier, where the FREE tier also caps you at 10 products and 5 reviews per product.

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

It reads only publicly accessible product listings, category and specials endpoints, and public customer reviews, using the same JSON API the Woolworths website uses. It does not bypass authentication, does not use CAPTCHA solving, and applies request delays and concurrency limits to avoid undue load on the source site.

You are responsible for your own compliance with Woolworths' Terms of Service and with applicable data-protection law. Review output contains personal data — customer reviewer names where published, review text and review dates. Under the Australian Privacy Act, GDPR and comparable regimes you need a lawful basis for processing it and must handle it accordingly.

If you republish price or discount analysis, note that Australia's competition regulator has taken enforcement action over misleading supermarket discount and "was" pricing claims. This Actor supplies the raw fields for such analysis; presenting it as a finding of wrongdoing against any retailer is your responsibility and must be based on your own verification. Do not use extracted personal data for unsolicited commercial outreach in violation of applicable law.

SEO Keywords

woolworths scraper, woolworths product data, woolworths prices, woolworths specials, coles vs woolworths prices, grocery price comparison australia, fake specials grocery, discount claim investigation, shrinkflation tracking, unit price comparison, price per 100ml comparison, grocery price history, product ingredients database, nutrition data api, allergen data, woolworths reviews, online grocery price tracker, weekly specials catalogue, grocery basket cost tracker, australian supermarket data, woolworths category data, supermarket stockist data