Zoho im FinTech-Einsatz: Kaskadierende UBO-Abfragen per API automatisieren
In Branchen wie FinTech, bei Zahlungsdienstleistern oder in der Rechtsberatung sind präzise und schnelle Compliance-Prüfungen unerlässlich. Die manuelle Recherche von Unternehmensstrukturen, Gesellschaftern und wirtschaftlich Berechtigten (Ultimate Beneficial Owners, UBOs) ist nicht nur zeitaufwendig, sondern auch fehleranfällig. Wenn dein operatives Geschäft in Zoho One abgebildet ist, stellt sich schnell die Frage: Wie kannst du diesen Prozess direkt in deinem System automatisieren? Genau hier liegt die Stärke von Zoho: die nahtlose Integration externer Datenquellen über APIs. Dieser Artikel zeigt dir, wie du dein Zoho CRM mit einer externen Handelsregister-API verbindest, um komplexe, sogar verschachtelte Firmenstrukturen auf Knopfdruck zu analysieren und rechtssichere Dokumente automatisiert abzulegen.
Praxisbeispiel: Die Herausforderung im KYC-Alltag
Stell dir einen typischen Onboarding-Prozess für einen neuen Geschäftskunden vor, zum Beispiel bei einem Zahlungsdienstleister. Bevor du eine Geschäftsbeziehung eingehen kannst, verlangt das Geldwäschegesetz (GwG) eine sorgfältige Prüfung (Due Diligence). Du musst wissen, wer die tatsächlichen Eigentümer und Kontrollpersonen deines Kunden sind. Der Prozess sieht oft so aus:
- Ein Mitarbeiter sucht manuell im Unternehmensregister nach der Firma.
- Er lädt den aktuellen Handelsregisterauszug und die Gesellschafterliste als PDF herunter.
- Er identifiziert die Gesellschafter. Ist einer der Gesellschafter wiederum eine Firma, beginnt der Prozess für diese Firma von vorn.
- Alle gefundenen Personen werden manuell als Kontakte oder in einem speziellen Modul im CRM angelegt.
- Die heruntergeladenen PDFs werden umständlich in die richtigen Ordner hochgeladen und mit dem Kunden-Account verknüpft.
Dieser manuelle Prozess dauert pro Kunde oft Stunden, ist monoton und birgt ein hohes Risiko für Flüchtigkeitsfehler. Das Ziel ist klar: Eine Automatisierung, die diesen gesamten Ablauf auf einen Klick reduziert, direkt aus dem Datensatz des Kunden in Zoho CRM heraus.
Schritt-für-Schritt: Die technische Umsetzung im Detail
Wir bauen eine Lösung, die per Custom Function in Zoho CRM eine externe API für Unternehmensdaten ansteuert. Als Datenspeicher für die offiziellen Dokumente nutzen wir Zoho WorkDrive, um das CRM schlank zu halten und eine saubere Dokumentenverwaltung zu gewährleisten.
1. Die Vorbereitung: Was du benötigst
- Zoho-Lizenzen: Du benötigst Zoho CRM in der Enterprise-Version, um die notwendige Anzahl an API-Aufrufen und die leistungsfähigen Deluge Custom Functions nutzen zu können. Zudem ist ein Zugang zu Zoho WorkDrive erforderlich.
- Handelsregister-API: Du brauchst einen Zugang zu einer API, die Unternehmensdaten bereitstellt. Beispiele hierfür sind Anbieter wie North Data, Implisense oder andere europäische „Open Registers“-Dienste. Wichtig ist, dass die API Endpunkte für Firmensuche, Gesellschafter/Owners, UBOs und den Abruf von Dokumenten (Handelsregisterauszug, Gesellschafterliste) bietet. Für diesen Guide gehen wir von einer fiktiven „CompanyData API“ aus.
- CRM-Anpassungen:
- Erstelle in deinem Firmen-Modul (z.B. „Accounts“) einen Button, der die Custom Function auslöst (z.B. „KYC-Prüfung starten“).
- Richte ein benutzerdefiniertes Modul „Wirtschaftlich Berechtigte“ ein, um die ermittelten Personen und Firmenanteile sauber zu speichern und mit dem Account zu verknüpfen.
- Lege eine Ordnerstruktur in Zoho WorkDrive an, z.B. einen Team-Ordner „Compliance“ mit Unterordnern für jeden Kunden.
2. Die Basis-Abfrage: Firmendaten per API suchen
Der erste Schritt ist eine Deluge Custom Function, die den Firmennamen aus dem CRM-Datensatz nimmt und an die API sendet. Da es oft zu leichten Abweichungen kommt (z.B. „Musterfirma GmbH & Co. KG“ vs. „Musterfirma GmbH und Co. KG“), muss die Funktion mit mehreren Ergebnissen umgehen können.
// Deluge Custom Function: "findCompanyInRegister"
// Argument: accountId (ID des Firmen-Datensatzes)
// Firmendaten aus dem CRM holen
accountDetails = zoho.crm.getRecordById("Accounts", accountId);
companyName = accountDetails.get("Account_Name");
apiUrl = "https://api.companydata.com/v1/search?name=" + companyName;
apiToken = "DEIN_API_SCHLUESSEL";
headers = {"Authorization":"Bearer " + apiToken};
// API aufrufen
response = invokeurl
[
url :apiUrl
type :GET
headers:headers
];
// Hier würde die Logik folgen, um dem Nutzer bei mehreren Treffern
// eine Auswahl zu präsentieren, z.B. über ein Popup.
// Fürs Erste nehmen wir an, wir haben einen eindeutigen Treffer.
companyRegisterId = response.get("data").get(0).get("id");
// ID für die nächsten Schritte zurückgeben
return companyRegisterId;
3. Gesellschafter und UBOs ermitteln
Mit der eindeutigen ID der Firma aus dem ersten Schritt rufen wir nun die Gesellschafter- und UBO-Informationen ab. Die API liefert uns eine Liste von Personen und Firmen mit ihren jeweiligen Anteilen.
// Teil der Custom Function: Gesellschafter abfragen und anlegen
// Argumente: accountId, companyRegisterId
ownersUrl = "https://api.companydata.com/v1/companies/" + companyRegisterId + "/owners";
apiToken = "DEIN_API_SCHLUESSEL";
headers = {"Authorization":"Bearer " + apiToken};
ownersResponse = invokeurl [ url :ownersUrl, type :GET, headers:headers ];
// Durch die Liste der Gesellschafter iterieren
for each owner in ownersResponse.get("data")
{
// Prüfen, ob der Gesellschafter eine natürliche Person oder eine Firma ist
if(owner.get("type") == "person")
{
// Datensatz im Modul "Wirtschaftlich Berechtigte" erstellen
beneficiaryMap = Map();
beneficiaryMap.put("Name", owner.get("firstName") + " " + owner.get("lastName"));
beneficiaryMap.put("Anteile_in_Prozent", owner.get("sharePercentage"));
beneficiaryMap.put("Verknuepfter_Account", accountId);
createResponse = zoho.crm.createRecord("Wirtschaftlich_Berechtigte", beneficiaryMap);
}
else if(owner.get("type") == "company")
{
// Hier kommt später die kaskadierende Abfrage ins Spiel!
// Zuerst legen wir nur den Datensatz an.
beneficiaryMap = Map();
beneficiaryMap.put("Name", owner.get("companyName"));
beneficiaryMap.put("Art", "Juristische Person");
beneficiaryMap.put("Verknuepfter_Account", accountId);
createResponse = zoho.crm.createRecord("Wirtschaftlich_Berechtigte", beneficiaryMap);
// TODO: Hier die rekursive Funktion für diese neue Firma aufrufen
// recursiveCompanyId = owner.get("registerId");
// invoke function: thisapp.startKycCheck(recursiveCompanyId);
}
}
4. Dokumente abrufen und in Zoho WorkDrive speichern
Das reine Speichern von Daten reicht nicht aus, für die Compliance benötigst du die offiziellen Dokumente. Diese rufen wir ebenfalls per API ab und laden sie direkt in den richtigen Zoho WorkDrive Ordner hoch. Das hält dein CRM sauber und nutzt die Stärken von WorkDrive als zentrales Dokumentenmanagementsystem.
// Teil der Custom Function: Handelsregisterauszug holen und speichern
// Argumente: accountId, companyRegisterId, companyName
// Zuerst den richtigen WorkDrive-Ordner finden oder erstellen
// (Logik hier vereinfacht)
workdriveFolderId = "DEINE_WORKDRIVE_ORDNER_ID";
// API-Endpunkt für den Echtzeit-Handelsregisterauszug
docUrl = "https://api.companydata.com/v1/documents/realtime?id=" + companyRegisterId + "&type=current_printout";
apiToken = "DEIN_API_SCHLUESSEL";
headers = {"Authorization":"Bearer " + apiToken};
documentResponse = invokeurl [ url :docUrl, type :GET, headers:headers ];
// Datei in WorkDrive hochladen
uploadResponse = zoho.workdrive.uploadFile(documentResponse, workdriveFolderId, companyName + "_HRB_Auszug.pdf", true, "workdrive_connection_name");
// Den Share-Link der Datei holen und im CRM-Datensatz speichern
fileId = uploadResponse.get("data").get(0).get("attributes").get("resource_id");
shareLinkResponse = zoho.workdrive.createShareURL(fileId, "view");
shareLink = shareLinkResponse.get("data").get("attributes").get("share_url");
// Link im Account-Datensatz aktualisieren
updateMap = Map();
updateMap.put("Link_zum_HRB_Auszug", shareLink);
zoho.crm.updateRecord("Accounts", accountId, updateMap);
5. Die Königsdisziplin: Kaskadierende Abfragen automatisieren
Die größte Zeitersparnis liegt in der Automatisierung der Prüfung von verschachtelten Firmenstrukturen. Wenn ein Gesellschafter selbst eine GmbH ist, muss der Prozess für diese GmbH wiederholt werden. Dies lösen wir durch einen rekursiven Aufruf unserer Hauptfunktion.
Die Logik sieht so aus: Immer wenn unsere Funktion einen Gesellschafter vom Typ „company“ identifiziert, prüft sie, ob diese Firma bereits als Account im CRM existiert. Wenn nicht, legt sie einen neuen Account an und ruft sich selbst mit der ID dieses neuen Accounts erneut auf. Damit gräbt sich das System Schicht für Schicht durch die Beteiligungsstruktur, bis nur noch natürliche Personen übrig sind.
Konzeptioneller Code für die Rekursion:
// ... innerhalb der for-Schleife für Gesellschafter
else if(owner.get("type") == "company")
{
newCompanyName = owner.get("companyName");
// Prüfen, ob diese Firma schon im CRM ist
searchResponse = zoho.crm.searchRecords("Accounts", "(Account_Name:equals:" + newCompanyName + ")");
if(searchResponse.size() == 0)
{
// Firma existiert nicht -> neu anlegen
newAccountMap = Map();
newAccountMap.put("Account_Name", newCompanyName);
newAccountMap.put("Parent_Account", accountId); // Verknüpfung zur Mutterfirma
newAccount = zoho.crm.createRecord("Accounts", newAccountMap);
newAccountId = newAccount.get("id");
// !!! Rekursiver Aufruf für die neue Firma !!!
thisapp.startKycCheck(newAccountId);
}
}
Tipps und Best Practices
- Fehlerbehandlung und Fallbacks: API-Aufrufe können fehlschlagen. Nutze immer
try...catch-Blöcke in deinem Deluge-Skript. Was passiert, wenn die Echtzeit-Abfrage des Handelsregisters nicht verfügbar ist? Viele APIs bieten als Fallback ein „gespeichertes Dokument“ (stored document) an, das vielleicht ein paar Tage alt, aber besser als nichts ist. Implementiere eine solche Logik. - API-Kostenkontrolle: Jeder API-Aufruf kostet Geld. Protokolliere die Aufrufe und implementiere einen Mechanismus, der eine erneute Prüfung verhindert, wenn die letzte Prüfung erst wenige Tage alt ist. Die Ergebnisse kannst du in Zoho Analytics visualisieren, um die Kosten im Blick zu behalten.
- Skalierbarkeit und Limits: Komplexe Firmenstrukturen können dazu führen, dass deine Funktion sehr lange läuft und an die Ausführungslimits von Zoho stößt. Bei sehr tiefen Verschachtelungen solltest du erwägen, die Folgeaufgaben über Queued Functions (Teil von Zoho Catalyst) oder geplante Aktionen abzuarbeiten, anstatt alles synchron in einem Lauf zu erledigen.
- Benachrichtigungen: Nicht jeder Fall lässt sich zu 100% automatisieren. Wenn die API uneindeutige Ergebnisse liefert oder eine manuelle Prüfung erforderlich ist, sende automatisch eine Benachrichtigung an das zuständige Team – zum Beispiel über eine Nachricht in einem Zoho Cliq Channel.
Zusätzliche Integrationsmöglichkeiten im Zoho-Ökosystem
Diese Lösung ist nur der Anfang. Du kannst den Prozess mit weiteren Zoho-Apps anreichern:
- Zoho Flow: Für visuell orientierte Anwender kann Zoho Flow eine Alternative sein, um die verschiedenen Schritte zu orchestrieren, besonders wenn Daten zwischen mehreren Apps (CRM, WorkDrive, Books) ausgetauscht werden müssen.
- Zoho Sign: Sobald die KYC-Prüfung erfolgreich abgeschlossen ist, kann automatisch ein Vertrag oder eine Compliance-Bestätigung per Zoho Sign an den Kunden versendet werden.
- Zoho Projects: Bei besonders komplexen Fällen könnte automatisch ein Projektaufgabe für das Compliance-Team erstellt werden, um eine vertiefte manuelle Prüfung zu gewährleisten.
Fazit
Die Automatisierung von KYC- und UBO-Prüfungen ist ein Paradebeispiel dafür, wie Zoho über seine Standardfunktionen hinaus als leistungsstarke Entwicklungsplattform fungieren kann. Durch die clevere Kombination von Zoho CRM Custom Functions, der Zoho WorkDrive API und externen Datenanbietern verwandelst du einen zeitaufwendigen, manuellen Prozess in einen automatisierten Workflow. Das spart nicht nur hunderte von Arbeitsstunden, sondern erhöht auch die Datenqualität, stellt die Compliance sicher und verschafft dir einen entscheidenden Wettbewerbsvorteil.
Verwendete Zoho Apps: Zoho CRM, Zoho WorkDrive.
Erweiterungsmöglichkeiten mit: Zoho Analytics, Zoho Flow, Zoho Cliq, Zoho Sign.
