Aktuelle Kleinanzeigen-Daten per API abrufen: Suche, Inseratdetails, Verkäufer, Kategorien und Standorte.
Markdown direkt einfügen — oder die URL an deine KI schicken.
Schnellstart
Mit der API rufst du aktuelle Kleinanzeigen-Daten direkt in deiner eigenen Anwendung ab: Suche, Inseratdetails, Verkäufer-Inserate, Kategorien und Standorte. Du arbeitest mit normalen HTTP-Requests und JSON-Antworten.
Was du brauchst
Einen aktiven Kleinanzeigen-Agent Account.
Einen API-Key aus deinem Dashboard.
Ausreichend Credits für die Anfragen, die du ausführen willst.
Jede Antwort hat dieselbe Grundstruktur. Bei einer erfolgreichen Suche findest du die Treffer unter data.ads und Informationen zur Seite unter data.meta.
request_id ist die ID der Anfrage. Gib sie bei Support-Fragen mit an, damit wir den Request schneller finden können.
Defaults
page startet bei 0. size ist standardmäßig 31 und maximal 100. Alle Parameter und Antwortfelder verwenden snake_case.
Authentifizierung
Dein API-Key identifiziert deinen Account und ordnet die verbrauchten Credits deinem Guthaben zu. Sende ihn bei jeder API-Anfrage im Header klaz_key.
klaz_key: klaz_live_...
API-Key verwalten
Du findest deinen API-Key im Dashboard. Der vollständige Key wird nur beim Erstellen oder Rotieren angezeigt. Danach siehst du aus Sicherheitsgründen nur noch eine maskierte Version.
Wenn ein Key versehentlich geteilt wurde, rotiere ihn im Dashboard. Der alte Key wird dadurch ungültig und du erhältst einen neuen.
Sicherer Einsatz
Speichere den Key in deiner Serverumgebung, zum Beispiel als Secret oder Environment Variable. Nutze ihn nicht direkt in öffentlichem Browser-Code und committe ihn nicht in dein Repository.
Sende den Key immer als Header. Verwende ihn nicht als Query-Parameter, weil URLs oft in Logs, Monitoring-Systemen oder Browser-Historien landen.
Typische Auth-Fehler
401 bedeutet, dass der Header fehlt oder der Key ungültig ist. Prüfe in diesem Fall den Headernamen klaz_key, den vollständigen Key-Wert und ob der Key im Dashboard rotiert wurde.
429 bedeutet, dass dein aktuelles Rate Limit erreicht wurde. Reduziere die Anfragefrequenz oder wähle einen Plan mit höherem Limit.
API Referenz
Diese Endpunkte sind für deine Anwendung gedacht. Alle Requests sind GET-Requests, benötigen den Header klaz_key und liefern JSON zurück.
Inserate suchen
GET /api/v2/kleinanzeigen/search
Nutze diesen Endpoint für Suchseiten, Preisvergleiche, Monitoring oder Matching in deiner Anwendung.
Parameter:
q string: Suchbegriff.
page integer, Default 0: Ergebnis-Seite, startet bei 0.
size integer, Default 31: Ergebnisse pro Seite, maximal 100.
category_id string: Kleinanzeigen-Kategorie.
location_id string: Kleinanzeigen-Standort. Nicht zusammen mit latitude und longitude verwenden.
distance string: Umkreis in Kilometern.
min_price integer: Mindestpreis.
max_price integer: Höchstpreis.
picture_required boolean: Nur Inserate mit Bildern.
buy_now_only boolean: Nur Direktkauf-Inserate.
shippable boolean: Nur Inserate mit Versand.
ad_type enum: OFFER oder WANTED.
poster_type enum: PRIVATE oder COMMERCIAL.
latitude number: Breitengrad. Nur zusammen mit longitude.
longitude number: Längengrad. Nur zusammen mit latitude.
attr[...] string: Kategorieattribute, zum Beispiel attr[condition]=new.
sort_type ist aktuell nicht verfügbar. Die API antwortet mit 400, wenn der Parameter gesendet wird.
Die Antwort enthält data.meta und data.ads. data.meta enthält page, size, total, exact_total, has_next_page, next_page und source; Paging bleibt damit auf unserer API-Oberfläche und enthält keine Upstream-URLs. Jedes Inserat kommt in einem konsistenten Format zurück:
Kleinanzeigen liefert in Suchantworten oft keine user-id. seller.seller_id kann deshalb bei /searchnull sein; nutze GET /api/v2/kleinanzeigen/ads/:ad_id, wenn du die Verkäufer-ID zuverlässig brauchst.
Genau diese Filter kannst du auch für Webhooks verwenden. Wir fragen die
Live-Suche im gebuchten Intervall automatisch für dich ab und schicken dir
jedes passende Inserat genau einmal.
Inseratdetails abrufen
GET /api/v2/kleinanzeigen/ads/:ad_id
Parameter:
ad_id numeric string, erforderlich: Kleinanzeigen-Inserat-ID im Pfad.
include_views boolean, Default false: Lädt zusätzlich die Aufrufzahl und berechnet einen Extra-Credit.
seller_id string, erforderlich: Verkäufer-ID aus ad.seller.seller_id.
page integer, Default 0: Ergebnis-Seite.
size integer, Default 31: Ergebnisse pro Seite, maximal 100.
Die Antwort entspricht der Suchantwort mit data.meta und data.ads.
Kategorien
GET /api/v2/kleinanzeigen/categories
GET /api/v2/kleinanzeigen/categories/:category_id/metadata
GET /api/v2/kleinanzeigen/categories/:category_id/search-metadata
Nutze Kategorien, um Suchanfragen genauer einzugrenzen und passende Filter für deine Oberfläche zu bauen.
/categories liefert den Kategoriebaum. metadata liefert verfügbare Felder für eine Kategorie. search-metadata liefert Suchfilter und Attribute, die du für attr[...] verwenden kannst.
Nutze Standorte für Autocomplete, regionale Suchen und Umkreissuchen. Die Standortliste wird flach zurückgegeben, damit du sie direkt in Suchfeldern oder Matchern verwenden kannst.
Webhooks
Lass dir neue Inserate automatisch an deinen Server schicken, sobald sie auf
Kleinanzeigen erscheinen — passend zu deinen Filtern, im gewählten Intervall.
Jedes Inserat erreicht dich genau einmal pro Webhook. Auch wenn ein Inserat
noch tagelang in der Suche steht, schicken wir es nicht erneut.
Tarife
Webhooks haben ihr eigenes Abo. Dein API-Guthaben und dein Rate-Limit bleiben
davon unberührt.
Tarif
Intervall
Preis netto
Webhook Pulse
60 Sekunden
39 EUR / Monat
Webhook Flow
30 Sekunden
79 EUR / Monat
Webhook Stream
10 Sekunden
229 EUR / Monat
Webhook Realtime
3 Sekunden
749 EUR / Monat
Ein Abo entspricht einem aktiven Webhook mit einem Suchfilter und einer
Ziel-URL.
Filter
Webhooks nutzen genau die Filter, die du auch von der Live-Suche kennst:
GET /api/v2/kleinanzeigen/search
Verfügbar sind unter anderem q, category_id, location_id, distance,
min_price, max_price, picture_required, buy_now_only, shippable,
ad_type, poster_type, latitude, longitude sowie kategoriespezifische
attr[...]-Werte.
Lieferung
Sobald wir ein neues Inserat finden, schicken wir dir einen POST an deine
Ziel-URL.
Im Dashboard kannst du jederzeit eine Testlieferung auslösen. Sie ist signiert
wie eine echte Lieferung und enthält keine Inserate, damit du deinen Endpunkt
und die Signaturprüfung in Ruhe einspielen kannst.
Fehler, Credits und Limits
Die API soll für deine Anwendung vorhersehbar sein: ungültige Requests verbrauchen keine Credits, erfolgreiche Requests werden nach Aktion berechnet, und fehlgeschlagene Live-Anfragen werden automatisch erstattet.
Fehlerantwort
Jede Fehlerantwort enthält ein maschinenlesbares error_code und eine message für Menschen. Bei Validierungsfehlern listet errors die betroffenen Felder. Bei manchen Fehlern liefert data zusätzliche Hinweise (z. B. fehlende Credits oder weiterführende Links).
{
"success": false,
"error_code": "INVALID_PARAMETERS",
"message": "Invalid request parameters",
"errors": {
"min_price": ["min_price must be less than or equal to max_price"]
},
"request_id": "req_..."
}
Statuscodes
400: Ungültige Parameter, ungültige Pfad-ID oder ein vom Upstream zurückgewiesener Request.
401: klaz_key fehlt oder ist ungültig.
402: Nicht genug Credits.
404: Ressource wurde upstream nicht gefunden.
429: Planlimit erreicht oder Kleinanzeigen selbst hat das Limit ausgelöst.
500: Unerwarteter Serverfehler.
502: Kleinanzeigen hat abgelehnt oder ist temporär nicht verfügbar.
504: Timeout bei der Live-Anfrage.
Error Codes
Diskriminiere im Client auf error_code — die Codes sind stabil, während sich die message-Texte ändern können.
error_code
Status
Bedeutung
INVALID_PARAMETERS
400
Validierung fehlgeschlagen. errors enthält die Feldfehler.
INVALID_AUTH_CONTEXT
400
Auth-Header technisch fehlerhaft. Prüfe klaz_key.
API_KEY_MISSING
401
Kein klaz_key Header gesetzt. data.signup_url führt zur Anmeldung.
API_KEY_INVALID
401
Schlüssel unbekannt oder Account inaktiv. Neuen Schlüssel im Dashboard erzeugen.
INSUFFICIENT_CREDITS
402
Aktion zu teuer. data.required_credits und data.available_credits sind gesetzt; data.buy_credits_url und data.upgrade_url führen zur Abrechnung.
UPSTREAM_BAD_REQUEST
400
Kleinanzeigen hat den Request zurückgewiesen.
UPSTREAM_NOT_FOUND
404
Inserat, Verkäufer, Kategorie oder Standort existiert dort nicht (mehr).
UPSTREAM_RATE_LIMITED
429
Kleinanzeigen drosselt. Kurz warten und erneut versuchen — kein Plan-Upgrade nötig.
PLAN_RATE_LIMIT_EXCEEDED
429
Dein per-Minute-Limit ist erreicht. data.upgrade_url zeigt auf die Abrechnung.
INGRESS_RATE_LIMIT_EXCEEDED
429
Globales IP-Limit erreicht (sehr hoch angesetzt, normalerweise nur bei sehr aggressivem Traffic).
UPSTREAM_UNAVAILABLE
502
Kleinanzeigen ist gerade nicht erreichbar. Wird automatisch retryed.
UPSTREAM_TIMEOUT
504
Antwort kam nicht rechtzeitig. Erneut versuchen.
INTERNAL_ERROR
500
Unerwarteter Fehler bei uns. request_id mitsenden, wenn du Support kontaktierst.
Bei INSUFFICIENT_CREDITS enthält data die Credit-Zähler (required_credits, available_credits) plus buy_credits_url, upgrade_url, plans_url. Bei API_KEY_MISSING, API_KEY_INVALID und PLAN_RATE_LIMIT_EXCEEDED enthält data weiterführende URLs (signup_url, api_keys_url, docs_url, upgrade_url, plans_url), damit du Endnutzer:innen direkt zum richtigen Schritt schicken kannst.
Credit-Kosten
Kosten:
Live-Suche: 1 Credit.
Verkäufer-Inserate: 2 Credits.
Inseratdetails: 1 Credit.
Inseratstatus: 1 Credit.
Views zusätzlich laden: 1 Credit.
Kategorien: 1 Credit.
Kategorie-Metadaten: 1 Credit.
Standorte: 1 Credit.
include_views=true addiert den Views-Credit zur jeweiligen Anfrage. Ein Detailabruf mit Views kostet also 2 Credits, ein Statusabruf mit Views kostet 2 Credits.
Live-Daten
Die API liefert aktuelle Daten aus der Live-Abfrage. Sie ist nicht als historisches Archiv gedacht und liefert keine gespeicherten Suchergebnisse aus früheren Läufen.
Verbindung und Stabilität
Du musst keine Proxy-Daten, Cookies oder Kleinanzeigen-spezifische Verbindungseinstellungen konfigurieren. Wir kümmern uns um Routing, Timeouts, Normalisierung und retryfähige Verbindungsfehler.
Aktuelle Einschränkungen
Die erste v2-Version konzentriert sich auf Live-Abfragen. Gespeicherte Suchhistorie, Harvesting und Raw-Antworten sind nicht Teil dieser API. sort_type ist aktuell deaktiviert.