Last night's price moves
- →
Every product in the Woolworths Australia range, crawled every night: shelf and unit prices, specials, barcodes and nutrition, plus a check that tells you whether a special is real.
Independent tool, not affiliated with Woolworths. Public data only.
Straight from the latest nightly crawl. These numbers refresh on their own, and the same data is what your run returns.
| product | online | in store | stores differ |
|---|---|---|---|
| → | – | of |
store prices read tonight; the Actor returns them for any of ~1,140 stores
Typed fields, stable ids and the price history already worked out. No HTML to parse, no second request for the details.
{
"productId": "88436",
"barcode": "9310199012717",
"name": "Dairy Farmers Full Cream Milk 2L",
"brand": "Dairy Farmers",
"price": 4.7,
"wasPrice": 4.7,
"pricePerLitre": 2.35,
"isOnSpecial": false,
"categoryPath": ["Dairy, Eggs & Fridge", "Milk", "Full Cream Milk"],
"allergens": { "contains": ["Milk"], "mayContain": [] },
"healthStarRating": 4,
"previousPrice": 4.95,
"priceChangedAt": "2026-10-14T15:31:02.000Z",
"lowestPrice30d": 4.7,
"averagePrice90d": 4.86,
"scrapedAt": "2026-10-20T15:45:14.223Z",
"source": "cache"
}
productId (stockcode)namebrandbarcode (EAN)categoryPathimagespricewasPriceisOnSpecialpricePerKg / pricePerLitrepreviousPricepriceChangedAtlowestPrice30daveragePrice90ddiscountChecknutritionallergenshealthStarRatingdietaryTagsscrapedAtsource cache · liveAnything a shopper would type, e.g. olive oil.
A whole aisle or sub-category, down to the shelf.
Paste any product, category or search page link.
Look up exact products by stockcode (productIds) or EAN (barcodes).
The whole range in one run, ready for your warehouse.
Each store's own price and in-store stock for the stores you pick: by store number, postcode or all ~1,140.
Track shelf price, unit price and promo depth for every product you care about, night after night.
Separate real discounts from inflated "was" prices with discountCheck, which tests the "was" price against what the product really cost.
Schedule a nightly run and push only what changed to Slack or Google Sheets through Apify integrations.
Match products by barcode and compare fairly with unit prices per kg or litre.
Nutrition panels, allergens and health stars for the whole range, joined to price and category.
Sign in with a free Apify account. No card needed to try.
A keyword, category, URL, stockcode or barcode, or the full catalog.
Download JSON, CSV or Excel, call the API, schedule it, or hand it to an AI agent.
Add a schedule on Apify, for example daily at 06:00, and send the results where you work.
curl -X POST \
"https://api.apify.com/v2/acts/crawlplant~woolworths-au/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{ "queries": ["olive oil"], "maxItems": 100 }'
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('crawlplant/woolworths-au').call({
queries: ['olive oil'],
maxItems: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.filter((p) => p.isOnSpecial).map((p) => [p.name, p.price, p.wasPrice, p.discountCheck?.verdict]));
# 1. Add this MCP server to your agent
https://mcp.apify.com?tools=crawlplant/woolworths-au
# 2. Ask in plain language
Which olive oils at Woolworths are on a genuine special this week?
Compare each with its 90-day average and sort by price per litre.
The same factory promises as every CrawlPlant Actor. How the factory works
The full range is harvested every night and stamped with scrapedAt.
Runs read the cached harvest, so results come back while you wait.
If a page can't be reached, you still get every other record.
Canary runs catch changes on the site before they reach you.
Every price change since the first crawl, kept per product.
$0.50 per 1,000 on Apify's Free plan. Exact tiers are on the Store page.
The full range is crawled every night. Each record carries scrapedAt, and priceChangedAt tells you exactly when the price last moved.
We check the "was" price against the product's own price history. discountCheck.verdict is genuine when the "was" price was really charged for at least 28 of the 90 days before the special, and questionable when it wasn't, for example when the price went up just before the "discount". Every record also carries lowestPrice30d and averagePrice90d.
Yes. Full-catalog export returns the whole range, roughly 25–30k products, in one run. You pay per product returned.
Yes. Pick stores by store number, by postcode or all ~1,140: each store gets its own rows with that store's price (which can differ from the online price) and in-store availability, read live when you run.
Every record includes the EAN barcode and normalised pricePerKg / pricePerLitre, so you can join and compare products across retailers fairly.
No. CrawlPlant is an independent tool that collects publicly available product and price data. No personal data, nothing behind a login.