Coles Scraper — Bulk Prices & CSV API
Pricing
from $1.00 / 1,000 product results
Coles Scraper — Bulk Prices & CSV API
Collect Coles products, specials and basket prices; track delivered observations with explicit store context. Bulk export: JSON, CSV, Excel and API. PPE: $1/1K product results; usage extra.
Pricing
from $1.00 / 1,000 product results
Rating
0.0
(0)
Developer
Apivault Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Coles Scraper — Grocery Prices, Specials & Basket Monitor

Collect Coles Australia grocery prices, specials and product details as structured JSON for retail research, shopping-basket monitoring and AI agents. Search products, read supermarket categories, calculate selected basket totals, retain dated price observations and compare live Woolworths products using verified GTIN and pack identity.
Apify account access is required to run this Actor. The result tariff is $1 per 1,000 delivered products on every plan, with Apify platform resources charged separately. Optional Woolworths comparison charges are additional.
Coles product search
{"searchTerms":["milk"],"maxItems":100,"maxPages":2}
No targets defaults to a small milk search. Combine searchTerms, public Coles categoryUrls, productUrls and basket, or leave search terms empty for URL-only runs. Product IDs are deduplicated across inputs and pages. Associated recommendations are excluded; sponsored products are marked and can be filtered.
Useful for Australian grocery price research, Coles specials tracking, supermarket basket comparison, retail price monitoring and AI shopping research. The Actor reads observations; it does not place orders or operate checkout.
Choose a Coles scraping workflow
| Your goal | Inputs to start with | Results to read |
|---|---|---|
| Find grocery products and prices | searchTerms or categoryUrls | Product dataset, SUMMARY |
| Collect ingredients, allergens and nutrition | includeDetails: true | Product dataset |
| Research Coles half-price specials | Specials URL, promotionFilter: "halfprice" | Discount and unit-price fields |
| Calculate a shopping basket | basket, optional applyMultibuy | BASKET |
| Monitor price changes across runs | incrementalMode, trackHistory, a stable stateKey | Changes, HISTORY, BASKET_HISTORY |
| Continue a bounded collection | resume: true, the same campaign | Dataset, PROGRESS, SUMMARY |
| Compare an identical Woolworths product | compareWoolworths: true | Verified identity and reference-price fields |
Start with a small product or basket input. Inspect the coverage and price scope before increasing limits or scheduling repeated runs. Search terms and URLs can be combined; the same product is returned once per collection cycle.
Full product details
{"searchTerms":["Devondale milk"],"includeDetails":true,"maxItems":5,"maxPages":1}
Product rows include ID, name, brand, pack size, AUD current/previous price, savings, reported availability, URL and observation time. includeDetails fetches product cards for listing results and adds checksum-valid GTIN, images, description, ingredients, allergens, dietary/storage information, nutrition, country of origin and size/variety variants where supplied. Explicit product URLs already return card data. Missing source fields stay null or empty; detailStatus distinguishes cards from listing-only records. Fetching each card increases time and resource usage.
pricePerKg and pricePerLitre normalize explicit source unit-price denominations. Unknown or ambiguous pack sizes are not guessed.
Specials, half-price and filters
{"categoryUrls":["https://www.coles.com.au/on-special"],"promotionFilter":"halfprice","minDiscountPercent":50,"excludeSponsored":true,"sortBy":"unitPriceAscending","maxItems":30,"maxPages":2}
specialsOnly keeps reported specials, including multibuy promotions. discountPercent uses a known higher previous price, or an explicitly reported percentage when the reference price is absent. discountPercentSource distinguishes the two; no previous price is invented. isHalfPrice means a computed or explicitly reported discount of at least 50%. Multibuy percentage can remain unknown.
Filter exact case-insensitive brands, minPrice, maxPrice, minDiscountPercent, inStockOnly, excludeSponsored and promotionFilter (all, halfprice, multibuy). Unknown values fail an explicitly requested numeric filter. Availability describes the observed online context, not guaranteed physical-store stock.
Sort the collected output batch by source, priceAscending, priceDescending, nameAscending or unitPriceAscending. Unit sorting separates mass ($/kg) from volume ($/L), then places unknown units last. It does not compare different physical dimensions or rank the entire catalogue.
Shopping-basket totals and multibuy
{"basket":[{"url":"https://www.coles.com.au/product/8150288","quantity":2}],"applyMultibuy":true,"maxItems":20,"maxPages":1}
BASKET reports quantities, subtotals, known total, missing-price coverage and comparison coverage. Unknown prices stay unknown and never become zero. complete describes priced basket lines; collectionComplete separately describes the scan.
With applyMultibuy, supported explicit “N for $X” and “Pick any N for $X” offers apply to integer quantities of the same product. A quantity of three under a verified “2 for $5” offer costs $5 plus one observed shelf price. multibuyApplied identifies adjusted lines. Other promotions remain visible without an invented checkout calculation.
Mixed-product groups, loyalty/member eligibility, variable-weight checkout adjustments, shipping and other fees are excluded. Actual customer checkout can differ.
Price changes and dated history
{"basket":[{"url":"https://www.coles.com.au/product/8150288","quantity":2}],"incrementalMode":true,"trackHistory":true,"historyDays":30,"historyRetentionDays":365,"maxHistoryEntries":100,"stateKey":"weekly-milk-basket","maxItems":20}
Repeat the same campaign name and scope. First observations are NEW; subsequent output defaults to changed products. emitUnchanged includes unchanged rows. Changes cover price, previous price, specials and availability, with previousPrice, priceChange, previousObservedAt and changedFields. Unknown-to-known prices do not invent a numeric delta. Missing products are not automatically discontinued.
HISTORY retains actual dated product observations and window minimum/maximum, first/latest prices and change. BASKET_HISTORY retains completed-cycle basket observations and min/max totals for fully priced baskets. History starts when you run the campaign: selecting 30 days does not create 30 days of historical data. No daily interpolation is performed. One observation has no historical price-change value.
Only a complete scan with fully delivered output advances the baseline and commits new history. Partial scans preserve the previous completed baseline. Concurrent runs of the same campaign are excluded. A different target, basket, regional context or filter requires a new stateKey.
Resume large scans
{"searchTerms":["milk"],"resume":true,"stateKey":"milk-scan","maxItems":50,"maxPages":2}
Run the same input again to continue a saved incomplete scan. PROGRESS reports completion and checkpoint status. Products delivered before a successful checkpoint are skipped on continuation. Once the cycle completes, the next run starts a new observation cycle.
Limits apply per run: maxItems counts collected observations before unchanged-row filtering; maxPages counts newly fetched listing pages per target. SUMMARY.status: PARTIAL is an intentional bounded result, not proof of complete catalogue coverage. Raise limits or continue the campaign.
An interrupted run can replay observations. Downstream consumers should deduplicate by product ID and observation time. Narrow very large targets or reduce history retention if a campaign reaches its storage limit; maxCampaignProducts bounds campaign size.
Live Woolworths comparison
{"productUrls":["https://www.coles.com.au/product/1329781"],"compareWoolworths":true,"maxComparisonProducts":1,"maxComparisonCandidates":3,"comparisonBudgetUsd":0.10,"collectionTimeoutSecs":240}
Automatic candidate discovery runs Woolworths Products Price Monitor. Its Actor fees and resource usage are additional to this run. comparisonBudgetUsd caps the child run; COMPARISON records its run/build and candidate count. Discovery is bounded and can return no exact match.
Alternatively supply public woolworthsProductUrls as live candidates. These pages are read directly without starting the comparison Actor. Similar names never establish identity: a valid normalized GTIN and equal explicit physical pack are both required. Ambiguous matches, invalid GTINs, unknown packs and missing prices stay explicitly unmatched/unknown. VERIFIED_GTIN_AND_PACK means verified product identity, not equivalent regional pricing. referenceIsLive, reference date/URL and scope identify freshness and source. comparisonRegionComparable remains false because the Woolworths default context is not a verified equivalent Coles region.
comparisonProducts still accepts user-provided dated AUD references with colesProductId, referenceUrl, observedAt, price and samePackConfirmed: true. These explicit mappings take precedence and are labelled USER_CONFIRMED_SAME_PACK, referenceIsLive: false. Check the referenced product and pack yourself. Full basket comparison requires known reference and Coles prices for every line.
Store context and postcode
Use storeId to select a Coles store's online prices and online availability. The source must confirm the selected store on every collected page and return valid product data. Valid observations carry storeContextStatus: VERIFIED_ONLINE_STORE, regionalPricesVerified: true and an explicit priceScope. A store mismatch or missing collection produces an error; a supplied ID alone is insufficient. This does not promise physical shelf stock, member offers or checkout prices.
For example, use storeId: "839" for Coles Broadway or storeId: "481" for Coles Central Raine Square, Perth. Source observations confirmed different prices and online availability for identical products between these stores. Prices are time-dependent; these examples do not promise a particular current price.
{"searchTerms": ["tomatoes"],"storeId": "839","maxItems": 5,"maxPages": 1}
Use postcode for automatic selection of a Coles supermarket located in that exact postcode. A public Data-M8 store catalogue supplies candidates; Coles must confirm the selected store ID, postcode, state and supermarket identity on a current store page before collection. Every product page must then confirm the selected store ID.
If several stores are listed in a postcode, the lowest numeric store ID is chosen consistently. This is not a distance or delivery-service calculation. The catalogue inspected at release contains857 stores across639 postcodes in all eight states and territories; its publisher labels the snapshot November2024. New stores may be missing and old records may fail live verification. There is no nearby-postcode or default-store fallback. An unlisted postcode, inconsistent store identity or denied source produces an explicit error without paid product rows. Use a known storeId when your postcode has no verified listed store.
{"postcode": "2000","productUrls": ["https://www.coles.com.au/product/9032651"],"maxItems": 1}
Postcode-selected rows include postcode, storeId, storeName, storeState, storePostcode, postcodeSelection: EXACT_POSTCODE_VERIFIED and postcodeCandidateCount. SUMMARY.storeContext records the selection. History retains the resolved store; if the chosen store changes, reuse requires a new stateKey so prices from different stores are not mixed. Choose either postcode or storeId, or omit both for default online observations.
Output fields and data quality
| Field group | Selected fields | Interpretation |
|---|---|---|
| Product identity | productId, name, brand, packageSize, gtinNormalized, url | GTIN is present only when valid; pack sizes are not guessed |
| Observed price | price, wasPrice, savings, currency, observedAt, priceScope | AUD observations in the stated online context |
| Unit price and promotions | pricePerKg, pricePerLitre, discountPercent, offerDescription, multibuyQuantity, multibuyPrice | Missing values remain unknown |
| Product details | imageUrls, ingredients, allergens, nutrition, countryOfOrigin, variants | Included where supplied by the product card |
| Monitoring | changeType, previousPrice, priceChange, previousObservedAt, priceHistory | Changes and statistics from your actual observations |
| Comparison | comparisonStatus, referencePrice, referenceObservedAt, referenceIsLive, priceDifference | Match status and freshness must accompany any price claim |
For example, a delivered product observation can contain the following subset. This is an illustrative snapshot, not a promise of today's price:
{"productId": "9032651","name": "Nutella Hazelnut Spread","packageSize": "400g","gtinNormalized": "09300698000216","price": 6.70,"currency": "AUD","observedAt": "2026-10-09T00:00:00Z","priceScope": "Default online price; store and member prices not verified"}
Use SUMMARY.coverageComplete to distinguish a complete requested collection from a limited batch. A successful limited run can return useful products while SUMMARY.status remains PARTIAL. Always inspect ERRORS before treating a zero-row dataset as an empty search.
MCP, AI agents and exports
Actor identifier: apivault_labs/coles-basket-price-monitor. This Coles grocery scraper supports product search, specials research, shopping basket price comparison, dated supermarket price history and Coles vs Woolworths GTIN matching. Private candidates require authorized access and are not publicly discoverable yet.
Use the input schema and the JSON examples with an Apify MCP client, agent, API integration or scheduled run:
- Read
SUMMARYandERRORSfor success, coverage and delivered count. - Read the dataset for product cards, observed prices, changes and comparisons.
- Read
BASKET,HISTORY,BASKET_HISTORY,PROGRESSand optionalCOMPARISONfor aggregates and state. - Preserve observed/reference timestamps, unknown fields, partial coverage and pricing scope in downstream answers.
For an Apify MCP client, select apivault_labs/coles-basket-price-monitor as the Actor tool. The hosted connection is https://mcp.apify.com/?tools=apivault_labs/coles-basket-price-monitor; authenticate with your own Apify token through the client's credential settings. Never put a token in shared prompts or URLs. Discover the current tool name and input schema with tools/list, then call the Actor tool with one of the input examples. Read the returned run ID and use the available run, dataset and key-value-store tools to inspect completion and outputs. The focused connection can expose these helper tools alongside the Actor tool. Authorized private discovery does not imply public Store visibility.
Apify supports JSON, CSV, Excel and other dataset exports. Zero rows after a source failure do not mean no matching products. Error-free complete zero-row searches represent empty results. Do not describe a partial scan as complete, a single snapshot as historical coverage or a user reference as live collection.
Pricing and limits
The Coles result fee is $0.001 per delivered product row ($1 per 1,000) on every subscription plan. There is no start fee or separate fee for details, history records, basket summaries or error records. With incremental monitoring, unchanged products omitted from the dataset do not incur a result fee; collecting them still uses platform resources. Empty results and input errors produce no paid result rows.
Apify platform usage is paid separately by the user. Optional automatic Woolworths discovery also incurs that Actor's fees and resource usage within comparisonBudgetUsd; explicit candidate URLs avoid the child Actor. The result rate does not guarantee an all-inclusive run cost.
Access or rate limits can interrupt collection and are reported explicitly. This independent product is not endorsed by Coles or Woolworths. There is no guarantee of member pricing, physical stock, equivalent retailer regions or full catalogue coverage. Exact build/run verification and outstanding release gates are recorded privately.
Frequently asked questions
Do I need a Coles account?
No Coles login is required. An Apify account is required to run the Actor. Member-only offers and checkout prices are outside its verified coverage.
Can I download Coles prices to Excel or CSV?
Yes. Export the product dataset using Apify's dataset export options. Basket and history summaries are separate JSON records listed in the run outputs.
Does a 30-day window include past prices automatically?
No. History begins with your first completed observation. Repeat the same campaign over time to build a real series. A 30-day statistics window summarizes observations you actually collected.
Can an AI agent find the cheapest supermarket basket?
It can use known basket subtotals and verified identical-product comparisons. It must retain unmatched lines, unknown prices, observation dates and the unverified regional context. This Actor does not claim the cheapest possible Australian basket.
What is the difference between product results and a full catalogue?
Searches and categories cover the requested targets within your limits. A partial scan does not represent the complete Coles catalogue. Continue a saved campaign or adjust its collection limits.
Release notes — 9 October 2026
Verified selected-store online prices and availability, with explicit regional output fields and store mismatch checks. Automatic exact-postcode selection includes current Coles identity confirmation and explicit errors for unlisted or mismatched regions. Earlier improvements include grocery research and MCP guidance, pricing explanations and input validation.