Pour comparer efficacement les prix entre Leboncoin et Kleinanzeigen, interrogez simultanément l'endpoint `/api/v1/leboncoin/search` et l'endpoint `/api/v1/kleinanzeigen/search` avec des URLs de recherche structurées. Cette approche alimente un tableau comparatif avec les données brutes `price`, `title` et `location` retournées par chaque source, sans recréer manuellement les filtres côté serveur.
Sommaire
Pour interroger nos endpoints LeBonDeal API, vous devez disposer d’une clé d’authentification valide. Celle-ci se génère exclusivement depuis l’onglet « Clés API » de votre tableau de bord. Notez que la clé n’est affichée qu’une seule fois lors de sa création ; en cas de perte, il est impératif de la révoquer et d’en générer une nouvelle.
L’authentification s’effectue via l’en-tête HTTP Authorization. Vous devez transmettre votre clé au format suivant : Authorization: Bearer YOUR_API_KEY
Remplacez systématiquement YOUR_API_KEY par votre propre secret. L’absence de cet en-tête, ou la présentation d’une clé invalide ou révoquée, déclenchera une erreur HTTP 401 (unauthorized) et bloquera l’exécution de vos requêtes. Il est formellement déconseillé d’intégrer cette clé dans du code front-end (JavaScript navigateur), car elle serait alors exposée publiquement.
Concernant la latence réseau, les serveurs peuvent mettre jusqu’à environ 40 secondes à répondre en cas d’incident temporaire nécessitant des tentatives silencieuses internes. Vous devez donc configurer votre client HTTP avec un timeout minimal de 45 secondes pour éviter les interruptions prématurées.
Pour interroger efficacement l’API, vous devez fournir une URL de recherche valide copiée directement depuis votre navigateur sur le site source. L’architecture du service ne génère pas dynamiquement les requêtes ; elle lit et interprète la chaîne d’URL que vous lui transmettez via le paramètre url. Cette approche garantit que tous les filtres, catégories et tranches de prix configurés dans l’interface web sont respectés par le scraper.
Chaque marketplace impose une structure URL spécifique qu’il convient de respecter strictement :
https://www.leboncoin.fr/recherche?, suivie des paramètres (catégorie, localisation). Le champ /search supporte un paramètre optionnel page pour paginer les résultats.https://www.kleinanzeigen.de/s-. Les liens vers des fiches individuelles (/s-anzeige/) sont refusés et génèrent une erreur 400 invalid_url.L’URL doit être correctement encodée si elle contient des caractères spéciaux. Une fois la recherche validée dans votre navigateur, copiez l’intégralité de la barre d’adresse. Évitez de modifier manuellement les paramètres critiques sans connaître leur impact sur le parsing côté serveur.
Le script Python ci-dessous illustre l'appel simultané aux endpoints Leboncoin et Kleinanzeigen via notre API. Il récupère les premières pages de résultats, extrait le champ price brut et affiche un tableau comparatif simple. La normalisation complète (conversion EUR/CHF ou ajustement TVA) doit être implémentée côté client selon vos règles métier, car l'API renvoie la devise d'origine sans conversion automatique.
/s-... ou /recherche?...) et non une fiche annonce individuelle, sous peine de recevoir un code 400 invalid_url. Pour plus de détails sur les paramètres acceptés par chaque source, consultez la documentation technique.import os
import requests
BASE_URL = os.environ.get("LEBONDEAL_BASE_URL", "https://bot.lebondeal-bot.fr")
API_KEY = os.environ["LEBONDEAL_API_KEY"]
headers = {"Authorization": f"Bearer {API_KEY}"}
def fetch_listings(endpoint, url):
try:
resp = requests.get(f"{BASE_URL}{endpoint}", params={"url": url}, headers=headers, timeout=45)
if resp.status_code == 429:
print("Erreur : Limite de débit atteinte. Réessayez plus tard.")
return []
if resp.status_code != 200:
err = resp.json().get('error', 'unknown')
print(f"Erreur API ({resp.status_code}) {err}")
return []
data = resp.json()
# Kleinanzeigen renvoie 'items', Leboncoin renvoie 'ads'
key = "items" if "/kleinanzeigen/" in endpoint else "ads"
return [item for item in data.get(key, [])]
except Exception as e:
print(f"Erreur réseau : {e}")
return []
# URLs de recherche à adapter selon vos filtres cibles (FR et DE)
url_fr = "https://www.leboncoin.fr/recherche?category=1&text=laptop"
url_de = "https://www.kleinanzeigen.de/s-laptop/k0c276l3459+e180"
ads_fr = fetch_listings("/api/v1/leboncoin/search", url_fr)
ads_de = fetch_listings("/api/v1/kleinanzeigen/search", url_de)
print(f"\nComparaison de prix (FR vs DE)")
print("-" * 40)
# On compare les N premiers résultats communs ou on affiche séparément
max_len = max(len(ads_fr), len(ads_de))
for i in range(max_len):
fr_price = ads_fr[i].get('price', 'N/A') if i < len(ads_fr) else '-'
de_price = ads_de[i].get('price', 'N/A') if i < len(ads_de) else '-'
# Affichage brut : ne pas interpréter la devise sans logique externe
print(f"[{i+1}] FR: {fr_price} | DE: {de_price}")
print("\nNotez les champs credits_charged et credits_remaining dans resp.json() pour votre suivi.")
Ce code montre comment traiter différemment les clés retournées (ads vs items) selon l'endpoint utilisé. Il gère explicitement le timeout de 45 secondes requis par notre infrastructure et vérifie les codes d'erreur critiques avant de parser la réponse JSON.
Les données retournées par les deux API présentent des structures typologiques distinctes qu'il convient de normaliser avant tout traitement statistique ou comparaison directe. Pour l'API Leboncoin, le champ price est nativement un nombre (entier dans la majorité des cas observés). Vous pouvez donc utiliser directement cette valeur numérique pour vos calculs internes sans étape intermédiaire d'extraction.
En revanche, l'endpoint Kleinanzeigen (/api/v1/kleinanzeigen/search) renvoie systématiquement le prix sous forme de chaîne de caractères incluant le symbole monétaire et potentiellement des espaces (ex: "120 €"). Cette différence impose une étape de parsing côté client. Vous devez isoler la partie numérique de cette chaîne pour obtenir un type comparable à celui fourni par Leboncoin.
Voici les points techniques essentiels à prendre en compte :
null ou chaînes vides pour éviter des erreurs d'exécution lors de la conversion.price est bien un nombre dans tous les cas de figure.Pour vérifier la cohérence des données récupérées, consultez la documentation technique.
Consultez le tableau des tarifs et l'intégration technique sur notre page dédiée.
Découvrir l'API LeBonDealLire la documentationLa robustesse de votre script dépend d’une gestion correcte des réponses HTTP. Un code 401 avec le message unauthorized signale une clé absente, invalide ou révoquée ; vous devez régénérer votre identifiant via le tableau de bord. Le code 429 (rate_limited) indique que les limites de débit sont atteintes : attendez quelques secondes avant de relancer la requête avec un délai croissant, sans chercher d’en-tête spécifique dans l’entête HTTP.
Le timeout par défaut doit être supérieur à 45 secondes pour absorber les incidents temporaires côté serveur. Un code 503 (unexpected_error) peut survenir lors d’un incident persistant ou si la recherche est techniquement vide ; ces deux cas ne sont pas distinguables et n’entraînent aucune facturation de crédit, comme l’indique le champ credits_charged à 0.
<code>credits_charged</code> vaut 1 pour confirmer que la requête a été traitée, même en cas de réponse vide.Pour le scraping Leboncoin, l’absence du champ price dans une annonce valide est un cas normal à gérer. Pour les limites techniques et les plafonds, consultez la documentation officielle ou vos tarifs actuels sur le site LeBonDeal API.
Comment comparer les prix Leboncoin et Kleinanzeigen sur une même catégorie ?
Effectuez deux requêtes distinctes via l'API LeBonDeal en utilisant le paramètre `url` pour pointer vers les pages de résultats correspondantes sur chaque marketplace. Une fois les données récupérées, indexez les annonces par leur identifiant unique et comparez la valeur du champ `price` dans votre logique applicative.
Quelle est la différence entre le champ price de l'API Leboncoin et celle de Kleinanzeigen ?
Le champ `price` renvoyé par l'endpoint Leboncoin est un nombre numérique brut, tandis que celui de Kleinanzeigen est une chaîne incluant le symbole de devise (par exemple 120 €). Cette différence de format impose d'utiliser des parsers distincts ou de normaliser les valeurs avant tout calcul statistique.
Peut-on utiliser la même clé API pour interroger les deux marketplaces simultanément ?
Oui, une seule et unique clé génère le solde de crédits commun à toutes les APIs disponibles sur votre compte. Vous pouvez donc l'utiliser indifféremment pour Leboncoin et Kleinanzeigen sans configuration supplémentaire.
Que faire en cas d'erreur 503 lors du scraping de Kleinanzeigen ou Leboncoin ?
Une erreur 503 indique un incident temporaire persistant après tentatives internes ou une recherche légitimement vide, sans facturation des crédits. Attendez quelques secondes puis réessayez votre requête avec un délai croissant pour éviter les limitations de débit.
LeBonDeal
Bot Discord gratuit pour vos alertes Leboncoin, et API à la demande pour extraire des données Leboncoin, Vinted, Kleinanzeigen et Marktplaats en JSON.
© 2026 LeBonDeal — Tous droits réservés.