Coles AU Product Search Scraper avatar

Coles AU Product Search Scraper

Pricing

from $0.70 / 1,000 results

Go to Apify Store
Coles AU Product Search Scraper

Coles AU Product Search Scraper

Scrape Coles Australia product search results, prices, specials, categories, store context, barcode lookups, and normalized item data for grocery monitoring workflows.

Pricing

from $0.70 / 1,000 results

Rating

0.0

(0)

Developer

Dmitriy Gyrbu

Dmitriy Gyrbu

Maintained by Community

Actor stats

3

Bookmarked

345

Total users

222

Monthly active users

8 hours ago

Last modified

Features

Limited permissions

Share

Coles AU Product, Specials & Price Scraper

Extract Coles Australia products, weekly and half-price specials, regular and discounted prices, unit pricing, nutrition, ingredients, category shelves, and postcode-aware availability context. Use the structured data for grocery price intelligence, specials tracking, assortment monitoring, product enrichment, and ecommerce research.

This is an unofficial actor and is not affiliated with Coles.

Product lookup accepts a numeric ID, slug, or product URL. Search and category results help subsequent runs resolve an ID through its previously discovered slug when the direct ID lookup finds no product. Prices and availability are fetched again for the requested location. An ID that has never been discovered may still require the product slug or URL; unavailable mapping storage does not prevent direct product lookup.

Supported operations

Stable product and offers workflows

  • categories
  • search
  • search_filters
  • item
  • category
  • specials
  • specials_filters
  • specials_catalogue
  • item_store_context
  • availability_by_store

Experimental / best-effort workflows

These remain in the input schema for backward compatibility, but should not be the first workflow used by a new buyer:

  • item_by_barcode
  • item_by_gtin
  • store
  • stores_by_postcode
  • nearby_stores
  • stores_search

Reverse barcode/GTIN lookup is currently unreliable even when the same barcode is present in product output. Standalone store discovery can return zero rows or an upstream locator error. For location-aware workflows, use product search/item context with postcode, state, and contextMode.

Operation guide

The Apify Console form shows the union of all supported fields, so the visible inputs do not change when you switch operation. Use the guide below to know which fields are required.

  • categories Required: none Optional: refresh, includeRaw
  • search Required: query Optional: page, limit, details, storeId, postcode, state, contextMode, includeRaw
  • search_filters Required: none Optional: query, storeId, postcode, state, contextMode, includeRaw
  • category Required: categorySlug, categoryId, or categoryUrl Optional: page, limit, details, storeId, postcode, state, contextMode, includeRaw
  • item Required: itemId, productId, itemSlug, slug, or url Optional: storeId, postcode, state, contextMode, includeRaw
  • specials Required: none Optional: special, page, limit, details, storeId, postcode, state, contextMode, includeRaw
  • specials_filters Required: none Optional: storeId, postcode, state, contextMode, includeRaw
  • specials_catalogue Required: slug, categorySlug, or url Optional: page, limit, details, storeId, postcode, state, contextMode, includeRaw
  • item_by_barcode Required: barcode Optional: storeId, postcode, state, contextMode, includeRaw Status: experimental; prefer item with a full product URL.
  • item_by_gtin Required: gtin Optional: storeId, postcode, state, contextMode, includeRaw Status: experimental; prefer item with a full product URL.
  • store Required: storeId Optional: includeRaw
  • stores_by_postcode Required: postcode Optional: state, radius, limit, includeRaw
  • nearby_stores Required: lat, lon Optional: radius, limit, includeRaw Status: best-effort standalone store locator.
  • stores_search Required: query Optional: state, radius, limit, includeRaw
  • item_store_context Required: itemId, productId, itemSlug, slug, or url Optional: storeId, postcode, state, contextMode, includeRaw
  • availability_by_store Required: itemId, productId, itemSlug, slug, or url Optional: storeId, postcode, state, contextMode, includeRaw

Pagination and limit semantics

For search, category, and specials, page is the native Coles page number. The optional limit field is not a page-size control and is not sent to Coles. It is only a local maximum applied after the selected native Coles page has been fetched.

  • Omit limit to return every product exposed on that native Coles page.
  • Provide limit only when you intentionally want to cap the returned rows from that page.
  • Coles can return a different number of products on each native page and can repeat product ids between adjacent pages.
  • To collect a complete category, omit limit, request consecutive page values until an empty page is returned, and deduplicate by product id.
  • total is the count reported by Coles; upstream_page_count, returned_count, and limit_applied explain what the actor actually returned for the requested page.

For store-list operations, limit continues to mean the maximum number of stores returned.

If you are validating the actor from scratch, use these in order:

  1. search
  2. specials
  3. item using a full product URL
  4. category

Then use ids/slugs from those results in the more targeted operations.

Example inputs

{
"operation": "categories",
"includeRaw": false
}
{
"operation": "search",
"query": "milk",
"page": 1,
"includeRaw": false
}
{
"operation": "item",
"url": "https://www.coles.com.au/product/coles-full-cream-milk-3l-8150288",
"includeRaw": false
}
{
"operation": "category",
"categoryId": "1300",
"page": 1,
"includeRaw": false
}
{
"operation": "specials",
"special": "halfprice",
"page": 1,
"includeRaw": false
}

Output

  • Dataset: normalized products, category rows, filters, or item records
  • Key-value store OUTPUT: run summary with source, operation, success, total, errors, proxy, and monetization

