Woolworths Australia Scraper & API - Prices, Specials, Barcodes
Pricing
from $2.00 / 1,000 actor run starteds
Woolworths Australia Scraper & API - Prices, Specials, Barcodes
Woolworths API and scraper for the Australian grocery catalogue: name, brand, AUD price, was-price, unit price, specials, barcode/GTIN, pack size, stock and image. Search by keyword, look up barcodes, browse a department or read full detail by stockcode.
Pricing
from $2.00 / 1,000 actor run starteds
Rating
0.0
(0)
Developer
SR
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
2
Monthly active users
15 days ago
Last modified
Categories
Share
Woolworths API and Scraper for Australia
Woolworths API for the Australian grocery catalogue: send a keyword, barcode, stockcode or department and get product names, brands, prices in AUD, specials, unit prices, barcodes, pack sizes, stock flags and images back as structured rows. Use it as a Woolworths price tracker, for barcode matching or for product research.
The actor returns structured dataset rows that you can export as JSON, CSV or Excel, or read through the Apify API from your own code. Each row states whether a lookup found a product, so you can distinguish an unavailable identifier from a product that currently has no published price. Product identifiers make repeated runs joinable, while barcodes support comparison with other catalogues.
Woolworths API operations
Search accepts one or more search terms. Each returned product carries the term in query. Terms run in their supplied order; duplicate terms and empty entries are removed. The default search is tim tam. Woolworths applies its own search relevance, including approximate matching, so unrelated spelling can still return products.
Barcode lookup accepts EAN, UPC and GTIN values. Every result is checked against the product's own barcode. A stocked barcode returns a product; an unmatched barcode returns found: false and a string explanation in not_found_reason. A single barcode can resolve to up to five exact product matches. Those matches are separate dataset rows. Short codes are left-padded for comparison, and the original input remains in requested_barcode.
Product detail accepts Woolworths stockcodes. A successful lookup includes the full product fields, ingredients, nutrition, allergen information, origin and category information that Woolworths publishes. A missing or withdrawn product returns its stockcode with found: false. No substitute product is supplied.
Category accepts a department slug, its displayed name or its category identifier. For example, the recorded category example uses bakery. An unknown category produces a successful empty actor run and an error record suggesting available categories.
Input
The files linked with the examples below contain actual responses collected on 5 October 2026. Catalogue prices, promotions and availability can change after collection.
Search input
{"operation": "search","queries": ["tim tam"],"max_results": 100}
Barcode input
{"operation": "barcode","barcodes": ["9310072000282","9310072013855","4006381333931"]}
Product input
{"operation": "product","stockcodes": ["36066","32257","144639"]}
Category input
{"operation": "category","category": "bakery","sort_by": "price_asc","specials_only": true,"with_details": true,"max_results": 15}
Output
This is the first row of the recorded barcode example. It is a real product response, including the price observed during that run.
{"stockcode": "36066","name": "Arnott's Tim Tam Original Chocolate Biscuits 200g","brand": "Arnott's","barcode": "9310072000282","gtin_format": 13,"price": 3,"was_price": 6,"currency": "AUD","savings_amount": 3,"is_on_special": true,"is_half_price": true,"unit_price": 1.5,"unit_measure": "100G","unit_price_label": "$1.50 / 100G","package_size": "200g","unit": "Each","is_available": true,"is_in_stock": true,"supply_limit": 36,"is_sponsored": false,"description": "Arnott's Tim Tam Original Chocolate Biscuits 200g","image": "https://cdn0.woolworths.media/content/wowproductimages/large/036066.jpg","url": "https://www.woolworths.com.au/shop/productdetails/36066/arnott-s-tim-tam-original-chocolate-biscuits","requested_barcode": "9310072000282","found": true,"position": 1,"record_type": "barcode_lookup","source": "woolworths-scraper","country": "AU","fetched_at": "2026-10-05T18:55:59.511Z","product_id": "36066","gtin": "9310072000282","title": "Arnott's Tim Tam Original Chocolate Biscuits 200g","image_url": "https://cdn0.woolworths.media/content/wowproductimages/large/036066.jpg"}
The original fields remain available: stockcode, name, brand, barcode, gtin_format, price, was_price, currency, savings_amount, is_on_special, is_half_price, unit_price, unit_measure, unit_price_label, package_size, unit, is_available, is_in_stock, supply_limit, is_sponsored, description, image and url. Search results additionally include query; all rows have position and found. Unmatched barcodes also include not_found_reason as a string explaining why no product was found.
When requested, detail fields include ingredients, nutrition, country_of_origin, health_star_rating, allergen_statement, allergens_may_be_present, contains_gluten, contains_nuts, department, aisle, storage_instructions and product_warnings. The nutrition panel retains Woolworths' original nested labels and values, including quantities per serving and per 100 grams or millilitres. Missing published values remain null or absent, as appropriate for the operation.
Rows also include source, country, fetched_at, record_type and convenient aliases product_id, gtin, title and image_url. These additions support joining records across sources without changing existing dataset names. A price of zero from Woolworths is represented as null. A was-price equal to the current price is also null, because it does not indicate a discount.
The default key-value store contains summary, with counts for returned products, pages, price and barcode coverage, promotions and resolved lookups. When a request encounters a problem, errors contains a code and message. The actor's OUTPUT record provides the delivered count and charging notes. A valid empty run succeeds; an unexpected internal failure can fail the run.
Options and limits
specials_only filters search and category results to promotions. sort_by accepts relevance, best_match, price_asc, price_desc, unit_price_asc, unit_price_desc and name. Barcode lookup uses relevance and performs exact matching independently of those options.
with_details adds detail information to search, category and barcode hits. Product detail always requests that information. max_results defaults to 100 and allows up to 5,000 rows. max_pages defaults to 20 and allows up to 50 pages per search term or category. retries defaults to three attempts. Larger requests are collected in successive pieces automatically by the actor. If collection cannot finish, partial results and explanatory warnings remain available.
Legacy API aliases query, barcode, gtin and stockcode continue to work. List fields also accept text separated by commas or newlines. The primary list takes precedence over its alias when it contains values.
Use cases
- Woolworths price tracker. Schedule the same search or category run daily and store
price,was_price,unit_priceandis_on_specialperstockcode. The joined runs give you a price history per product, including when a special starts and ends. - Specials and half-price monitoring. Set
specials_onlyon a department or search term to collect the current promotions, withsavings_amountandis_half_priceper row. - Barcode matching across retailers. Feed the EAN or GTIN codes from your own range into the barcode lookup. Exact matches come back with the Woolworths stockcode, price and pack size; codes Woolworths does not stock come back as
found: false, so they never pollute a comparison. - Product content and nutrition. Product detail adds ingredients, the nutrition panel, allergens, health star rating and country of origin for catalogue, compliance or recipe work.
- Assortment and category research. Browse a department sorted by price or unit price to see how a category is built up, which brands it carries and what is on promotion.
Woolworths API compared with other options
Woolworths does not publish an open product catalogue API for general use. The options people usually look at are:
| Option | What you get | What to watch |
|---|---|---|
| This actor | Search, barcode, stockcode and category in one input; flat rows with prices, specials, unit prices and barcodes; detail fields on request | Australian catalogue only |
| Writing your own scraper | Full control over the code | You maintain it yourself whenever the website changes, and you handle paging, retries and barcode checks |
| Consumer price-tracker apps and websites | Easy price history for shoppers | Built for browsing, not for exporting thousands of rows into your own systems |
| Other marketplace APIs and actors | Varying field sets | Compare which lookups are supported (barcode, stockcode, category) and how a missing product is reported |
What sets this actor apart is the exact barcode check, the explicit found flag on every lookup and the unit-price fields, which together make it suitable for joining Woolworths data with other catalogues.
Pricing
The existing pay-per-event prices are unchanged: $0.002 for run_start, $0.0007 for each delivered product row and $0.005 for each delivered barcode-answer row. The start event is charged once, including an empty or invalid run. Empty runs have no row charges. Barcode hits and misses both count as barcode answers, and a barcode answer is never additionally charged as a product. A stockcode lookup retains the existing product event for its delivered row, including an explicit missing-stockcode result.
Charging occurs after rows are delivered. On a free Apify plan, runs deliver at most ten rows and use at most one catalogue page; the row charges apply only to delivered rows. A paid plan keeps the requested result and page limits. The actor does not change your Apify subscription or introduce a separate balance.
FAQ
Is there an official Woolworths API I can use instead?
Woolworths does not publish an open product catalogue API for general use. This actor gives you the public catalogue data as an API: start a run through the Apify API with your input and read the dataset as JSON.
How do I track Woolworths prices over time?
Schedule a run on Apify with the same input, for example a daily category or search run. Join the rows on stockcode and keep price, was_price, unit_price and fetched_at to build your own Woolworths price history.
Does this scrape Woolworths South Africa or New Zealand?
This actor covers the Australian Woolworths catalogue. Prices use AUD and product identifiers refer to that catalogue. It does not select a separate international storefront.
Why did my barcode return no product?
The actor requires an exact barcode match. If Woolworths does not stock the requested code, the result states that explicitly. A missing match should remain unresolved when you join this output to another retailer's catalogue.
Can I compare prices between different package sizes?
Use unit_price, unit_measure and unit_price_label alongside package_size. Keep the measure with the numeric price: a price per 100 grams and a price per litre describe different comparisons. Promotion fields and the was-price help identify changes between runs.
Are ingredients and nutrition always available?
Those fields depend on what Woolworths publishes. Request with_details for search, category and barcode results, or use product detail. Missing values are retained as missing values; no ingredients or nutrition facts are inferred.
Can I place an order with this actor?
The output is catalogue data. It does not create a shopping basket, reserve stock or place orders. Published availability flags describe the catalogue response at collection time.