Super C APIsuperc.ca ↗
Access Super C grocery data via API: search products by keyword, browse 23 categories, get product details with ingredients, and find stores by postal code.
What is the Super C API?
The Super C API exposes 5 endpoints covering product search, category browsing, product details, and store lookup for Super C, a Quebec-based grocery chain. search_products returns up to 42 results per query sorted by price ascending, with fields like price, unit_price, brand, format, and image_url. get_product_details adds ingredients, description, and product attributes not returned in search.
curl -X GET 'https://api.parse.bot/scraper/3659a62f-08e4-4d9e-a3ca-163af337c7f5/search_products?query=lait' \ -H 'X-API-Key: $PARSE_API_KEY'
Full-text search over Super C's online grocery catalog by keyword. One round trip per call (two when a store is selected); no automatic multi-page fetching. The site paginates results in fixed pages of up to 42 products; page selects which page is returned (page 1 when omitted), has_more tells whether a further page exists, and total_matches is the site's published count of matching products across all pages ('224 résultats'), while total_results is the number of unique products actually returned on this page. Only genuine search results are returned: the page's sponsored tiles (advertised copies of products already in the grid, and unrelated recommended products such as a ham appearing in a yogurt search) are excluded, and results are deduplicated by product_id, so brand searches such as 'Activia' still return the full brand assortment. Products within the returned page are sorted by numeric price ascending. Search relevance is the site's own: a product can be missing from a generic keyword search while appearing in a brand search, because the site's search index does not match it to that keyword (e.g. some Activia drinkable yogurts are not returned for 'yogourt' on any page). A keyword with no matches returns products as an empty array, total_results 0, total_matches null and has_more false. Query matches product names in French or English. Prices are the online-shopping prices of the selected store; when no store is selected the site's default store is used and its name is returned in store.name. In-store shelf prices are not published separately, so pricing_context is always 'online'. Each product carries the source unit price as-is (unit_price), separate numeric price_per_kg/price_per_lb for products sold by weight, promotion fields (on_promotion, regular_price, promotional_price, discount_amount, discount_percent, multi_buy_quantity/multi_buy_total_price, loyalty_points) that are null when the site does not publish them, and for multipack formats such as '8x93 mL' a recomputed unit_price_calculated over the full package with a unit_price_discrepancy flag when it differs from the source figure. promotion_end_date is never shown on result tiles (always null here) and estimated_weight_g only rarely is; use get_product_details for them. For multi-buy offers such as '2 / 4,00 $', price is the per-unit share (2.00) and price_formatted is the offer text. collected_at is the UTC time the data was fetched.
| Param | Type | Description |
|---|---|---|
| page | integer | 1-based result page number in the site's fixed pagination (up to 42 products per page). Use has_more from the previous response to know whether page+1 exists. A value below 1 returns a stale_input error. |
| queryrequired | string | Search keyword in French or English (e.g. 'lait', 'pain', 'poulet'). |
| store_id | string | Numeric Super C store identifier from get_store_by_postal_code stores[*].store_id (one shape: '633'). When supplied, that store is selected before searching so assortment and prices reflect it; an unknown id returns a stale_input error. Omitting uses the site's default store. |
{
"type": "object",
"fields": {
"page": "integer — the result page returned (echoes the page input, 1 when omitted)",
"query": "string — the search keyword used",
"store": "object — store context used for pricing: store_id (string, echoes the store_id input or null when the default store was used), name (string, store name shown by the site), pricing_context (string, always 'online')",
"has_more": "boolean — true when the site offers a further result page (page + 1)",
"products": "array of product objects (genuine search results only, deduplicated by product_id): product_id, name, brand, category, format, url, image_url, price (number, per unit or per multi-buy share), price_formatted, price_unit_label (string such as 'ch.' or 'env. ch.', null for multi-buy offers), unit_price (string, source unit price as displayed), selling_basis ('weight' or 'unit'), price_is_estimated (boolean, price shown as approximate), estimated_weight_g (number or null, rarely published on tiles), price_per_kg, price_per_lb (number or null), plus_taxes (boolean, price shown '+tx'), multi_buy_quantity, multi_buy_total_price (number or null), on_promotion (boolean, Promo badge), regular_price (number or null; null for per-weight regular prices), regular_price_formatted (string or null), promotional_price (number or null, equals price when on_promotion), discount_amount, discount_percent (number or null), promotion_end_date (null on tiles), loyalty_points (integer or null), unit_price_calculated (number or null, price over full multipack quantity), unit_price_calculated_unit (string such as '100 ml'), unit_price_discrepancy (boolean or null)",
"collected_at": "string — UTC ISO-8601 timestamp of when the data was fetched",
"total_matches": "integer or null — total number of matching products across all pages as published by the site; null when the site shows no count (no matches)",
"total_results": "integer — number of unique products returned on this page (0 when the keyword has no matches)"
},
"sample": {
"data": {
"page": 1,
"query": "Activia",
"store": {
"name": "Super C - St-Romuald",
"store_id": "6131",
"pricing_context": "online"
},
"has_more": false,
"products": [
{
"url": "https://www.superc.ca/allees/produits-laitiers-et-oeufs/yogourts/yogourts-probiotiques/yogourt-probiotique-a-la-vanille-2-2/p/056800098297",
"name": "Yogourt probiotique à la vanille 2,2 %",
"brand": "Activia",
"price": 3.99,
"format": "650 g",
"category": "Produits laitiers et œufs",
"image_url": "https://product-images.metro.ca/images/h72/h12/16838829637662.jpg",
"plus_taxes": false,
"product_id": "056800098297",
"unit_price": "0,61 $ /100g",
"on_promotion": false,
"price_per_kg": null,
"price_per_lb": null,
"regular_price": null,
"selling_basis": "unit",
"loyalty_points": null,
"discount_amount": null,
"price_formatted": "3,99 $",
"discount_percent": null,
"price_unit_label": "ch.",
"promotional_price": null,
"estimated_weight_g": null,
"multi_buy_quantity": null,
"price_is_estimated": false,
"promotion_end_date": null,
"multi_buy_total_price": null,
"unit_price_calculated": null,
"unit_price_discrepancy": null,
"regular_price_formatted": null,
"unit_price_calculated_unit": null
}
],
"collected_at": "2026-09-16T02:28:39+00:00",
"total_matches": 30,
"total_results": 30
},
"status": "success"
}
}About the Super C API
Product Search and Browsing
The search_products endpoint accepts a query string in French or English (e.g. lait, pain, poulet) and returns up to approximately 42 product objects sorted by price ascending. Each result includes product_id, name, brand, category, price (numeric CAD), price_formatted, unit_price, format, url, and image_url. The get_category_products endpoint takes a category_slug from get_categories results (e.g. /allees/fruits-et-legumes) and returns the same product shape for that aisle.
Category Navigation
get_categories requires no inputs and returns approximately 23 top-level category objects, each with name, url, and slug. These slugs feed directly into get_category_products as the category_slug parameter, making it straightforward to iterate over all aisles and collect products.
Product Details
get_product_details accepts a full product URL or path from any search_products or get_category_products result. It returns the full set of product fields plus description, ingredients, and attributes (an array of characteristic strings). These three fields may be null or empty depending on the product — not all listings include structured ingredient or description data.
Store Finder
get_store_by_postal_code accepts an optional Canadian postal_code (e.g. H2X 1Y4). When provided, it returns the nearest Super C stores ordered by proximity. Omitting the parameter returns all stores. Each store object includes name, address, city, postal_code, and phone.
The Super C API is a managed, monitored endpoint for superc.ca — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when superc.ca changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official superc.ca API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Compare prices across product categories by iterating
get_category_productsfor multiple slugs and sorting on thepricefield. - Build a grocery price tracker that monitors changes to
priceandunit_pricefor specific products over time. - Extract ingredient lists and allergen attributes from
get_product_detailsto support dietary filtering applications. - Locate the nearest Super C store for a given customer postal code using
get_store_by_postal_code. - Populate a French-language grocery catalog using French query terms with
search_productsand the returnedname,brand, andformatfields. - Aggregate all products across all 23 categories for a full-catalog price index using
get_categorieschained withget_category_products. - Enrich product listings with
image_urlanddescriptionfor display in a recipe or meal-planning app.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Super C have an official public developer API?+
What does `search_products` return and how are results ordered?+
product_id, name, brand, category, price (numeric CAD), price_formatted, unit_price, format, url, and image_url. There is no parameter to change sort order or page through additional results beyond the first ~42.Are nutritional facts (calories, macros) available from `get_product_details`?+
get_product_details returns ingredients, description, and attributes, but structured nutritional facts like calories or macronutrient breakdowns are not exposed as distinct fields. You can fork this API on Parse and revise it to add a nutritional data endpoint if that information is available on the product page.Does the API support pagination to retrieve more than ~42 products per search or category?+
search_products and get_category_products return up to approximately 42 results per call, with no offset or page parameter. You can fork this API on Parse and revise it to add pagination support for deeper result sets.Can I get store hours or flyer/promotion data through this API?+
name, address, city, postal_code, and phone. Weekly flyers and promotional pricing are not covered by any endpoint. You can fork this API on Parse and revise it to add store hours or flyer data endpoints.