Woolworths Australia Scraper - Prices, Specials and Barcodes avatar

Woolworths Australia Scraper - Prices, Specials and Barcodes

Pricing

Pay per event

Go to Apify Store
Woolworths Australia Scraper - Prices, Specials and Barcodes

Woolworths Australia Scraper - Prices, Specials and Barcodes

Scrape the Woolworths Australia grocery catalogue: product name, brand, AUD price, was-price, unit price, specials, barcode/GTIN, pack size, stock and image. Search by keyword, look products up by barcode, browse a department or read full detail by stockcode.

Pricing

Pay per event

Rating

0.0

(0)

Developer

SR

SR

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Woolworths Australia Scraper

Pull the Woolworths Australia grocery catalogue as clean rows: product name, brand, AUD price, was-price, unit price, specials, barcode, pack size, stock status and image. Search by keyword, look products up by barcode or GTIN, browse a whole department, or read the full record including ingredients, nutrition panel and Health Star Rating.

{
"operation": "search",
"queries": ["tim tam", "vegemite"],
"specials_only": true,
"sort_by": "unit_price_asc",
"max_results": 200
}

Four things it does

OperationWhat you give itWhat you get
Search by keywordSearch termsThe catalogue rows for each term, tagged with the term that found them
Look up by barcodeEAN-13, UPC-A or GTIN codesThe Woolworths product for each code, or an explicit "not stocked"
Product detailWoolworths stockcodesThe full record: ingredients, nutrition, allergens, Health Star Rating, storage
Browse a categoryA department name such as fruit-vegEverything Woolworths lists in it

Barcode lookup, and the trap it avoids

This is the part worth reading before you use anything else for it.

Woolworths takes a barcode as a search term. For a barcode it stocks, you get exactly one product:

  • 9310072000282 → Arnott's Tim Tam Original Chocolate Biscuits 200g, $6.00

For a barcode it does not stock, it does not tell you. It quietly falls back to listing the catalogue, over a million rows headed by "Cavendish Bananas each". Both answers are an HTTP 200 carrying real products. Anything that reads the first row hands you a banana for a German chocolate GTIN and gives you no reason to doubt it.

So every lookup here is settled by comparing the code you asked for against the barcode on the rows that came back. A code with no exact match comes back as found: false with not_found_reason, never as a substitute product. Short codes are left-padded, so a 12-digit US UPC matches the 13-digit GTIN Woolworths actually stores.

The same care applies to stockcodes. A stockcode that never existed returns a 404, but a withdrawn one returns HTTP 200 with a blank name and a price of zero. That comes back as found: false too, rather than as a real product that costs nothing.

What comes back

FieldWhat it is
stockcodeWoolworths' own product id. Stable, use it to join runs
name, brand, package_size, unitThe product
barcode, gtin_formatIts barcode, normally a 13-digit GTIN
price, currencyCurrent price in AUD
was_price, savings_amount, is_on_special, is_half_priceThe promotion
unit_price, unit_measure, unit_price_labelPrice per 100g, per litre and so on
is_available, is_in_stock, supply_limitWhether you can actually buy it
is_sponsoredTrue when Woolworths served the row as a paid placement
image, url, description
query, positionWhich term found it, and where it ranked

With Add ingredients and nutrition turned on, each row also gets 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. That costs one extra request per product.

A note on price: Woolworths sends 0 both for "this product has no price right now" and for a withdrawn record. A zero in a price column quietly wins every cheapest-supplier comparison built on top of it, so those come back null.

A note on was_price: Woolworths fills it with the current price when nothing is on promotion. Passed through, that invites you to compute a 0% saving on a product that was never discounted, so it is dropped unless it is actually higher than the price.

The filters, and what we saw them do

  • On special only — Woolworths applies it. On "chocolate", 36 of 44 rows came back on special with it on, against 14 of 44 with it off.
  • Sort order — Woolworths applies it, and it visibly holds: the same search opened at $0.89 sorted price-ascending and at $1,298.99 price-descending. Unit-price sorting is the interesting one for grocery, because it is the only honest way to compare a 165g pack against a 200g one.

Volume

A catalogue page carries about 36 products, and paging is real: pages 1, 2, 5 and 10 of the same search all returned different products, out of 2,206 available for "milk". max_results is the total across all your terms and max_pages caps how deep each term goes.

Not included

There is no store locator. Woolworths' store endpoint answered with an error on every shape tried, so there is no per-store pricing or stock here. Prices are the national online ones.

Free plan

Free Apify accounts get 10 results per run. Paid plans are uncapped. On a free run the Actor stops after one page instead of paging through a catalogue it is not allowed to deliver.