Coles Price Tracker - Price Drops, Specials & Stock by Category avatar

Coles Price Tracker - Price Drops, Specials & Stock by Category

Pricing

from $0.99 / 1,000 product returneds

Go to Apify Store
Coles Price Tracker - Price Drops, Specials & Stock by Category

Coles Price Tracker - Price Drops, Specials & Stock by Category

Track Coles prices by category: paste coles.com.au category URLs and get every product's price, was price, special, multi-buy offer, unit price and stock. Monitor mode returns only price drops, new specials and newly listed products since the last run. Reliable reads with automatic retries.

Pricing

from $0.99 / 1,000 product returneds

Rating

0.0

(0)

Developer

NeverEmpty

NeverEmpty

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

Track Coles prices by category: paste any coles.com.au category URL (for example Milk, Bakery or the Full Cream Milk aisle) and get every product with its price, was price, special, multi-buy offer, unit price and stock. Turn on monitor mode and each later run returns only the price drops, new specials and newly listed products since the last run, with the previous price next to the new one.

Use it as a Coles price API for a spreadsheet, a price comparison site, a deal alert bot or category and promotion research.

What you get

  • Every product in a category, in flat rows. Name, brand, size, price, was price, saving, onSpecial, the special's label (1/2 Price, 40% Off), multi-buy offers (Pick any 2 for $10.50), unit price ($1.65/ 1L), in stock or not, aisle, product URL and image. Departments, categories and aisles all work, up to 200 per run.
  • Coles specials alerts without the noise. Monitor mode remembers each category. Later runs return only:
    • price-drop: the price went down (with previousPrice),
    • new-special: the product went on special,
    • new-in-category: a product Coles has just started listing in that category,
    • price-increase too, if you switch it on. A category where nothing changed costs one small category-checked event instead of a row per product.
  • Reads that come back. Coles answers busy readers with a check page. This Actor reads every page on a fresh IP address and asks again on another one when that happens, so a scheduled run returns the category instead of an empty dataset.
  • The whole category, not most of it. Coles moves products between pages while you page through a category (the number of sponsored slots changes from page to page), so a simple page-by-page read skips some products and repeats others. This Actor counts what it found against the total Coles reports and reads the pages again until they match. In our test run on the Milk category it returned 198 of the 198 products Coles listed.
  • Only the category you asked for. Every product is checked against the category path Coles files it under, and products from a different page or category are not returned. Each product appears once per category, even when Coles also shows it in a sponsored slot.
  • No wrong price is better than a wrong price. A product listed without a price comes back as a free no-price row. A category that cannot be read comes back as a free row that says why.

Questions people ask

How do I track Coles prices? Add the category URLs you care about, switch on onlyChanges and schedule the Actor (for example daily). The first run records the starting point for free; every later run lists only what dropped, went on special or was newly listed.

Is there a Coles API for product prices? This Actor works as one: run it through the Apify API and you get JSON, CSV or Excel with one row per product, from the same category pages a shopper sees.

How do I find Coles half price specials in a category? Run the category and filter priceDescription = 1/2 Price (or onSpecial = true for every special). In monitor mode, new-special rows tell you when a product goes on special.

Which categories can I use? Any https://www.coles.com.au/browse/... page: a department (/browse/bakery), a category (/browse/dairy-eggs-fridge/milk) or an aisle (/browse/dairy-eggs-fridge/milk/full-cream-milk). You can also give just the path, like dairy-eggs-fridge/milk.

Input

{
"categoryUrls": [
"https://www.coles.com.au/browse/dairy-eggs-fridge/milk",
"https://www.coles.com.au/browse/bakery/packaged-breads"
],
"onlyChanges": true
}
FieldWhat it does
categoryUrlsColes category pages, up to 200 per run. Filters and page numbers in the URL are ignored; the whole category is read from page 1. Empty = the example aisle Full Cream Milk.
maxItemsPerCategoryMost products per category in a normal run. Empty = every product on the pages read.
maxPagesPerCategoryMost pages read per category (48 products each), 1 to 150. Default 25 (1,200 products).
onlyChangesMonitor mode. First run: records the starting point, free, no product rows. Later runs: only price drops, new specials and newly listed products.
alertOnPriceIncreaseMonitor mode also returns price increases.
watchNameOptional. A separate memory per name (for example one per schedule).
resetMonitoringStateForget what this watch remembers and start again.
maxConcurrencyCategories read at the same time, 1 to 4 (default 2).
requestTimeoutSecsSeconds to wait for one page, 5 to 60 (default 30).

