Continente API & Scraper
Continente is Portugal's largest supermarket chain and continente.pt its online shop.
🤖 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` returns the products for a search term with the price anyone pays, the struck-through price when an immediate discount is running, the manufacturer's recommended price (PVPR) when the shop shows one, the discount badge as a number (10 % or 2 €), multi-buy deals such as "Leve 7 Pague 6", the price per kg, litre or unit as the shop prints it, pack size, brand, availability and the most units one order may hold. Filters are category, brand, one dietary attribute (organic, vegan, vegetarian, gluten free, lactose free, no added sugar) and a price range, with sorting by price, price per kg or litre, or name. `promotions` lists the products on discount right now, `category` lists a category and `categories` returns the shop's category tree. `product` returns one product with its EANs, the discount's start and end date, the multi-buy conditions text, order limits, rating, category and images, plus the label: regulated name, producer, ingredients, allergens, storage, origin, net content and the nutrition table. Pass a Portuguese post code to see the range of the store that delivers there; `store` tells you which store that is.
What a Continente field actually contains
Fields that read differently from how they look. Every row was measured against live continente.pt responses on 2026-10-15.
| Field | What it holds |
|---|---|
| price, price_unit | The price anyone pays now, in euros, per price_unit. Fruit, vegetables, meat and fish sold by weight are priced per kg (Clementina: 1.79 per kg), most packs per unit (un). |
| regular_price | The struck-through price of an immediate discount (Clementina: 1.99 before a 10 % discount). Empty when nothing is struck through. |
| recommended_retail_price | The manufacturer's recommended price (PVPR) that the shop prints next to some products. It is not a former Continente price: Leite Mimosa 6 x 1 l showed price 5.34 and PVPR 6.00 with no discount running. |
| discount | The shop's discount badge as kind, text, value and unit, for example immediate_discount, 10, %. On product calls it adds the start and end date of the promotion. |
| multibuy | Multi-buy deals such as "Leve 7 Pague 6" (buy 7, pay 6), kept apart from price. The product call adds the shop's conditions text with the campaign dates. |
| unit_price, unit_price_unit | The second price the shop prints: per litre or kg for packs (0.89 per lt for 6 x 1 l milk), per unit for products priced by weight (0.27 per un for clementines). |
| available, max_order_quantity | Whether the shop can sell the product now, and the most units one order may hold. Continente publishes no stock count. |
| store | Which delivery store's range the rows come from. The range changes with the post code ('fruta': 3,187 products for 1500-392 Lisboa, 3,237 for 4000-322 Porto, 1,802 for 9000-018 Funchal); prices on the same product were equal in every store compared. |
Cartão Continente loyalty-card discounts are not shown on the shop's public product listings, so no card price is returned; price is what any shopper pays.
Real request and response JSON
Captured from the indexed primary action, search, on .
{
"method": "POST",
"url": "https://api.reefapi.com/continente/v1/search",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "leite"
}
}{
"ok": true,
"meta": {
"api": "continente",
"endpoint": "search",
"mode": "live",
"latency_ms": 432.5,
"record_count": 35,
"bytes": 803451,
"cache_hit": false,
"upstream_requests": 1,
"total": 565,
"charged_credits": 3,
"version": "0.1.0",
"request_id": "186e15214ae34ce8",
"queue_ms": 1.6,
"fetched_at": "2026-10-15T17:02:51.881Z"
},
"data": {
"store": {
"postal_code": null,
"store_name": null,
"store_id": null,
"resolved_from": "site default for an anonymous visitor (its range is not identical to any post code we set: fruta 3,214 rows vs 3,187 for 1500-392 Lisboa)"
},
"query": "leite",
"category": null,
"filters": {},
"sort": "relevance",
"total": 565,
"page": 1,
"per_page": 35,
"has_more": true,
"returned": 35,
"results": [
{
"rank": 1,
"product_id": "4421406",
"name": "Leite UHT Meio Gordo Mimosa",
"brand": "Mimosa",
"price": 5.34,
"price_unit": "un",
"regular_price": null,
"recommended_retail_price": 6,
"currency": "EUR",
"discount": null,
"on_offer": false,
"multibuy": null,
"promo_messages": [],
"unit_price": 0.89,
"unit_price_unit": "lt",
"unit_price_text": "0,89€/lt",
"pack_size": "emb. 6 x 1 lt",
"available": true,
"max_order_quantity": 10,
"labels": [],
"category_path": "Supermercado/Laticínios e Ovos/Leites/Meio Gordo",
"impression_price": 5.34,
"image": "https://www.continente.pt/dw/image/v2/BDVS_PRD/on/demandware.static/-/Sites-col-master-catalog/default/dw2344735a/images/col/442/4421406-cima.jpg?sw=280&sh=280",
"url": "https://www.continente.pt/produto/leite-uht-meio-gordo-mimosa-4421406.html"
},
{
"rank": 2,
"product_id": "8504295",
"name": "Leite UHT Meio Gordo Continente",
"brand": "Continente",
"price": 5.1,
"price_unit": "un",
"regular_price": null,
"recommended_retail_price": null,
"currency": "EUR",
"discount": null,
"on_offer": false,
"multibuy": null,
"promo_messages": [],
"unit_price": 0.85,
"unit_price_unit": "lt",
"unit_price_text": "0,85€/lt",
"pack_size": "emb. 6 x 1 lt",
"available": true,
"max_order_quantity": 10,
"labels": [
"Produzido em Portugal"
],
"category_path": "Supermercado/Laticínios e Ovos/Leites/Meio Gordo",
"impression_price": 5.1,
"image": "https://www.continente.pt/dw/image/v2/BDVS_PRD/on/demandware.static/-/Sites-col-master-catalog/default/dwead35874/images/col/850/8504295-cima.jpg?sw=280&sh=280",
"url": "https://www.continente.pt/produto/leite-uht-meio-gordo-continente-8504295.html"
},
{
"rank": 3,
"product_id": "4421384",
"name": "Leite UHT Magro Mimosa",
"brand": "Mimosa",
"price": 5.34,
"price_unit": "un",
"regular_price": null,
"recommended_retail_price": 6,
"currency": "EUR",
"discount": null,
"on_offer": false,
"multibuy": null,
"promo_messages": [],
"unit_price": 0.89,
"unit_price_unit": "lt",
"unit_price_text": "0,89€/lt",
"pack_size": "emb. 6 x 1 lt",
"available": true,
"max_order_quantity": 10,
"labels": [],
"category_path": "Supermercado/Laticínios e Ovos/Leites/Magro",
"impression_price": 5.34,
"image": "https://www.continente.pt/dw/image/v2/BDVS_PRD/on/demandware.static/-/Sites-col-master-catalog/default/dwb0ac60a7/images/col/442/4421384-cima.jpg?sw=280&sh=280",
"url": "https://www.continente.pt/produto/leite-uht-magro-mimosa-4421384.html"
}
]
}
}What the Continente API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search | Search Continente's online shop: shelf price, was price of an immediate discount, recommended retail price (PVPR), discount badge, multi-buy deal, price per kg/l, pack size, brand, availability. `query` required; filters: category, brand, diet, min_price, max_price; sort; paging; optional post code for the store's assortment. | Pricing teams call search to search Continente's online shop. | query, category, brand, diet, min_price, ... |
| category | List one Continente category (id from `categories`) with the same row fields and filters as `search`. | Marketplace operators call category to list one Continente category (id from `categories`) with the same row fields and filters as `…. | category, brand, diet, min_price, max_price, ... |
| promotions | Continente products on discount right now (the site's 'Com Desconto' facet): offer price, was price, discount % or €, multi-buy deals. Narrow with `query`, `category`, `brand`, `diet`. | Catalog enrichment teams call promotions to get continente products on discount right now (the site's 'Com Desconto' facet). | query, category, brand, diet, min_price, ... |
| product | One Continente product by the `product_id` a search row returns: price, was price or PVPR, discount with its validity window, multi-buy deal with the site's conditions, price per kg/l, EANs, availability and order limits, category, images, and the label: regulated name, producer, ingredients, allergens, storage, origin, net content, nutrition table. | Retail analysts call product to get one Continente product by the `product_id` a search row returns. | product_id |
| categories | Continente's category tree from the shop menu: id, name, URL, children. Ids feed `category` and the `category` filter. | Pricing teams call categories to get continente's category tree from the shop menu. | category |
| store | Which Continente delivery store serves a Portuguese post code (the store whose assortment `search`/`category`/`promotions` show when you pass the same `postal_code`). | Marketplace operators call store to get which Continente delivery store serves a Portuguese post code (the store whose assortment `se…. | postal_code |
Call search from your stack
curl -X POST https://api.reefapi.com/continente/v1/search \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"leite"}'import requests
r = requests.post(
"https://api.reefapi.com/continente/v1/search",
headers={"x-api-key": REEF_KEY},
json={
"query": "leite"
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/continente/v1/search", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "leite"
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.continente.search with {"query":"leite"}.Who uses this API and why
- Track Continente shelf prices and weekly discounts with their end dates.
- Compare Portuguese grocery prices per kg or litre across brands and own labels.
- Build a Portuguese grocery catalogue with EANs, brands, ingredients, allergens and nutrition.
- Monitor multi-buy deals and immediate discounts by category.
- Check which products the store serving a Portuguese post code sells.
Questions developers ask before integrating
Do I need a Continente account or a Cartão Continente?
No. Everything is read logged out: the prices, discounts and product labels any visitor sees.
Are loyalty-card (Cartão Continente) discounts included?
No. They are not published on the public product listings, so the API does not invent a card price. price is the shelf price, regular_price the struck-through price of an immediate discount.
What is the difference between regular_price and recommended_retail_price?
regular_price is what Continente charged before a running discount. recommended_retail_price is the manufacturer's recommended price (PVPR), which Continente prints for comparison; the product was not necessarily ever sold at it.
Do prices depend on the post code?
The range does: each delivery store sells its own selection, so pass postal_code to see what the store serving that address sells. On the 335 product and store pairs we compared across Lisboa, Porto, Faro and Funchal the price was the same.
Which filters work?
category, brand, one dietary attribute and min_price / max_price, plus sorting. Each was checked against the unfiltered count in the same minute: 'leite' went from 558 products to 45 Mimosa, 9 organic, 50 lactose free, 23 vegan and 216 between 2 and 4 euros.
How many products per page, and how deep?
Up to 35 per page, Continente's own maximum. Page through the whole list; past the last page the answer is empty with has_more false.
Does the product call include nutrition and ingredients?
Yes, when Continente publishes them: regulated name, producer, ingredients, allergens, storage, origin, net content and the nutrition table per serving. Some labels are incomplete at the source and are returned as they are.
How fresh is the data?
Every call reads continente.pt live; nothing is cached. Discounts run in weekly windows and the product call returns each one's end date.
What is the Continente API?
Continente API is a ReefAPI endpoint group for portuguese supermarket prices from continente.pt: shelf price, discounts and was price, pvpr, multi-buy deals, price per kg or litre, eans and nutrition. It returns live JSON through POST requests under /continente/v1.
Is the Continente API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Continente calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Continente login or account?
No login to Continente 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 Continente 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 Continente API use?
Continente 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 Continente from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call continente actions with the same key, credit pool and JSON envelope used by normal REST requests.