https://insolvenzmonitor.online/api/v1/matchKundenbestand mit Insolvenzen abgleichen
Übermitteln Sie eine Liste Ihrer Kunden — Firmenname, optional PLZ, Handelsregisternummer oder Aktenzeichen — und erhalten Sie die Insolvenzbekanntmachungen zurück, die zu diesen Kunden passen. Bewertet mit derselben Matching-Engine, die auch das Insolvenzmonitor-Monitoring nutzt.
Gedacht für den Aufruf aus einem CRM oder ERP: eine breite Rückschau, wenn ein Kunde neu angelegt wird, danach ein kurzer täglicher Abgleich.
Zugang und Limits
Jede Anfrage braucht einen API-Schlüssel im Authorization-Header. Schlüssel erzeugen Sie im Dashboard unter API-Zugang; er wird nur einmal angezeigt — behandeln Sie ihn wie ein Passwort.
Authorization: Bearer imk_<ihr-api-schlüssel> Content-Type: application/json
| API Trial | API Standard | |
|---|---|---|
| Kunden je Anfrage | 5 | 50 |
| Historie | letzte 24 Monate | ab 01.01.2019 |
| Anfragen | 1.000 insgesamt, 10/Minute (hart) | unbegrenzt, 30/Minute (Soft-Limit) |
Jeder Aufruf zählt als eine Anfrage, unabhängig davon, wie viele Kunden er enthält. Auf API Standard wird bei Überschreiten des Minutenlimits nichts blockiert, nur der Header X-RateLimit-Burst: limited gesetzt.
Anfrage
{
"since": "2026-01-01", // optional
"min_confidence": 0.85, // optional
"customers": [ // Pflicht
{
"ref": "crm-1001", // optional, wird zurückgegeben
"name": "Muster Bau GmbH", // Pflicht
"zip": "50667", // optional, 5-stellige PLZ
"hr": "HRB 12345", // optional
"court": "Amtsgericht Köln",// optional
"case_number": "71 IN 123/26" // optional
}
]
}| Feld | Typ | Beschreibung |
|---|---|---|
| customers | Array | Pflicht. 1 bis 50 Kunden (API Trial: 5). Größere Bestände in mehreren Anfragen nacheinander senden. |
| customers[].name | String | Pflicht. Firmen- oder Personenname, so wie er bei Ihnen geführt wird. |
| customers[].ref | String | Optional. Ihre eigene Kennung, z. B. die CRM-ID. Kommt im Ergebnis unverändert zurück; ohne Angabe die Position im Array. |
| customers[].zip | String | Optional. Fünfstellige PLZ. Ist sie angegeben, muss sie im Text eines Namenstreffers vorkommen, sonst wird der Treffer verworfen (Stufe 4). Grenzt außerdem die Kandidaten ein. |
| customers[].hr | String | Optional. Handelsregisternummer in der Form „HRB 12345“ oder „HRA 12345“. Findet einen Schuldner nicht allein — name immer mitsenden (siehe Handelsregisternummern). |
| customers[].court | String | Optional. Insolvenzgericht, zusammen mit case_number oder hr für exakte Treffer. |
| customers[].case_number | String | Optional. Aktenzeichen des Verfahrens. |
| since | YYYY-MM-DD | Optional. Frühestes Veröffentlichungsdatum. Standard: heute − 30 Tage. Wird auf frühestens 01.01.2019 begrenzt (API Trial: letzte 24 Monate). Datumsangaben in der Zukunft werden abgelehnt. |
| min_confidence | Zahl | Optional. Mindestsicherheit eines Namenstreffers, 0,50 bis 1,00. Standard: 0,85. |
Antwort
Status 200 OK. results steht in derselben Reihenfolge wie customers.
{
"since": "2026-01-01",
"results": [
{
"ref": "crm-1001",
"status": "match",
"matches": [
{
"confidence": 0.972,
"match_basis": "fuzzy_name",
"debtor_name": "Muster Bau GmbH",
"location": "Köln",
"court": "Amtsgericht Köln",
"case_number": "71 IN 123/26",
"category": "Eröffnungen",
"publication_date": "2026-03-14",
"notice_text": "Amtsgericht Köln, Aktenzeichen 71 IN 123/26 ...",
"bundesland": "Nordrhein-Westfalen",
"branche": "Baugewerbe & Handwerk (Inkl. Baunebengewerbe)",
"insolvency_id": 1839201,
"company_page_url": "https://insolvenzmonitor.online/insolvenz/muster-bau-gmbh-koeln-hrb-12345"
}
]
},
{ "ref": "crm-1002", "status": "no_match", "matches": [] }
]
}| Feld | Typ | Beschreibung |
|---|---|---|
| since | String | Das tatsächlich angewandte Datum (nach Begrenzung auf 01.01.2019 bzw. die Trial-Historie). |
| results[].ref | String | Ihre Kennung, oder die Position im Array. |
| results[].status | "match" | "no_match" | Ob mindestens ein Treffer ≥ min_confidence gefunden wurde. |
| results[].matches | Array | Alle Treffer ≥ min_confidence, bester zuerst, je Bekanntmachung nur einmal. Bei no_match leer. |
| matches[].confidence | Zahl 0–1 | Trefferquote, auf drei Nachkommastellen gerundet. |
| matches[].match_basis | String | Auf welcher Stufe der Treffer entstand: exact_case_court, exact_registration_court, exact_registration oder fuzzy_name. |
| matches[].debtor_name | String | Schuldner laut Bekanntmachung. |
| matches[].location | String | Wohnsitz bzw. Sitz laut Bekanntmachung. |
| matches[].court | String | Insolvenzgericht. |
| matches[].case_number | String | Aktenzeichen. |
| matches[].category | String | Kategorie, z. B. Eröffnungen, Abweisungen mangels Masse, Sicherungsmaßnahmen. |
| matches[].publication_date | String | Veröffentlichungsdatum (YYYY-MM-DD). |
| matches[].notice_text | String | Vollständiger Bekanntmachungstext (siehe Datenschutz). |
| matches[].bundesland | String | null | Bundesland, falls bekannt. |
| matches[].branche | String | null | Branche, falls bekannt. |
| matches[].insolvency_id | Zahl | ID der Bekanntmachung, auch für GET /api/v1/insolvencies/:id. |
| matches[].company_page_url | String | null | Link zur öffentlichen Firmenseite, falls es eine gibt (siehe unten). |
Kein Kategoriefilter
Es kommen Treffer aller Kategorien zurück — Eröffnungen, Abweisungen, Sicherungsmaßnahmen, Verteilungsverzeichnisse, Aufhebungen. Filtern Sie bei Bedarf über category.
company_page_url
Gesetzt, wenn es zur Firma eine öffentliche Firmenseite gibt: Firmen mit Handelsregistereintrag und Verfahren seit 2024. Für Privatpersonen, Einzelunternehmen ohne Registereintrag und ältere Fälle ist der Wert null — das ist normal.
Datenschutz
notice_text enthält bei Privatpersonen Name, Anschrift und oft das Geburtsdatum — bitte DSGVO-konform verarbeiten. Ihre übermittelten Kundendaten verwenden wir nur für den Abgleich und speichern sie nicht.
So funktioniert der Abgleich
Für jeden Kunden wird zuerst eine Kandidatenmenge aus rund vier Millionen Bekanntmachungen gezogen, dann wird jeder Kandidat bewertet. Die Bewertung ist eine Kaskade; die erste zutreffende Stufe gewinnt.
Kandidatenauswahl
Kandidaten sind Bekanntmachungen ab since, deren Schuldnername mit einem Wort Ihres Kundennamens beginnt (Umlaute und ihre Schreibweise mit ae/oe/ue werden beide berücksichtigt), und — falls eine zip übergeben wurde — in deren Text diese PLZ vorkommt. Neueste zuerst, einige hundert je Kunde.
hr und case_number steuern die exakten Stufen, ersetzen die Namenssuche aber nicht.Normalisierung
- Namen: Umlaute und ß aufgelöst (ä→ae, ö→oe, ü→ue, ß→ss), Akzente entfernt, kleingeschrieben. „Müller“ und „Mueller“ sind gleich.
- Aktenzeichen und Handelsregisternummern: alle Leerzeichen entfernt, kleingeschrieben — „HRB 12345“ wird „hrb12345“.
- Gerichte: Leerzeichen zusammengefasst, kleingeschrieben; Umlaute werden hier nicht aufgelöst.
Die Kaskade
- 1Aktenzeichen und Gericht
Beide stimmen nach Normalisierung exakt überein.
1,00 · exact_case_court - 2Handelsregisternummer
Die Nummer stimmt überein; stimmt zusätzlich das Gericht, steigt die Sicherheit auf 1,00.
0,95 · exact_registration → 1,00 · exact_registration_court - 3Unscharfer Namensabgleich
Der Namensscore erreicht mindestens min_confidence und wird selbst zur Trefferquote.
Score · fuzzy_name - 4PLZ-Prüfung
Nur für Namenstreffer: Wurde eine zip übergeben, muss sie als eigenständige fünfstellige Zahl im Text stehen, sonst wird der Treffer verworfen. Kein Bonus, nur bestanden oder nicht. Stufen 1–2 werden nie gefiltert.
Filter
Stufe 3 im Detail
Firma mit Firma. Rechtsformen werden entfernt (GmbH, mbH, UG, AG, KG, OHG, GbR, e.V., e.K., Ltd. und weitere); Einzelbuchstaben werden zusammengezogen („A T U“ → „atu“), und eine exakt passende Abkürzung („A.T.U.“ = „ATU“) ergibt 1,00. Sonst müssen die Wörter Ihres Namens in dieser Reihenfolge im Schuldnernamen vorkommen: „Muster Bau“ passt zu „Muster Bau und Sanierung GmbH“, nicht aber zu „Musterbau GmbH“. Ein Wort gilt als gleich ab einer Ähnlichkeit von 88 von 100 und gleichem Anfangsbuchstaben (bis vier Zeichen exakt). Gleiche Rechtsformklasse auf beiden Seiten gibt +0,03.
Person mit Person. Die Nachnamen müssen übereinstimmen (Ähnlichkeit ab 90, gleicher Anfangsbuchstabe), jeder Vorname der kürzeren Seite muss auf der anderen vorkommen (Initialen über den Anfangsbuchstaben, längere Vornamen ab 95 — „Martina“ ist nicht „Martin“). Fehlt auf einer Seite der Vorname, zählt der Nachname mit Faktor 0,85.
Firma mit Person passt nie. Als Firma gilt ein Schuldner mit Rechtsform im Namen oder mit „HRA/HRB <Nummer>“ im Text.
Ähnlichkeit bedeutet: normalisierte Indel-Ähnlichkeit (rapidfuzz fuzz.ratio), also 200 · LCS(a, b) / (len(a) + len(b)) mit LCS als längster gemeinsamer Teilfolge.
Handelsregisternummern
Die Suche läuft über den Namen; eine HR-Nummer allein bringt keinen Schuldner in die Kandidaten. Unter den gefundenen Kandidaten vergleicht Stufe 2 Ihre hr mit dem gespeicherten Registereintrag. Der ist oft mit dem Gericht davor gespeichert („Dortmund, HRB 29750“) — senden Sie die schlichte Form „HRB 29750“.
Beispiel
curl -sS -X POST "https://insolvenzmonitor.online/api/v1/match" \
-H "Authorization: Bearer imk_ihr_schluessel" \
-H "Content-Type: application/json" \
-d '{
"since": "2026-01-01",
"customers": [
{ "ref": "crm-1001", "name": "Muster Bau GmbH", "zip": "50667", "hr": "HRB 12345" },
{ "ref": "crm-1002", "name": "Beispiel Handel GmbH", "zip": "80331" }
]
}'Die Antwort hat die oben gezeigte Form: ein Eintrag je Kunde in results, mit status und den Treffern.
Fehler
Fehler haben die Form { "error": { "code": "…", "message": "…" } }.
| HTTP | Code | Bedeutung |
|---|---|---|
| 401 | MISSING_KEY | Kein API-Schlüssel im Authorization-Header |
| 401 | INVALID_KEY | Schlüssel unbekannt oder widerrufen |
| 403 | PLAN_EXPIRED | Kein aktiver Plan — Trial abgelaufen oder Abo beendet |
| 400 | INVALID_REQUEST | Ungültiges JSON, customers fehlt oder ist leer, Kunde ohne name, PLZ nicht fünfstellig, since ungültig oder in der Zukunft, min_confidence außerhalb des Bereichs |
| 400 | BATCH_TOO_LARGE | Mehr Kunden, als der Plan erlaubt (API Trial 5, API Standard 50) |
| 429 | QUOTA_EXCEEDED | Anfragekontingent aufgebraucht (nur API Trial) |
| 429 | RATE_LIMITED | Minutenlimit überschritten (nur API Trial) |
| 500 | INTERNAL_ERROR | Datenbankfehler — bitte später erneut versuchen |
Empfehlungen für die Praxis
- Neuer Kunde: ein einzelner Kunde,
sinceetwa ein Jahr zurück. - Täglicher Lauf: den aktiven Bestand in Paketen zu 50 senden,
since= heute − 5 Tage. Die Überlappung erfasst spät veröffentlichte Bekanntmachungen. - PLZ mitsenden: Ohne
ziperfolgt der Abgleich nur über den Namen, und gleichnamige Firmen aus anderen Orten kommen mit.hrundcase_numberzusätzlich, wann immer vorhanden. - Treffer prüfen: Vor einer automatischen Reaktion
debtor_name,locationundcategoryansehen — die Trefferquote ist eine Wahrscheinlichkeit, keine Gewissheit. - Liste soll im Haus bleiben? Dann laden Sie die Rohdaten über GET /api/v1/insolvencies und gleichen selbst ab.