Output

One row per product:

{
"status": "ok",
"categoryPath": "dairy-eggs-fridge/milk",
"page": 1,
"position": 1,
"sponsored": false,
"productId": "1054581",
"name": "Protein Smoothie Chocolate",
"brand": "Dairy Farmers",
"size": "400mL",
"price": 3.3,
"wasPrice": 4.55,
"saveAmount": 1.25,
"onSpecial": true,
"promotionType": "SPECIAL",
"unitPrice": 8.25,
"unitPriceText": "$8.25/ 1L",
"inStock": true,
"department": "Dairy, Eggs & Fridge",
"category": "Milk",
"aisle": "Flavoured Milk",
"productUrl": "https://www.coles.com.au/product/dairy-farmers-protein-smoothie-chocolate-400ml-1054581",
"imageUrl": "https://cdn.productimages.coles.com.au/productimages/1/1054581.jpg",
"categoryTotalProducts": 198,
"changeType": null
}
ColumnMeaning
priceThe price shown on the category page, in Australian dollars. For products sold by weight (soldByWeight true) it is the price of the approximate pack size in size.
wasPrice, saveAmount, savePercentThe price before the special and the saving, when Coles shows them.
onSpecial, specialType, priceDescriptiononSpecial is true when the product carries Coles's SPECIAL label (including multi-buy and specials without a was price). specialType is PERCENT_OFF or MULTI_SAVE; priceDescription is the label text such as 1/2 Price.
offerDescription, multiBuyMinQuantity, multiBuyPriceEachMulti-buy offers such as Pick any 2 for $10.50, the quantity, and the price per item when you buy that many.
onlineOnlySpecialTrue when the special is an online-only price.
unitPrice, unitPriceText, unitOfMeasureUnit price as a number, as Coles prints it, and the unit it is per (1l, 100g, 1ea).
inStock, availableQuantity, retailLimitIn stock or not, the quantity Coles reports as available, and the most you can buy in one order.
department, category, aisleWhere Coles files the product inside the category you asked for.
page, position, sponsoredThe category page the product was read from and its place on that page. Products that appeared only in a sponsored slot come last with sponsored: true and no position.
storeIdThe Coles store whose prices the page shows (the store coles.com.au uses when no store is chosen).
changeType, changeTypes, previousPrice, previousWasPrice, previousOnSpecial, previousCheckedAtMonitor mode only: what changed and the remembered values.
status, noteok for a product row (charged). Every other status is a free row that says why.

Other statuses (all free): no-price, empty-category, not-found, moved-off-site, blocked, pages-not-read, robots-disallowed, bad-input, baseline-recorded, no-change, budget-reached.

Pricing

Pay per event:

  • product-returned: one product row with a price.
  • category-checked: monitor mode only, one per category on a run where nothing in that category changed.

The first monitor-mode run of a category, free rows, and categories or pages that cannot be read are not charged. If you set a maximum charge for a run, the Actor stops before it and the products it could not return are returned on the next run.

Good to know

  • Prices are the online prices of the default store coles.com.au shows when no store is chosen (storeId). In-store prices can differ by store.
  • In monitor mode a category is compared as a whole. If a category has more pages than maxPagesPerCategory, products seen for the first time are remembered without being reported as newly listed; price drops and new specials are still reported. Use aisle URLs or raise maxPagesPerCategory for very large departments.
  • Coles's robots.txt is followed: search pages, the specials listing pages and filter URLs are not read, and filters in a pasted URL are ignored.
  • Liquor categories are read from Coles's Liquorland pages on coles.com.au (/browse/liquor is sent to /browse/liquorland). Categories Coles shows only in stores, such as tobacco, have no products to return and come back as a free empty-category row.
  • When Coles has moved a category to a new address, the new address is read and categoryPath shows it.
  • Products are listed in Coles's default order. Each page is read on a fresh Apify Proxy IP address; if Coles still shows its check page on every try, that category comes back as a free blocked row. This Actor does not solve check pages.

Thanks for using this Actor

We build these tools for people who run them every day, and we improve them from what users tell us.

  • Missing a field, or need another filter? Tell us in the Issues tab. If the data is there, we add it.
  • Found a bug or a wrong value? Post the run ID in the Issues tab. Wrong data is the thing we fix first.

If this Actor saved you time, a short review helps other people find it.