Carrefour APIcarrefour.be ↗
Access Carrefour Belgium's grocery catalog via API. Search products, retrieve nutritional info, ingredients, allergens, pricing, and browse categories.
What is the Carrefour API?
The Carrefour Belgium API gives access to 4 endpoints covering the full carrefour.be grocery catalog, including product search, category browsing, and detailed product records. The get_product endpoint returns per-product fields such as nutri-score, allergens, ingredients, unit price, and stock availability. Use search_products to query by keyword or get_category_products to paginate through category listings, each returning up to 36 products per page.
curl -X GET 'https://api.parse.bot/scraper/f1a661f8-c8b3-4d04-9900-830fe047b8d8/search_products?page=1&query=melk' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace carrefour-be-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Walkthrough: Carrefour Belgium SDK — bounded, re-runnable; every call capped."""
from parse_apis.carrefour_be_api import CarrefourBe, ProductNotFound
client = CarrefourBe()
# Search for products — limit= caps TOTAL items fetched across pages.
for product in client.product_summaries.search(query="melk", limit=3):
print(product.name, product.brand, product.price)
# Browse categories and pick the first one.
cat = client.categories.list(limit=1).first()
if cat:
print(f"Category: {cat.name} ({cat.category_id})")
for item in cat.products(limit=2):
print(item.name, item.unit_price)
# Drill into full product details from a search hit.
hit = client.product_summaries.search(query="pasta", limit=1).first()
if hit:
try:
full = hit.details()
print(full.name, full.brand, full.nutri_score)
print("Ingredients:", full.ingredients[:80])
except ProductNotFound as e:
print(f"Product gone: {e.product_id}")
print("exercised: product_summaries.search / categories.list / category.products / product.details")
Full-text search over Carrefour Belgium's product catalog. Returns paginated product listings with price, brand, unit price, and availability. Results are ordered by relevance. Each page returns up to 36 products.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number (1-based). Each page returns up to 36 products. |
| queryrequired | string | Search query text (e.g. 'melk', 'pasta', 'chips'). |
{
"type": "object",
"fields": {
"page": "current page number",
"query": "submitted search query",
"products": "array of product summaries with id, name, brand, price, unit_price, image_url, product_url, available",
"total_pages": "total number of pages available",
"total_results": "total number of matching products"
},
"sample": {
"data": {
"page": 1,
"query": "melk",
"products": [
{
"name": "Ijs repen melk chocolade caramel 7-pack",
"brand": "Mars",
"price": 5.99,
"available": true,
"image_url": "https://cdn.carrefour.eu/420_05974531_T597.webp",
"product_id": "05974531",
"unit_price": "21,39 €/kg",
"product_url": "https://www.carrefour.be/nl/ijs-repen-melk-chocolade-caramel-7-pack/05974531.html"
}
],
"total_pages": 5,
"total_results": 170
},
"status": "success"
}
}About the Carrefour API
Product Search and Category Browsing
The search_products endpoint accepts a required query string (e.g. 'melk', 'chips') and an optional page integer. It returns total_results, total_pages, and a products array where each item includes id, name, brand, price, unit_price (e.g. '1,49 €/l'), image_url, product_url, and available. The get_categories endpoint takes no inputs and returns all top-level category objects with category_id, name, and url. Pass a category_id (e.g. 'ros002') to get_category_products to paginate products within that category using the same response shape as search.
Product Detail Records
get_product takes an 8-digit product_id obtainable from search or category results and returns the most complete record in the API. Fields include name, brand, price, unit_price, description, images (array of URLs), category, allergens, available, and nutritional data including nutri-score. This endpoint is the right choice when building product detail pages, nutrition trackers, or allergen filters.
Pagination and Identifiers
Both search_products and get_category_products return up to 36 products per page. The total_pages and total_results fields let you drive full catalog traversal without guessing. Product IDs are 8-digit numeric strings; category IDs use an alphanumeric slug format (ros002, ros016). IDs from one endpoint feed directly into another, so a typical flow is: get_categories → get_category_products → get_product.
The Carrefour API is a managed, monitored endpoint for carrefour.be — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when carrefour.be 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 carrefour.be 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?+
- Build a grocery price comparison tool using
priceandunit_pricefields across multiple product searches - Track stock availability changes on specific products using the
availablefield fromget_product - Create a nutrition dashboard by collecting
nutri-scoreand allergen data fromget_productfor a basket of items - Populate a recipe ingredient list with live Belgian supermarket prices using
search_productskeyword queries - Generate a full category product index by chaining
get_categorieswith paginatedget_category_productscalls - Build an allergen-aware shopping assistant by filtering
allergensfromget_productresults - Monitor brand presence across categories using
brandfields returned in category product listings
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Carrefour Belgium have an official public developer API?+
What nutritional data does `get_product` return?+
get_product returns allergens, a nutri-score, and a description field that typically contains ingredient and nutritional detail text. Granular per-nutrient breakdowns (e.g. calories, fat, carbohydrates as separate numeric fields) are not currently exposed as discrete fields — the data is available within the description text. You can fork the API on Parse and revise it to parse and surface those values as structured fields.Can I retrieve store-specific stock or pricing for different Carrefour BE locations?+
available boolean and a single price per product, reflecting the default catalog view rather than per-store inventory or regional pricing. You can fork the API on Parse and revise it to add a location or store parameter if that data becomes distinguishable.How does pagination work across search and category endpoints?+
search_products and get_category_products use 1-based page integers and return up to 36 products per page. Each response includes total_pages and total_results, so you can calculate how many requests are needed to retrieve a full result set before making them.