L’API Kleinanzeigen permet d’extraire automatiquement les données des annonces allemandes via un appel HTTP GET authentifié. Ce mécanisme offre aux revendeurs techniques un accès structuré au marché germanophone, sans nécessiter la gestion de la complexité du rendu HTML brut côté client.
Sommaire
L’architecture de l’intégration avec l’écosystème allemand repose sur un point d’accès unique et spécifique. Pour extraire des données depuis Kleinanzeigen, vous devez interagir exclusivement avec le endpoint GET /api/v1/kleinanzeigen/search. Cette contrainte structurelle est fondamentale : contrairement à certaines APIs génériques qui permettent de passer par l’ID d’une annonce individuelle pour obtenir ses détails, cette solution ne traite que les pages de résultats globales.
Le mécanisme repose sur la réutilisation des URLs générées directement depuis le navigateur lors d’une recherche standard sur kleinanzeigen.de. L’API n’offre pas de moteur de filtrage natif (prix min/max, rayon géographique via coordonnées GPS). Votre script doit donc construire l’URL cible en configurant manuellement les paramètres dans la barre d’adresse du site source avant de transmettre cette chaîne au service.
Il est impératif de noter que le passage d’une URL pointant vers une fiche produit (/s-anzeige/...) entraînera un rejet immédiat par le serveur (code 400 invalid_url). L’endpoint accepte uniquement les URLs issues des pages de liste (/s-...). Cette limitation technique simplifie l’infrastructure côté client mais impose une étape préalable de navigation ou de construction d’URL si vous ne disposez pas déjà d’un flux de recherche structuré.
L’authentification repose sur l’en-tête Authorization: Bearer <clé>. La clé s’obtient via la page « Clés API » du tableau de bord et ne doit jamais être exposée côté client. Le paramètre url exige une URL de liste Kleinanzeigen valide ; les liens vers des annonces individuelles sont rejetés par l’endpoint.
import os
import requests
BASE_URL = os.environ.get("LEBONDEAL_BASE_URL", "https://bot.lebondeal-bot.fr")
API_KEY = os.environ["LEBONDEAL_API_KEY"]
ENDPOINT = "/api/v1/kleinanzeigen/search"
SEARCH_URL = os.environ.get("KLEINANZEIGEN_SEARCH_URL")
headers = {
"Authorization": f"Bearer {API_KEY}",
"Accept": "application/json"
}
params = {"url": SEARCH_URL}
try:
response = requests.get(
BASE_URL + ENDPOINT,
headers=headers,
params=params,
timeout=45
)
if response.status_code == 200:
data = response.json()
print(f"Annonces récupérées : {data['count']}")
elif response.status_code == 429:
print("Limite de débit atteinte. Réessayez plus tard.")
elif response.status_code == 503:
print("Incident serveur ou recherche vide. Aucune facture générée.")
else:
error_data = response.json()
raise Exception(f"Erreur {response.status_code}: {error_data['message']}")
except requests.exceptions.Timeout:
print("Requête trop longue (>45s). Vérifiez la connectivité ou l'URL source.")
Le code charge les identifiants depuis des variables d’environnement pour sécuriser le flux. Il envoie une requête GET vers l’endpoint avec un timeout de 45 secondes, nécessaire car le serveur peut effectuer des tentatives silencieuses pendant ce délai. La gestion des erreurs distingue explicitement les limites de débit (429) et les incidents temporaires ou recherches vides (503), ces derniers n’étant pas facturés. Pour plus de détails sur les endpoints disponibles, consultez la documentation Kleinanzeigen.
La réponse JSON de l’endpoint /api/v1/kleinanzeigen/search se structure autour d’un objet racine contenant les métadonnées de la requête et le tableau des résultats. Les champs count, credits_charged et credits_remaining permettent un suivi précis de l’exécution et du solde, sans nécessiter de traitement complexe.
Le cœur de la donnée réside dans le tableau items. Chaque élément expose des champs standardisés (id, title, url) ainsi que des champs spécifiques à la structure HTML source, qui exigent une validation stricte. Contrairement aux API de marketplaces européennes plus structurées, Kleinanzeigen ne garantit pas la présence systématique de toutes les informations pour chaque annonce.
Les champs price, location et published sont des chaînes de caractères dont la valeur peut être vide (null ou chaîne vide) selon le type d’annonce (par exemple, offres contre échange ou données manquantes dans le DOM). Le champ price inclut systématiquement l’unité monétaire ("120 €") ; il n’est pas formaté en nombre décimal.
Le champ published suit un format localisé allemand ("Heute, 09:14") qui n’est pas directement parsable en ISO 8601. Une librairie dédiée ou une logique spécifique est nécessaire pour convertir ces valeurs en timestamps exploitables par vos bases de données internes.
La gestion des erreurs est cruciale pour protéger votre solde de crédits lors de l’utilisation de l’API Kleinanzeigen. Contrairement à d’autres services, le serveur ne distingue pas toujours les résultats vides légitimes des échecs techniques persistants : une recherche sans résultat et un incident technique résolu automatiquement renvoient tous deux une erreur HTTP 503 unexpected_error, sans facturation de crédits. Il est donc impératif de traiter ces réponses comme non facturées pour éviter tout gaspillage inutile dans vos logs ou votre comptabilité interne.
Pour les erreurs d’authentification et de quota, le code retour indique clairement la nature du blocage :
Enfin, les erreurs 429 rate_limited signalent une saturation du débit (par clé ou IP). Le serveur n’envoie pas d’en-tête Retry-After. Vous devez donc implémenter une logique de backoff exponentiel simple : attendez quelques secondes puis réessayez. Notez qu’une requête peut prendre jusqu’à 40 secondes en cas de tentative silencieuse côté serveur ; prévoyez un timeout client minimum de 45 secondes pour ne pas interrompre prématurément des traitements légitimes mais longs.
credits_charged dans la réponse JSON pour confirmer qu’aucun crédit n’a été débité avant de considérer l’échec comme technique.Activez votre accès technique pour automatiser le sourcing en Allemagne dès aujourd'hui.
Découvrir l'API LeBonDealLire la documentationL'intégration des données extraites via l'API Kleinanzeigen dans un workflow industriel exige une étape critique de normalisation avant toute injection dans vos outils CRM ou ERP. Les champs retournés par l'endpoint ne sont pas toujours prêts à l'emploi : les dates (published) sont au format texte allemand (ex: "Heute") et non ISO, tandis que le prix est une chaîne brute incluant la devise.
Vous devez donc implémenter un parseur local pour harmoniser ces données. Par exemple, convertir "120 €" en objet monétaire standardisé ou interpréter les indicateurs temporels relatifs si votre système de gestion exige des timestamps absolus. Cette couche d'abstraction protège également vos outils internes contre l'évolution potentielle du formatage côté serveur.
Une fois normalisées, les données peuvent être injectées via :
Pour gérer la résilience, votre workflow doit anticiper les erreurs 503 (incident technique) et 429 (rate limit). Configurez des tentatives avec back-off exponentiel plutôt qu'un retry immédiat. Si vous souhaitez comparer cet endpoint à ceux disponibles pour d'autres marketplaces comme Leboncoin ou Vinted, consultez la documentation complète de l'API Kleinanzeigen pour comprendre les spécificités de chaque source.
Quelle est la méthode HTTP requise pour l'API Kleinanzeigen ?
L’API utilise exclusivement la méthode GET. Toute autre méthode sera rejetée par le serveur.
Comment gérer les erreurs 503 sans perdre de crédits ?
Une erreur 503 indique un incident temporaire ou une recherche vide et n'est jamais facturée. Réessayez votre requête ultérieurement ; cet échec ne consommera pas vos crédits.
Les champs price et location sont-ils toujours remplis ?
Non, ces champs peuvent être vides selon le type d'annonce renvoyé par le site. Votre code doit prévoir un traitement spécifique pour les valeurs manquantes ou nulles.
Peut-on extraire plusieurs pages de résultats avec cet endpoint ?
L’endpoint ne renvoie que la première page des résultats. Pour accéder aux suivantes, effectuez une nouvelle requête en modifiant l'URL source correspondante.
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.