Australian supermarket prices as JSON, with every kind of special kept separate
The Coles API turns coles.com.au, the online store of one of Australia's two largest supermarket chains, into clean JSON in five actions: search, product/detail, deals, category and categories.
5 active endpoints. Every call is 2 credits.
- POST/coles/v1/search
- POST/coles/v1/product/detail
- POST/coles/v1/deals
- POST/coles/v1/category
- POST/coles/v1/categories
What Coles endpoints does ReefAPI ship?
5 live read endpoints. Read-only data API: no writes, no account actions, no dashboard access on the target site.
Coles API
3 of 5 endpoints, ready to run
Coles products for a keyword: shelf price, was-price and saving, half-price and multi-buy specials, unit price per kg, litre or 100 g, availability, brand, size and category path.
{ "ok": true, "meta": { "api": "coles", "endpoint": "search", "mode": "live", "latency_ms": 1656.3, "record_count": 48, "cache_hit": false }, "data": { "results": [ { "product_id": "8150288", "title": "Coles Full Cream Milk", "name": "Full Cream Milk", "brand": { "id": "3955134709", "name": "Coles" }, "size": "3L", "category": { "id": "8881801", "name": "Full Cream Milk", "level": 3 }, "breadcrumb": [ { "id": "1300", "name": "Dairy, Eggs & Fridge", "level": 1 }, { "id": "8881800", "name": "Milk", "level": 2 }, { "id": "8881801", "name": "Full Cream Milk", "level": 3 } ], "category_paths": [ [ { "id": "1300", "name": "Dairy, Eggs & Fridge", "level": 1 }, { "id": "8881800", "name": "Milk", "level": 2 }, { "id": "8881801", "name": "Full Cream Milk", "level": 3 } ] ], "url": "https://www.coles.com.au/product/coles-full-cream-milk-3l-8150288", "image": "https://cdn.productimages.coles.com.au/productimages/8/8150288.jpg", "price": 4.95, "price_display": "$4.95", "currency": "AUD", "original_price": null, "original_price_display": null, "discount_percent": null, "save_amount": null, "member_price": null, "member_price_display": null, "member_discount_percent": null, "member_program": null, "unit_price": 1.65, "unit_price_unit": "1L", "unit_price_display": "$1.65/ 1L", "member_unit_price": null, "sold_by": "piece", "price_per": "piece", "price_is_estimate": false, "promotion_type": null, "special_type": null, "price_description": null, "half_price": false, "online_only_special": false, "multi_buy_offer": null, "multi_buy": null, "badges": [], "availability": "in_stock", "in_stock": true, "available_quantity": 1504, "max_order_quantity": 20, "max_promotional_quantity": 12, "age_restricted": false, "rating": null, "review_count": null, "rating_scale": null, "sponsored": false }, { "product_id": "439693", "title": "Coles Full Cream Milk", "name": "Full Cream Milk", "brand": { "id": "3955134709", "name": "Coles" }, "size": "2L", "category": { "id": "8881801", "name": "Full Cream Milk", "level": 3 }, "breadcrumb": [ { "id": "1300", "name": "Dairy, Eggs & Fridge", "level": 1 }, { "id": "8881800", "name": "Milk", "level": 2 }, { "id": "8881801", "name": "Full Cream Milk", "level": 3 } ], "category_paths": [ [ { "id": "1300", "name": "Dairy, Eggs & Fridge", "level": 1 }, { "id": "8881800", "name": "Milk", "level": 2 }, { "id": "8881801", "name": "Full Cream Milk", "level": 3 } ] ], "url": "https://www.coles.com.au/product/coles-full-cream-milk-2l-439693", "image": "https://cdn.productimages.coles.com.au/productimages/4/439693.jpg", "price": 3.4, "price_display": "$3.40", "currency": "AUD", "original_price": null, "original_price_display": null, "discount_percent": null, "save_amount": null, "member_price": null, "member_price_display": null, "member_discount_percent": null, "member_program": null, "unit_price": 1.7, "unit_price_unit": "1L", "unit_price_display": "$1.70/ 1L", "member_unit_price": null, "sold_by": "piece", "price_per": "piece", "price_is_estimate": false, "promotion_type": null, "special_type": null, "price_description": null, "half_price": false, "online_only_special": false, "multi_buy_offer": null, "multi_buy": null, "badges": [], "availability": "in_stock", "in_stock": true, "available_quantity": 1520, "max_order_quantity": 20, "max_promotional_quantity": 12, "age_restricted": false, "rating": null, "review_count": null, "rating_scale": null, "sponsored": false }, { "product_id": "7667368", "title": "Coles Australian Full Cream Long Life Milk", "name": "Australian Full Cream Long Life Milk", "brand": { "id": "3955134709", "name": "Coles" }, "size": "1L", "category": { "id": "98660", "name": "Long Life Milk", "level": 3 }, "breadcrumb": [ { "id": "11456", "name": "Drinks", "level": 1 }, { "id": "98629", "name": "Long-Life Milk", "level": 2 }, { "id": "98660", "name": "Long Life Milk", "level": 3 } ], "category_paths": [ [ { "id": "11456", "name": "Drinks", "level": 1 }, { "id": "98629", "name": "Long-Life Milk", "level": 2 }, { "id": "98660", "name": "Long Life Milk", "level": 3 } ], [ { "id": "1300", "name": "Dairy, Eggs & Fridge", "level": 1 }, { "id": "8895200", "name": "Long Life-Milk", "level": 2 }, { "id": "8895201", "name": "Long-Life-Milk", "level": 3 } ] ], "url": "https://www.coles.com.au/product/coles-australian-full-cream-long-life-milk-1l-7667368", "image": "https://cdn.productimages.coles.com.au/productimages/7/7667368.jpg", "price": 1.75, "price_display": "$1.75", "currency": "AUD", "original_price": null, "original_price_display": null, "discount_percent": null, "save_amount": null, "member_price": null, "member_price_display": null, "member_discount_percent": null, "member_program": null, "unit_price": 1.75, "unit_price_unit": "1L", "unit_price_display": "$1.75/ 1L", "member_unit_price": null, "sold_by": "piece", "price_per": "piece", "price_is_estimate": false, "promotion_type": "everyday", "special_type": null, "price_description": null, "half_price": false, "online_only_special": false, "multi_buy_offer": null, "multi_buy": null, "badges": [ { "type": "everyday", "text": null } ], "availability": "in_stock", "in_stock": true, "available_quantity": 3567, "max_order_quantity": 20, "max_promotional_quantity": 12, "age_restricted": false, "rating": null, "review_count": null, "rating_scale": null, "sponsored": false } ], "count": 48, "total_results": 146, "page": 1, "page_size": 48, "page_count": 4, "sponsored_dropped": 4, "sort_applied": "relevance", "alternate_result": false, "alternate_results_dropped": 0, "alternate_results": [], "did_you_mean": [], "filters_available": { "brands": [ { "id": "2780582535", "name": "a2 Milk", "count": 12 }, { "id": "239341655", "name": "Australias Own", "count": 7 }, { "id": "2842560423", "name": "Bonsoy", "count": 1 } ], "allergens": [ { "id": "10", "name": "Lactose Free", "count": 37 }, { "id": "9", "name": "Gluten Free", "count": 29 }, { "id": "1003", "name": "Dairy Free", "count": 21 } ], "dietary": [ { "id": "1030", "name": "GMO Free", "count": 35 }, { "id": "1024", "name": "Source of Calcium", "count": 31 }, { "id": "1019", "name": "Cholesterol free", "count": 20 } ], "specials": [ { "id": "allspecials", "name": "All specials", "count": 22 }, { "id": "multi_buy", "name": "Multi buy", "count": 4 }, { "id": "online_only", "name": "Online only", "count": 1 } ] }, "categories": [ { "id": "1300", "name": "Dairy, Eggs & Fridge", "level": 1, "slug": "dairy-eggs-fridge", "count": 142 }, { "id": "674112512", "name": "Health & Dietary", "level": 1, "slug": "health-dietary", "count": 48 }, { "id": "11456", "name": "Drinks", "level": 1, "slug": "drinks", "count": 72 } ], "query": "milk" } }
How the Coles API works
Coles is a normal ReefAPI surface — the same four rules that hold for every other engine on the key.
No OAuth app, no request signing, no per-site account. One key covers all 252 engines.
Every route is a POST with a JSON body. Parameters are validated against the published schema before anything is charged.
Credits, not seats. Failed and blocked calls are never charged, and cache hits cost nothing.
One envelope everywhere. meta carries latency_ms, record_count and the endpoint that answered.
Track an Australian grocery basket without mixing specials into the shelf price
A Coles special can be a lower price, a was-price, or a multi-buy that leaves the single price unchanged. A tracker that stores one number gets two of those three wrong. Three calls keep them apart.
{"query": "milk", "sort": "unit_price_asc"}48 products per page with product_id, price, original_price, multi_buy_offer, unit_price and sold_by. Sponsored placements are removed unless you ask for them.
{"product_id": "210590"}Western Star Dairy Butter Pat: 4.70 AUD, was 5.90, save 1.20, 1.88 AUD per 100 g, with barcode, ingredients and nutrition panel.
{"type": "half_price", "category": "dairy-eggs-fridge"}Every half-price special in one department. category_paths shows every aisle a product sits in, so rows filed under two departments still make sense.
A basket where each product carries its shelf price, its was-price and its multi-buy deal in separate fields, with unit prices on the same basis and fresh produce marked as estimated.
curl -X POST https://api.reefapi.com/coles/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"milk"}'{
"ok": true,
"data": { … },
"meta": {
"api": "coles",
"endpoint": "search",
"mode": "live",
"latency_ms": …,
"record_count": …
},
"error": null
}A Coles special is not always a lower shelf price
Coles marks many products as on special, but the special takes three different shapes, and only one of them changes the shelf price. The API keeps each one in its own field. Measured on 2026-09-15.
| Coles product | price | Special fields | Unit price |
|---|---|---|---|
| Western Star Dairy Butter Pat 250g | 4.70 AUD | original_price 5.90, save_amount 1.20, discount_percent 20 | 1.88 AUD per 100g |
| Coles Water 12x600ml | 5.35 AUD | multi_buy_offer 2 for $9.40 (4.70 each), price unchanged | 0.74 AUD per L (0.65 on the deal) |
| Arnott's Tim Tam Chocolate Biscuits Original 200g | 6.00 AUD | multi_buy_offer Pick any 2 for $8 | 3.00 AUD per 100g |
| Coles Broccoli Medium approx. 340g | 1.67 AUD (estimate, sold_by weight) | promotion_type special, no was-price | 4.90 AUD per kg |
| a2 Milk Full Cream Milk 1L | 4.10 AUD | none | 4.10 AUD per L |
original_price is set only when Coles shows a was-price above the current price. A multi-buy deal leaves price as the single-item price and returns the deal in multi_buy_offer and multi_buy.unit_price. For fresh produce sold by weight, price is Coles's estimate for one item of the stated approximate weight; the unit price per kg is the real shelf price and price_is_estimate is true.
Which store, which price, which special, and what Coles does not publish
coles.com.au only - one country, one currency. Measured on 2026-09-15 across 44 products in 13 Coles departments, 20 searches, 42/42 controlled cases and an independent source comparison. Four of these lines go against us.
This engine reads Coles Supermarkets at coles.com.au. Every price is AUD with a display string next to the number ("$4.95"). There is no country parameter because there is no other storefront behind it.
original_price is the was-price, set only when Coles shows one above the current price. half_price, multi_buy_offer, multi_buy.unit_price and online_only_special describe the special; price is always the single-item shelf price. On 7/7 products compared against an independent read of the source, title, price, was-price, availability and barcode all matched.
unit_price comes with its unit (1L, 100g, 1kg) and Coles's own display string. Fresh produce sold by weight returns sold_by weight and price_is_estimate true: the price is for one item of approximate weight, the per-kg unit price is the real shelf price.
milk: 146 results unfiltered, 21 with two brand ids, 18 with the vegan facet, 29 gluten free. Coles ignores sort orders it does not know, so only the three it applies are offered, and sort_applied is its confirmation. Sponsored products on the first page are removed by default and counted.
The prices on a search row were checked against the full product record for 44 products, 11 of them on special: price, was-price and unit price agreed on every one.
Coles shelves some products in more than one department. breadcrumb is the first listing and category_paths lists all of them - on the dairy half-price page, 3 of 22 products were first listed under Drinks.
Flybuys offers are personalised to a signed-in account and are not published to visitors, so member_price is always null. If you need loyalty pricing, this API does not provide it.
Coles's own product data carries no rating or review count, so rating, review_count and rating_scale are null rather than invented.
Coles prices online orders by store. The API returns the prices a visitor with no delivery suburb sees and names that store in store.store_id. Prices for a chosen store or suburb are not offered.
Barcodes are missing on fresh produce sold by weight and nutrition panels on non-food products. On 44 sampled products barcode was filled on 40 of 44, ingredients on 33 of 44 and nutrition on 25 of 44.
What people build with Coles
The jobs this data is most often used for.
endpoints
credits per call
Australian grocery price trackers record shelf price, was-price and multi-buy deals separately, so a 2 for $9.40 special never overwrites the single-item price.
FMCG brands monitor half-price and multi-buy specials across Coles categories with deals and category.
Retail analysts compare unit prices per kg, litre and 100 g on a like-for-like basis, with weighed produce clearly marked as estimated.
Nutrition and allergen apps pull barcodes, ingredients, allergen statements and per-100 g nutrition panels with product/detail.
What Coles data costs
The cheapest call here is 2 credits, so $15/mo (Pro) buys 5,000 of them — $1.50 per 1,000 credits. Credits roll over and never expire, and failed or blocked calls are not charged.
Full pricing →- 1,000 free credits on signup, no card
- One key, all 252 APIs, one credit pool
- Failed and blocked calls are never charged
- Credits roll over and never expire
Call it in two lines
Sign up, get 1,000 credits and one key that works on every engine. Then this is the whole protocol.
curl -X POST https://api.reefapi.com/coles/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"milk"}'import requests
r = requests.post(
"https://api.reefapi.com/coles/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "milk"
},
)
print(r.json()["data"])Have a question? We got answers.
The questions people actually ask before wiring up Coles.
Get a free key →Does Coles have a member or Flybuys price like other supermarkets' loyalty prices?▾
Not in anything Coles publishes to a visitor. Flybuys offers are personalised to a signed-in account, so member_price, member_program and member_unit_price are always null in this API. They are kept in the response so the fields line up with other grocery APIs, such as Migros, where a loyalty price does exist.
How do I tell half-price, multi-buy and was-price specials apart?▾
Each has its own field. half_price is true for Coles's 1/2 Price specials; multi_buy_offer holds text such as 2 for $9.40 and multi_buy.unit_price the per-item deal price, while price stays the single price; original_price holds the was-price when Coles shows one. On 2026-09-15 the half-price filter on chocolate returned 68 products, every row on the page half price, and the multi-buy filter 123, every row carrying an offer.
Why is the price of fresh produce an estimate?▾
Because Coles sells it by weight. Coles Broccoli Medium is listed at 1.67 AUD for one head of about 340 g, charged at 4.90 AUD per kg. sold_by reads weight and price_is_estimate is true; the unit price per kg is the price you can compare.
Do sorting and filters really apply?▾
Yes, and the API only offers the ones Coles applies. Measured for milk on 2026-09-15: 146 results unfiltered, 21 with two brand ids, 18 with the vegan facet, 29 with the gluten-free facet. Price and unit-price sorts came back in order, and sort_applied is Coles's own confirmation. Coles silently ignores sort orders it does not know, which is why only price_asc, price_desc and unit_price_asc are offered.
What are sponsored products and why are they removed?▾
Coles places paid products near the top of the first page - 4 on a milk search - and they repeat products that also appear further down the list. They are removed by default and counted in sponsored_dropped; include_sponsored=true keeps them, flagged sponsored: true.
What happens when a search matches nothing?▾
You get an empty result: results is empty, total_results is 0 and alternate_result is true. Coles itself fills that page with unrelated products - 11 vitamin products for zzqqxxnonexist and 15 glue sticks for blorptangzik on 2026-09-15 - so the API drops them and only counts them in alternate_results_dropped. Set include_alternate_results=true if you want to see them; they still never appear in results. Genuine queries such as milk, chocolat and tim tam were not affected.
Why does a product in a Dairy category show a Drinks breadcrumb?▾
Because Coles shelves some products in several categories. Lo Bros Kombucha is listed under Drinks and under three Dairy, Eggs & Fridge aisles. breadcrumb is Coles's first listing; category_paths lists every category the product is in, so filtering a category page by category_paths always agrees with the page.
What does Coles NOT publish?▾
No member or Flybuys price, and no ratings or reviews in its own product data, so rating, review_count and rating_scale are null. Barcodes are missing on fresh produce sold by weight, and nutrition panels on non-food products: on 44 sampled products, barcode was filled on 40 of 44 and nutrition on 25 of 44. Prices are those of Coles's default online store for a visitor with no delivery suburb, named in store.store_id; prices for a chosen store are not offered.
What is the Coles API?▾
Coles API is a ReefAPI endpoint group for australian supermarket prices: specials, was-prices, unit prices and full nutrition labels. It returns live JSON through POST requests under /coles/v1.
Is the Coles API free to try?▾
Yes. ReefAPI starts with 1,000 free credits, no card required. Coles calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Coles login or account?▾
No login to Coles is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the Coles data?▾
The page example is captured from a live search call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the Coles API use?▾
Coles actions currently cost 2 credits per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.
Can I call Coles from an AI assistant or MCP client?▾
Yes. Connect ReefAPI once through MCP and your assistant can call coles actions with the same key, credit pool and JSON envelope used by normal REST requests.
91 E-commerce & Marketplaces APIs on the same key
One key, one credit pool, one response envelope. If you are pulling Coles, you are one call away from the rest of the category — no second contract, no second integration.
Need something this API does not do?
Name the endpoint, the field, or a source we do not carry yet. We ship new APIs every week and you would be first to get the key. Real people read every message and reply the same day.
Try it on your own data before you pay anything
The call above is the real endpoint, not a recording. A free key gives you 1,000 credits, the other 251 APIs, and the same envelope everywhere.
Endpoints, parameters and credit costs on this page are read from the live catalog and cannot drift from what the API accepts. Field notes were captured on 2026-09-15.