Product output can include regular/base price, lower promotional price, comparable unit pricing, stock signals, barcode, images, nutrition, ingredients, allergens, variants, category breadcrumbs, and canonical product URL. For specials, price is the regular/base price and discount_price is the lower current promotional price when available.

Buyer-ready Saved Tasks

  • Coles Grocery Search & Unit Price Monitor — compact keyword price and assortment tracking.
  • Coles Half-Price Deals & Product Enrichment — half-price products with detail enrichment.
  • Coles Weekly Specials & Offers Feed — bounded all-specials feed.
  • Coles Nutrition, Barcode & Ingredient Enrichment — one rich item via a reliable full URL.
  • Coles Category Shelf & Assortment Monitor — category-level product and price snapshots.
  • Coles Sydney Delivery Price Context Monitor — postcode-aware delivery context for product search.

Saved Tasks use bounded inputs and have been cloud-tested. Clone a task and change only the keyword, category, postcode, or product URL relevant to your workflow.

Choose your proxy provider and connection policy (new NONLATEST candidate)

For existing clients the defaults remain proxySource=owner and proxyMode=auto, retaining the owner-secret rotating Coles pool and the previous direct-first fallback behavior. All settings are per run and do not mutate the Actor's global environment.

InputValuesMeaning
proxySourceowner, apify_residential, custom_poolChoose one source per run; customer providers never silently use the owner's secret feed.
proxyModeauto, proxy_first, proxy_only, directauto keeps owner direct-first but prefers a customer-selected proxy first. proxy_only never tries a direct Coles request, and fails closed if the pool is unavailable. direct never loads any proxy.
apifyProxyCountryAU by defaultTwo-letter country for Apify Residential, when your account has access.
apifyProxySessions1–24, default 6SDK session-specific proxy URLs; session count does not prove distinct IP count.
customProxyUrlsSecret multiline textOne http(s)://user:password@host:port or http(s)://host:port per line; semicolons / JSON string arrays are accepted; 150 maximum. Do not put credentials into nonsensitive fields.

Example for your own Apify Residential capacity: {"operation":"search","query":"milk","proxySource":"apify_residential","proxyMode":"proxy_only","apifyProxyCountry":"AU"}. Apify validates residential access for the account executing the run; residential usage may incur separate proxy charges.

Example for your discrete proxies: select proxySource=custom_pool, set proxyMode=proxy_only or proxy_first, and paste individual proxy URLs into the encrypted My discrete proxy pool (secret) field in the Apify Console. If a proxy fails it can be temporarily quarantined and another discrete entry tried. In proxy_only, no direct fallback is allowed. No proxy URLs, authentication data or full proxy exceptions are added to OUTPUT. Diagnostic proxy fields include the chosen provider, the policy, number of configured URLs, owner-feed state, and observed connection category (direct, proxy, mixed, or not_observed). The observed category only reflects instrumented successful paths; not_observed must not be interpreted as direct.

Rollout

This change is a NONLATEST candidate (sf-coles-proxy-options-r1) based on the published 0.0.43 source. It must be built and checked with real cloud runs using owner auto, customer Apify Residential, customer custom proxies, proxy-only block/fail-closed, direct-only, and store/lookup operations before latest can be switched. No publication is implied by the presence of this source archive.

Notes

  • Coles is the richest actor in this bundle, so the Apify Console will show a large union of optional fields.
  • search, categories, and item are the best smoke tests.
  • item and category have validated starter examples: the full milk product URL above and category 1300.
  • If Coles cannot resolve the current site build id, the actor now returns a structured blocked error instead of the raw build_id_unavailable note.
  • Store discovery supports postcode, coordinates, name and store ID. item_store_context and availability_by_store query the product with an explicit verified Coles store ID. Both default to contextMode: inStore; delivery and clickAndCollect are separate shopping methods and can have different availability and prices.
  • Store-specific dataset rows include attributes.store_id, attributes.store_context, the source availability flag, and price when supplied. Availability is not a counted stock quantity. With postcode only, the first matching store is selected and identified explicitly. A failed store lookup is not replaced with generic product data.
  • By default, the actor uses its owner-managed private proxy feed (preserving existing runs). Users can choose their Apify Residential proxies or their own discrete proxy list via Proxy provider and control direct vs proxy routing via Connection policy. Custom proxy URLs are a secret field and never appear in OUTPUT. proxy_only rejects an unavailable pool and never silently falls back to a direct Coles connection. Apify Residential is billed/limited according to the account running the Actor; selecting it does not grant proxy entitlements.

Apify Store automatic default-input health check (R3)

The Apify Store daily test constructs the Actor input from prefill, not merely default. R3's Store example intentionally selects operation=search, query=milk, page=1, limit=5, details=false, proxySource=owner, proxyMode=auto. This exercises the pre-existing owner proxy feed behavior without requiring customers to buy Apify Residential or provide secrets. The local limit caps published dataset items, not the Coles upstream page size.

Release gate: after building the exact R3 candidate with a NONLATEST tag, invoke that immutable build once with the exact derived prefill input, using the same memory and default 300-second timeout as Apify Store. Verify real SUCCEEDED, elapsed under 300 seconds, Dataset contains 1–5 non-empty product rows, OUTPUT.success==true, and no missing proxy secrets; compare the run's stored INPUT against the derived prefill. A mocked/local test is not cloud acceptance. Do NOT move latest until this exact-build gate and the other proxy regression cases pass. Both empty-input/API-default and Store-prefill inputs are separate cases.