Cedeo APIcedeo.fr ↗
Access Cedeo.fr product listings, detailed specs, category browsing, product variants, and agency locations across France via a structured REST API.
What is the Cedeo API?
The Cedeo.fr API exposes 5 endpoints covering product search, full product detail pages, category browsing, variant tables, and agency location data from cedeo.fr, France's professional plumbing and heating supply retailer. The get_product_detail endpoint returns up to a dozen structured fields per product including price_ttc, specifications, manufacturer_ref, and image URLs — making it straightforward to build product catalogs or pricing tools against Cedeo's inventory.
curl -X GET 'https://api.parse.bot/scraper/12cc244a-218a-4a55-8b6a-06942cad8605/search_products?page=1&query=robinet' \ -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 cedeo-fr-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: CEDEO API — search products, drill into details and variants, list agencies."""
from parse_apis.cedeo_api import Cedeo, ProductNotFound
client = Cedeo()
# Search for plumbing products — limit= caps total items fetched across pages.
for product in client.products.search(query="robinet", limit=5):
print(product.name, product.brand, product.cedeo_ref)
# Drill into the first result for full details.
product = client.products.search(query="chaudiere", limit=1).first()
if product:
detail = product.details()
print(detail.name, detail.price_ttc, detail.manufacturer_ref)
print("Images:", len(detail.images), "Specs:", len(detail.specifications))
# List variants for a product family.
if product:
for variant in product.variants.list(limit=3):
print(variant.name, variant.supplierReference, variant.brandName)
# Browse agencies across France.
for agency in client.agencies.list(limit=3):
print(agency.name, agency.slug, agency.id)
# Typed error handling: catch when a product URL is invalid.
try:
bad = client.products.search(query="robinet", limit=1).first()
if bad:
bad.details()
except ProductNotFound as exc:
print(f"Product not found: {exc.url}")
print("exercised: products.search / product.details / product.variants.list / agencies.list")
Search for products by keyword query on cedeo.fr. Returns up to 24 products per page with name, brand, reference, and URL. Paginated by page number.
| Param | Type | Description |
|---|---|---|
| page | integer | Page number for pagination, starts at 1 |
| queryrequired | string | Search keyword (e.g. 'robinet', 'chaudiere') |
{
"type": "object",
"fields": {
"page": "integer, current page number",
"query": "string, the search query submitted",
"products": "array of product objects with cedeo_ref, url, name, and brand",
"total_results": "integer or null, total number of matching products"
},
"sample": {
"data": {
"page": 1,
"query": "robinet",
"products": [
{
"url": "https://www.cedeo.fr/p/plomberie/robinet-arro-chrome-15x21-20x27-ref-70-5fg-A1039403",
"name": "Robinet ARRO chromé 15x21-20x27 réf 70-5FG",
"brand": "GRK",
"cedeo_ref": "1039403"
}
],
"total_results": 19980
},
"status": "success"
}
}About the Cedeo API
Product Search and Detail
The search_products endpoint accepts a query string (e.g. robinet, chaudiere) and an optional page integer for pagination, returning up to 24 products per page. Each result includes cedeo_ref, name, brand, and a url pointing to the product page. The total_results field lets you calculate how many pages to iterate. To get full data on any individual product, pass its URL to get_product_detail, which returns price_ttc, a description string, a specifications object of key-value pairs, manufacturer_ref, and an images array alongside the standard name, brand, and reference fields.
Category Browsing and Product Variants
The get_category endpoint lets you browse products by category using a slug and category_id pair — both are required and correspond to Cedeo's category URL structure (e.g. slug fontes-sme, ID x3snv3_dig_2029325R7). The response mirrors the search shape: an array of product objects with cedeo_ref, url, name, and brand. For product families that come in multiple configurations, get_product_variants accepts an article_id and returns an articles array alongside axis and name fields describing the variant matrix.
Agency Locator
The get_agency_locator endpoint requires no inputs and returns the full list of CEDEO branch locations across France. Each agency object includes name, url, slug, and id, making it usable for store-finder features or for mapping branch coverage. This endpoint returns all agencies in a single call with no pagination.
The Cedeo API is a managed, monitored endpoint for cedeo.fr — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when cedeo.fr 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 cedeo.fr 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 price-monitoring tool that tracks
price_ttcchanges for plumbing products usingsearch_productsandget_product_detail. - Populate a product comparison page with
specificationsandmanufacturer_reffields fromget_product_detail. - Create a category-level product feed by iterating
get_categorywith known slug and category_id pairs. - Display a variant selector in a procurement app using the
axisandarticlesarrays fromget_product_variants. - Build a branch-finder feature using agency
name,slug, andurldata fromget_agency_locator. - Sync a B2B purchasing catalog by paginating
search_productsfor specific product families like boilers or fittings. - Cross-reference
cedeo_refandmanufacturer_refto match Cedeo listings against a supplier parts database.
| 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 Cedeo have an official public developer API?+
What does `get_product_detail` return beyond the basic name and reference?+
price_ttc (tax-inclusive price), a description string, a specifications object of key-value attribute pairs, manufacturer_ref, a cedeo_ref, brand, and an images array of product image URLs. Not all fields are guaranteed on every product — some listings may have null or missing specs depending on how the product is listed on cedeo.fr.Does the API return stock availability or inventory levels?+
How does pagination work in `search_products`?+
page parameter starting at 1. Each page returns up to 24 products. The total_results field (integer or null) indicates the full match count, so you can calculate total pages by dividing by 24. If total_results is null, the source did not return a count for that query.Does `get_category` support filtering by brand or price range?+
slug and category_id and returns all products in that category without additional filter parameters. The response includes brand per product, so client-side filtering is possible. You can fork this API on Parse and revise it to pass additional filter parameters if the category supports them.