Woolworths AU Scraper [$1.50/1K💰] | Groceries
Pricing
from $1.40 / 1,000 results
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
Maintained by CommunityActor 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,promotionTypeandrewardCardPromotionland 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,cupStringandpricePerKgLabellet 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
nutritionobject come from the list responses, soincludeDetailsis 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.00per 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,savingsAmountandpromotionTypewith price history to test whether a claimed discount is genuine - Unit price and shrinkflation tracking — compare
pricePerKgLabelandunitWeightInGramsacross 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
modeselects the collection strategy:search,categories,specials, orallto run every configured source.- Products are pulled from Woolworths' own JSON API over HTTP/2 — browse and content-browse endpoints for search and categories, specials endpoints for promotions.
- 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.
- Set
includeDetails: trueto additionally fetch the per-product detail payload for any extra fields the list view omits. - When
includeReviewsis on, reviews are fetched in batches of stock codes from the BazaarVoice-backed review endpoint and pushed to a separatereviewsdataset. deduplicate(on by default) suppresses repeatstockcodevalues 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
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
mode | string | no | all | One of all, search, categories, specials. all runs every configured source. |
searchTerms | array | no | ["milk"] | Search terms, used in search mode. |
categories | array | no | ["dairy-eggs-fridge"] | Category slugs, used in categories mode. Accepts slugs and category names. |
specialsTargets | array | no | — | Scopes for specials collection. Empty means Woolworths' default specials scope. |
maxItemsPerTarget | integer | no | 120 | Products per search term or category, clamped to 1–20,000. Clamped to 10 on the FREE tier. |
maxItemsTotal | integer | no | 2000 | Total products for the run, clamped to 1–200,000. Clamped to 10 on the FREE tier. |
sortOrder | string | no | TraderRelevance | One of TraderRelevance, PriceAsc, PriceDesc. |
includeDetails | boolean | no | false | Also fetch the per-product detail payload. Off by default because list responses already carry ingredients, nutrition, allergens and ratings. |
includeReviews | boolean | no | false | Fetch customer reviews into the reviews dataset. |
maxReviewsPerProduct | integer | no | 10 | Reviews per product, clamped to 1–500. Clamped to 5 on the FREE tier. |
reviewsOrder | string | no | latest | One of latest, highest, lowest. |
deduplicate | boolean | no | true | Suppress duplicate stockcode values across overlapping sources. |
delayMs | integer | no | 150 | Delay between requests, clamped to 0–10,000. |
maxConcurrency | integer | no | 3 | Parallel requests, clamped to 1–8. |
proxyConfiguration | object | no | — | 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.
Related Actors
ahmed_jasarevic/link-preview-api— extract Open Graph and JSON-LD metadata from Woolworths product URLs as a cross-check on product naming and imageryahmed_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
modedefaults toall, which runs search, categories and specials together. Set it explicitly to control scope and cost.searchTermsandcategoriesboth 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 inallmode.- On the FREE pricing tier
maxItemsPerTargetandmaxItemsTotalare clamped to 10,maxReviewsPerProductto 5, and the request budget to 120. maxItemsTotalis a run-wide stop, not a per-target target. The run halts once it is reached, so a largemaxItemsPerTargetwith a smallmaxItemsTotalwill truncate.- Reviews land in a separate named dataset (
reviews), joined onstockcode. They are batched by stock code, not fetched one product at a time. includeDetailsdefaults to false and is usually unnecessary — list responses already include ingredients, nutrition and allergens.deduplicatedefaults to true; overlappingsearchTermswill not produce repeatedstockcoderows.isSpecialandisOnSpecialare independent flags. Do not treat them as synonyms.- Use
stockcode— notname— 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;
maxConcurrencyis clamped to 1–8 anddelayMsto 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.
Legal & Compliance
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