IGA Québec API & Scraper
The IGA Québec API returns grocery prices for IGA and IGA extra stores in Québec as clean JSON, one store at a time.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
search finds products by words or a UPC at the store you pick, in English or French. product resolves one item by article number, UPC or produce PLU, with its description and origin. deals lists what is on promotion at that store now, stores finds stores by name, city or coordinates, and categories lists departments and aisles with counts. Every record carries price (what you pay now), regular_price and sale_price, on_sale with sale_valid_from and sale_valid_to, a Scene+ member_price or points where the store publishes them, per-kg pricing on weighed items and in_stock as a flag.
One box of tissues at two Lévis stores, the same week
Scotties facial tissue, UPC 061328801366, read through product on 2026-11-08 at IGA extra stores 0444 and 0168 in Lévis. Each row is that store's own record.
| Field | Store 0444 | Store 0168 |
|---|---|---|
| price (CAD) | 7.77 | 7.77 |
| regular_price | 10.99 | 10.99 |
| member_price (Scene+) | 5.77 | 5.77 |
| on_sale, sale_valid_from to sale_valid_to | true, 2026-11-05 to 2026-11-11 | true, 2026-11-05 to 2026-11-11 |
| in_stock | true | true |
These two stores carried the same flyer price that week, which is common inside one flyer. The value of a store-level record is on the days and items where stores differ, so always read the store you care about. Scene+ points appear in scene_plus_points where offered: a Compliments shrimp ring carried 200 points at store 0444.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/iga-qc/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "milk",
"store_id": "0444"
}
}{
"ok": true,
"meta": {
"api": "iga-qc",
"endpoint": "search",
"mode": "live",
"latency_ms": 1412,
"record_count": 24,
"bytes": 182756,
"cache_hit": false,
"total": 4145,
"store_id": "0444",
"upstream_requests": 2,
"charged_credits": 2,
"version": "0.1.0",
"request_id": "c5b27d799c004d9e",
"fetched_at": "2026-11-06T16:39:39.065Z"
},
"data": {
"query": "milk",
"store_id": "0444",
"store_name": "Sobeys Capital inc. (ST-ROMUALD)",
"store_address": "1060, boulevard Guillaume-Couture, Levis, QC, G6W0R8",
"language": "en",
"sort": "relevance",
"page": 1,
"page_size": 24,
"total": 4145,
"returned": 24,
"has_next": true,
"results": [
{
"product_id": "1449028_EA_0444",
"article_number": "1449028",
"store_id": "0444",
"title": "Grand Pré Chokéo Partly Skymmed Milk Chocolate 2% 1 L",
"brand": "Grand Pré",
"upcs": [
"062884540010"
],
"gtin": null,
"uom": "EA",
"package_size": "1 L",
"package_count": 1,
"shipping_weight": "1.03 KG",
"max_weight_kg": null,
"price": 4.29,
"currency": "CAD",
"regular_price": 4.29,
"sale_price": null,
"on_sale": false,
"sale_valid_from": null,
"sale_valid_to": null,
"sale_promotion_number": null,
"sale_requires_loyalty_card": null,
"price_basis": "per_item",
"price_unit": "each",
"price_per_kg": null,
"regular_price_per_kg": null,
"estimated_item_price": null,
"member_price": null,
"multi_buy": null,
"scene_plus_points": null,
"percent_off": null,
"active_promotions": [],
"upcoming_promotions": [],
"in_stock": true,
"stock_status": "in_stock",
"category": "Plant Based",
"subcategory": "Plant Based > Non-Dairy Milk & Cream",
"category_path": "Dairy & Eggs > Milk > Dairy Milk",
"description": null,
"country_of_origin": null,
"product_of_canada": false,
"image": "https://media.sobeys.com/original/1449028_EA_en_na_na_alt_062226_VOILA_0ebac545ee3c7e45af01c61b5a6cf13700f6ec73.JPG",
"source_updated_at": "2026-11-05T22:50:25Z",
"url": "https://www.iga.ca/products/grand-pr%C3%A9-chok%C3%A9o-partly-skymmed-milk-chocolate-2--1-l",
"rank": 1
},
{
"product_id": "473681_EA_0444",
"article_number": "473681",
"store_id": "0444",
"title": "Nutrinor Organic 2% Nordic Milk 2 L",
"brand": "Nutrinor",
"upcs": [
"065244133228"
],
"gtin": null,
"uom": "EA",
"package_size": "2000 ML",
"package_count": 1,
"shipping_weight": "2.418 KG",
"max_weight_kg": null,
"price": 8.99,
"currency": "CAD",
"regular_price": 8.99,
"sale_price": null,
"on_sale": false,
"sale_valid_from": null,
"sale_valid_to": null,
"sale_promotion_number": null,
"sale_requires_loyalty_card": null,
"price_basis": "per_item",
"price_unit": "each",
"price_per_kg": null,
"regular_price_per_kg": null,
"estimated_item_price": null,
"member_price": null,
"multi_buy": null,
"scene_plus_points": null,
"percent_off": null,
"active_promotions": [],
"upcoming_promotions": [],
"in_stock": true,
"stock_status": "in_stock",
"category": "Dairy & Eggs",
"subcategory": "Dairy & Eggs > Milk",
"category_path": "Dairy & Eggs > Milk > Dairy Milk",
"description": "Nutrinor reduces its carbon footprint With the first carbon-neutral milk packaging in Quebec. As the first carbon-offset transportation brand milk in Canada. The same great taste of milk in a package that generates less greenhouse gas emissions (GES). Milk from sustainable agriculture. Milk produced by farmer-owners committed to our Nutrinor Sustainable Agricultural Pact. 100% traceable milk in Quebec, through Nutrinor traceability (Organic, Lactose Free, Nutripur and Barista). Milk from free-range cows (Lactose-Free, Nutripur and Barista)",
"country_of_origin": null,
"product_of_canada": false,
"image": "https://media.sobeys.com/original/473681_EA_en_primary_front_na_012423_VOILA_bc6f02ff1af403840c5ad188427cd33c70f5e323.JPG",
"source_updated_at": "2026-11-05T06:07:31Z",
"url": "https://www.iga.ca/products/nutrinor-organic-2--nordic-milk-2-l",
"rank": 2
},
{
"product_id": "356938_EA_0444",
"article_number": "356938",
"store_id": "0444",
"title": "Milk 2 Go Sport Milk Vanilla 325 ml",
"brand": "Milk 2 Go",
"upcs": [
"068700303395"
],
"gtin": null,
"uom": "EA",
"package_size": "325 ML",
"package_count": 1,
"shipping_weight": "0.4 KG",
"max_weight_kg": null,
"price": 2.99,
"currency": "CAD",
"regular_price": 2.99,
"sale_price": null,
"on_sale": false,
"sale_valid_from": null,
"sale_valid_to": null,
"sale_promotion_number": null,
"sale_requires_loyalty_card": null,
"price_basis": "per_item",
"price_unit": "each",
"price_per_kg": null,
"regular_price_per_kg": null,
"estimated_item_price": null,
"member_price": null,
"multi_buy": null,
"scene_plus_points": null,
"percent_off": null,
"active_promotions": [],
"upcoming_promotions": [],
"in_stock": true,
"stock_status": "in_stock",
"category": "Dairy & Eggs",
"subcategory": "Dairy & Eggs > Milk",
"category_path": "Dairy & Eggs > Milk > Dairy Milk",
"description": null,
"country_of_origin": null,
"product_of_canada": false,
"image": "https://media.sobeys.com/original/754000000025700000000082919237_VOILA_49dae045d062335d87d55adaa67122bf00c46b0a.JPG",
"source_updated_at": "2026-11-05T06:03:06Z",
"url": "https://www.iga.ca/products/milk-2-go-sport-milk-vanilla-325-ml",
"rank": 3
}
],
"fetched_at": "2026-11-06T16:39:39Z"
}
}What the IGA Québec API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| stores | IGA stores in Quebec with their store number (for every other action): name, address, postal code, phone, opening hours, coordinates. Nearest first with `lat`+`lon` or `postal_code`; or look one up by `store_id`; or match a name / city with `query`. | Pricing teams call stores to get iGA stores in Quebec with their store number (for every other action). | store_id, query, lat, lon, limit |
| search | Search one IGA store's shelf: regular price, the current sale price and its end date, per-kg or per-item basis, Scene+ points, multi-buy, in-stock flag, UPCs and pack size per row. | Marketplace operators call search to search one IGA store's shelf. | query, store_id, page, page_size, sort, ... |
| product | One product at one IGA store, by product_id (as a row returns it), article number, UPC / GTIN or produce PLU: every price field with dates, all running and coming promotions, stock flag, UPCs, pack size, category, description, image and the product page. | Catalog enrichment teams call product to get one product at one IGA store, by product_id (as a row. | store_id, product_id, upc, plu, language |
| deals | Everything with a promotion running now at one IGA store (this week's flyer prices, Scene+ points offers), optionally inside one category or matching a word. | Retail analysts call deals to get everything with a promotion running now at one IGA store (this week's flyer prices, Scene+ po…. | store_id, query, category, page, page_size, ... |
| categories | The category tree of one IGA store with product counts (department and aisle level), to use as `category` in search and deals. | Pricing teams call categories to get the category tree of one IGA store with product counts (department and aisle level), to use a…. | store_id, language |
Call search from your stack
curl -X POST https://api.reefapi.com/iga-qc/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"milk","store_id":"0444"}'import os
import requests
REEF_KEY = os.environ["REEF_KEY"]
r = requests.post(
"https://api.reefapi.com/iga-qc/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "milk",
"store_id": "0444"
},
timeout=90,
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/iga-qc/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "milk",
"store_id": "0444"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.iga-qc.search with {"query":"milk","store_id":"0444"}.Who uses this API and why
- Read this week's promotions and Scene+ offers for a set of Québec stores
- Follow regular and sale prices for a basket at one store
- Match your own products by UPC or PLU to the price at a specific store
- Compare one product across IGA stores in a region
Questions developers ask before integrating
Is this the IGA in Australia?
No. This engine covers IGA and IGA extra stores in Québec, in CAD. The separate iga engine covers Australia.
How do I find a store number?
stores takes a name or city, or lat and lon for the nearest first, and returns the 4-digit store_id with address, phone and opening hours. stores counted 305 stores on 2026-11-08.
Do prices differ between stores?
Records are per store, and a product_id ends with the store number, such as 262248_EA_0444. Prices can match inside one flyer: the two Lévis stores we read were identical that week.
How are sales, Scene+ and member prices shown?
on_sale, sale_price, sale_valid_from and sale_valid_to describe the current sale. active_promotions and upcoming_promotions list each promotion with its dates. member_price is the Scene+ flyer price when the store publishes one, and scene_plus_points is the points offer.
Can I look up produce by PLU or a barcode?
Yes. product takes upc for a printed barcode, exact match only, or plu for a 4 or 5 digit produce number such as 4023 for red seedless grapes.
Is there a stock quantity?
No, only a flag: in_stock and stock_status. estimated_item_price is always null on IGA because the source does not publish one.
What is the IGA Québec API?
IGA Québec API is a ReefAPI endpoint group for store-level grocery prices from iga in québec: regular and sale prices with dates, per-kg prices, stock and scene+ offers for the store you pick. It returns live JSON through POST requests under /iga-qc/v1.
Is the IGA Québec API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. IGA Québec calls use the same shared credit balance as every other ReefAPI engine.
Do I need an IGA Québec login or account?
No login to IGA Québec 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 IGA Québec data?
The page example is captured from a live stores call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the IGA Québec API use?
IGA Québec actions currently cost 1-3 credits per successful call. Failed or blocked calls are free. All APIs draw from one credit pool.
Can I call IGA Québec from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call iga-qc actions with the same key, credit pool and JSON envelope used by normal REST requests.
Is the IGA Québec API an IGA Québec scraper?
It is the managed alternative to a DIY IGA Québec scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same store-level grocery prices from iga in québec: regular and sale prices with dates, per-kg prices, stock and scene+ offers for the store you pick back as clean JSON.
Why does my IGA Québec scraper keep getting blocked?
Most IGA Québec scrapers break on anti-bot defenses, rate limits and IP bans that need rotating residential proxies and browser fingerprinting to clear. ReefAPI handles all of that for you — no proxies, no captchas, no maintenance — and returns live JSON. Blocked calls are free.