API idealo.fr : les offres de tous les marchands en JSON
Sur idealo.fr, une fiche produit rassemble les offres de nombreuses boutiques : Cdiscount, Fnac, Darty, Boulanger, Amazon.fr et bien d'autres. Cette API restitue ce tableau en JSON, tel qu'un acheteur le voit sur idealo.fr : prix de l'article, frais de port, prix livré, délai, transporteurs et moyens de paiement, avec le nom du vendeur réel quand l'offre passe par une marketplace. Elle ne sert pas à transmettre un catalogue à idealo : les outils qu'idealo réserve à ses marchands partenaires sont une autre affaire. Ce qui est lu ici, c'est la vitrine publique, au moment de l'appel.
Endpoints
| endpoint | Ce qui est renvoyé | Obligatoires |
|---|---|---|
| search | Recherche par mot-clé ou par EAN sur la vitrine choisie (`country: "fr"` pour idealo.fr). Chaque ligne donne l'identifiant produit, le prix « à partir de », le nombre d'offres, le marchand le moins cher avec ses frais de port et la note des tests. Un EAN ou un modèle exact mène directement à la fiche : `direct_hit: true` et le produit complet dans `product`. | query |
| category/products | Une catégorie idealo entière par son identifiant ou son URL (par exemple 3189, consoles de jeux), avec les mêmes lignes que la recherche. Les identifiants de catégorie sont communs à toutes les vitrines idealo. | category |
| product/detail | La fiche produit : marque, arborescence, images, fourchette de prix entre marchands, prix plancher en neuf et en occasion, fiche technique en français, variantes avec leur EAN, synthèse des tests, points forts et points faibles, avis d'utilisateurs. | product_id |
| product/offers | Chaque offre d'un produit : boutique et sa ville, note idealo de la boutique, prix de l'article, prix livré et frais de port, délai de livraison, transporteurs, retour gratuit, moyens de paiement, titre donné par le marchand et EAN de la variante. Tri par prix de l'article ou par prix livré, jusqu'à 500 offres. | product_id |
Chaque appel est facturé en crédits. Les appels en échec ou bloqués sont gratuits.
Exemple qui fonctionne
La fiche « Nintendo Switch 2 » regroupe plusieurs variantes : l'offre la moins chère porte l'EAN 0045496321444 (« noir »), la suivante l'EAN 0045496337414 (« avec batterie amovible noir »). Avant de comparer deux prix, vérifiez `variant_ean` ou `offer_title`. Trié par `total_price`, Cdiscount passe de 449,99 € à 454,98 € une fois les 4,99 € de port ajoutés. Pour les offres marketplace, `seller` désigne la place de marché et `marketplace_seller` le vendeur qu'idealo affiche sous « Vendu par ». Attention : sans `country`, c'est idealo.de qui répond ; pour idealo.fr, `"country": "fr"` est obligatoire dans chaque appel.
curl -X POST https://api.reefapi.com/idealo/v1/product/offers \
-H "x-api-key: VOTRE_CLE" \
-H "content-type: application/json" \
-d '{"product_id": "206193300", "country": "fr", "sort": "total_price", "max_offers": 20}'{
"ok": true,
"data": {
"product": {
"product_id": "206193300",
"title": "Nintendo Switch 2",
"price_min": 429.99,
"price_max": 779.51,
"currency": "EUR",
"offer_count": 98,
"price_new_from": 429.99,
"price_used_from": 449
},
"offers": [
{
"position": 1,
"seller": { "id": "336221", "name": "joybuy.fr", "location": "Paris", "rating": 3.7, "rating_count": 6 },
"marketplace_seller": null,
"price": 429.99,
"total_price": 429.99,
"shipping_cost": 0,
"offer_title": "Nintendo Switch 2 noir",
"delivery_time": "Livraison le jour même ou le lendemain",
"payment_methods": ["american_express", "klarna", "mastercard", "paypal", "visa"],
"variant_ean": "0045496321444",
"condition": "new"
},
{
"position": 3,
"seller": { "id": "29061", "name": "Cdiscount.com", "location": "Bordeaux", "rating": 3.8, "rating_count": 202 },
"marketplace_seller": null,
"price": 449.99,
"price_display": "454,98 €",
"total_price": 454.98,
"total_price_display": "454,98 € livraison incl.",
"shipping_cost": 4.99,
"delivery_time": "mar. 27/10–mer. 28/10/2026",
"delivery_providers": ["Chronopost", "Point Relais", "Colissimo", "GLS"],
"variant_ean": "0045496337414",
"condition": "new"
},
{
"position": 8,
"seller": { "id": "318774", "name": "Cdiscount.com (Marketplace)", "location": "Bordeaux", "rating": 1, "rating_count": 88 },
"marketplace_seller": { "name": "Darty" },
"price": 459.99,
"total_price": 459.99,
"shipping_cost": 0,
"offer_title": "Nintendo Switch 2 avec batterie amovible noir"
},
...
],
"count": 20,
"total_offers": 98,
"seller_count": 13,
"sort": "total_price",
"has_more": true,
"country": "fr"
},
"meta": { "record_count": 20, "total": 98, "country": "fr", "host": "www.idealo.fr", "currency": "EUR", "cache_hit": false, "mode": "live" }
}Écrire son propre scraper idealo.fr : ce qui casse en premier
Une recherche par EAN ne renvoie pas de page de résultats : idealo redirige directement vers la fiche du produit. Un script qui attend une liste conclut à une page cassée. C'est exactement ce qui est arrivé à notre moteur sur idealo.de le 9 septembre 2026, avec une erreur d'analyse sur chaque requête EAN ; depuis, la redirection est reconnue et la ligne revient avec `direct_hit: true`.
Les montants d'idealo.fr s'écrivent « 1 803,89 € », avec une espace fine insécable (U+202F) comme séparateur de milliers. Un parseur qui n'attend qu'une espace ordinaire risque de mal lire tout prix à quatre chiffres. La note des tests change aussi d'échelle selon le pays : 17/20 sur idealo.fr, note scolaire allemande sur idealo.de où 1 est la meilleure. Comparer les deux sans le savoir inverse le classement.
Enfin, le lien de chaque offre passe par le système de redirection payant d'idealo : la boutique paie le clic. Suivre ces liens pour retrouver l'adresse du marchand, c'est facturer un clic à chaque boutique, à chaque passage ; le moteur ne les suit jamais et rend `offer_url` tel quel.
Reste une question à trancher avant la première ligne de code : quelle clé identifie un produit chez vous ? L'identifiant idealo regroupe plusieurs variantes, l'EAN n'en désigne qu'une. Sur la fiche Nintendo Switch 2, les 20 premières offres se répartissaient entre trois EAN, plus une offre qu'idealo n'avait rattachée à aucune variante.
Limites et remarques honnêtes
- idealo n'a ni conçu ni validé cette API : elle n'a rien d'officiel et aucun accord ne nous lie à idealo.
- Pas d'historique : la courbe de prix qu'affiche idealo n'est pas fournie. Pour suivre l'évolution d'un prix, enregistrez vous-même les réponses successives.
- `search` et `category/products` renvoient une seule page (36 lignes, 60 en tri par prix) et `has_more` vaut toujours false ; `total_results` indique combien d'éléments existent au-delà (418 pour « nintendo switch 2 »).
- En tri `price_asc`, les offres isolées sans fiche produit (`type: "offer"`, `product_id` null) remontent en tête : pour « aspirateur robot », la page commençait par des pièces détachées à 0,95 €.
- Seules les offres neuves sont accessibles. Pour l'occasion, il reste le prix plancher `price_used_from` de la fiche (449 € dans l'exemple).
- En tri `total_price`, `price_display` affiche le prix livré, pas celui de l'article : pour vos calculs, utilisez les nombres `price` et `total_price`.
- Le champ `in_stock` est revenu à null sur les 20 offres de notre appel du 24 octobre 2026 : sur idealo.fr, ne comptez pas sur lui pour la disponibilité.