HubSpot zu Zoho CRM Migration mit Zoho DataPrep, API und Deluge-Tutorial

  • Beitrags-Autor:

Von HubSpot zu Zoho CRM: Eine praxisnahe Anleitung für die Datenmigration mit Zoho DataPrep

Ein Wechsel des CRM-Systems ist oft ein entscheidender Schritt für wachsende Unternehmen. Doch die Migration von Daten, insbesondere aus einem komplexen System wie HubSpot, birgt erhebliche Herausforderungen. Fehlerhafte Importe, verlorene Datenbeziehungen und eine schlechte Datenqualität können den gesamten Prozess zum Scheitern bringen. In diesem Artikel zeigen wir Dir, wie Du eine solche Migration strukturiert und erfolgreich mit Bordmitteln aus dem Zoho-Ökosystem, allen voran Zoho DataPrep, meisterst. Wir beleuchten, wie Du nicht nur Daten von A nach B verschiebst, sondern sie auf dem Weg bereinigst, transformierst und die volle Kontrolle über den Prozess behältst, indem Du die Power von APIs und gezielten Skripten nutzt.

Das Praxisbeispiel: Die Herausforderung einer komplexen CRM-Migration

Stell Dir ein typisches Szenario vor: Ein Unternehmen will von HubSpot zu Zoho CRM wechseln. Der HubSpot-Account ist über Jahre gewachsen und enthält Tausende von Unternehmen, Kontakten und Deals. Die Datenqualität ist, wie so oft, durchwachsen. Es gibt über 400 benutzerdefinierte Felder, von denen viele nicht mehr relevant sind. Bei einem Viertel der Kontakte fehlt der Nachname – ein Pflichtfeld in Zoho CRM. Telefonnummern sind in uneinheitlichen Formaten gespeichert. Die größte Herausforderung ist jedoch, die Beziehungen zwischen den Datensätzen zu erhalten: Welcher Kontakt gehört zu welchem Unternehmen? Und welche Deals sind mit welchen Kontakten verknüpft? Ein einfacher CSV-Export und -Import würde hier zu einem Datenchaos führen.

Zusätzlich muss die Zuständigkeit für jeden Datensatz korrekt übertragen werden. Die Benutzer-IDs aus HubSpot müssen den neuen Benutzer-IDs in Zoho CRM zugeordnet werden, damit jeder Vertriebsmitarbeiter seine eigenen Kunden behält. Dies erfordert eine präzise Transformation der Daten während des Migrationsprozesses.

Schritt-für-Schritt: Die Migration mit Zoho DataPrep meistern

Anstatt auf manuelle Exporte und komplexe Excel-Tabellen zu setzen, nutzen wir Zoho DataPrep, ein leistungsstarkes ETL-Tool (Extract, Transform, Load), das perfekt in die Zoho-Landschaft integriert ist.

Schritt 1: Die Verbindung herstellen – Ein unerwarteter Workaround

Der erste Schritt ist die direkte Verbindung von Zoho DataPrep mit der HubSpot API. DataPrep bietet hierfür einen nativen Konnektor. In der Praxis kann es hier jedoch zu Hürden kommen. Manchmal scheitert die Authentifizierung, weil die von DataPrep angeforderten API-Berechtigungen (Scopes) nicht exakt mit denen übereinstimmen, die HubSpot erwartet. Ein praktischer Trick ist hier, die generierte Authentifizierungs-URL manuell zu bearbeiten. Vergleiche sie mit einer funktionierenden URL aus einem anderen Tool, das bereits mit HubSpot verbunden ist (z.B. Zoho Analytics), und entferne oder korrigiere die fehlerhaften Scope-Parameter direkt im Browser. So lässt sich die Verbindung oft erfolgreich herstellen, auch wenn der Standardweg fehlschlägt. Ein klassischer Fall von „selbst ist der Entwickler“.

Schritt 2: Die Migrationsstrategie festlegen: Reihenfolge ist alles

Um die Beziehungen zwischen den Daten korrekt abzubilden, ist eine klare Reihenfolge beim Import unerlässlich. Importiere niemals alles gleichzeitig. Die bewährte Reihenfolge lautet:

  1. Unternehmen (Accounts): Sie sind die Basis. Jedes Unternehmen erhält beim Import in Zoho CRM eine eindeutige ID.
  2. Kontakte (Contacts): Beim Import der Kontakte kannst Du auf die bereits vorhandenen Unternehmen verweisen (über deren Namen oder die neue Zoho-ID), um die korrekte Zuordnung sicherzustellen.
  3. Deals (Potentials): Zuletzt importierst Du die Deals und verknüpfst sie sowohl mit den bereits importierten Unternehmen als auch mit den zugehörigen Kontakten.

Diese sequenzielle Vorgehensweise stellt sicher, dass alle Verknüpfungen sauber erstellt werden und Du keine verwaisten Datensätze erzeugst.

Schritt 3: Die Datenpipeline aufbauen – Minimal starten, schrittweise erweitern

Angesichts von über 400 Feldern aus HubSpot ist es ein Fehler, alles auf einmal migrieren zu wollen. Jedes zusätzliche Feld ist eine potenzielle Fehlerquelle. Die bessere Strategie:

  • Minimaler Datensatz: Beginne für jedes Modul (Unternehmen, Kontakte, Deals) mit einer Pipeline in Zoho DataPrep, die nur die absoluten Pflichtfelder enthält (z.B. Unternehmensname, Nachname des Kontakts).
  • Test-Import: Führe einen Test-Import mit diesem minimalen Datensatz durch. Wenn dieser erfolgreich ist, hast Du eine funktionierende Basis.
  • Inkrementelle Erweiterung: Füge nun schrittweise weitere wichtige Felder zur Pipeline hinzu. Teste den Import nach jeder größeren Änderung erneut. So kannst Du Fehlerquellen schnell identifizieren. Wenn ein Import fehlschlägt, nachdem Du zehn neue Felder hinzugefügt hast, liegt das Problem wahrscheinlich bei einem dieser zehn Felder.

Schritt 4: Felder mappen – Die Macht der API-Namen

Ein häufiger Fehler beim Daten-Mapping ist die Annahme, dass der Feldname im Frontend (z.B. „Telefon“) mit dem internen Namen des Systems übereinstimmt. Das ist fast nie der Fall. Zoho CRM verwendet für jedes Feld einen eindeutigen API-Namen.

Wenn Du in Zoho DataPrep eine Spalte aus Deiner HubSpot-Quelle (z.B. „Phone Number“) einem Zielfeld in Zoho zuordnen möchtest, musst Du den exakten API-Namen kennen. Diesen findest Du in Deinem Zoho CRM unter Einstellungen > Entwicklerbereich > APIs > API-Namen. Dort siehst Du, dass das Feld „Telefon“ den API-Namen „Phone“ hat. Benenne die Spalte in Deiner DataPrep-Pipeline exakt in „Phone“ um, damit die automatische Zuordnung funktioniert. Dies ist ein entscheidender, oft übersehener Schritt.

Schritt 5: Daten transformieren – User-IDs und Datenbereinigung

Hier zeigt Zoho DataPrep seine wahre Stärke. HubSpot liefert eine Spalte wie „Company Owner“ mit einer numerischen ID (z.B. `1234567`). Zoho CRM benötigt aber die Zoho-Benutzer-ID des entsprechenden Mitarbeiters, um den Datensatz korrekt zuzuordnen.

Die Lösung ist eine Mapping-Tabelle, die Du in einem Zoho Sheet oder Google Sheet anlegst:

Mitarbeiter HubSpot User ID Zoho User ID
Max Mustermann 1234567 987654321
Erika Mustermann 2345678 876543219

In Zoho DataPrep wendest Du dann eine „Ersetzen“-Transformation auf die Spalte „Owner“ an. Für jeden Mitarbeiter erstellst Du eine Regel: „Ersetze `1234567` durch `987654321`“. Dies ist mühsam, aber essenziell für eine korrekte Datenzuweisung.

Ebenso kannst Du hier Daten bereinigen: Formatiere Telefonnummern einheitlich, fülle fehlende Nachnamen mit einem Platzhalter (z.B. „Unbekannt“) oder konvertiere Datumsformate.

Schritt 6: Die strategische Entscheidung – Leads vs. Kontakte

Eine häufige Anforderung ist die Trennung von potenziellen Kunden (Leads) und bestehenden Kunden (Kontakte). Ein Kontakt ohne zugehörigen Deal könnte in Zoho als Lead behandelt werden. Dies während der Migration zu prüfen, ist extrem komplex und fehleranfällig. Ein besserer Weg:

  1. Alles als Kontakte importieren: Migriere zunächst alle Personen aus HubSpot als Kontakte in Zoho CRM.
  2. Skriptbasierte Umwandlung nach der Migration: Schreibe eine Custom Function in Deluge (Zohos Skriptsprache) in Zoho CRM. Dieses Skript läuft nach der Migration über alle Kontakte, prüft, ob der Kontakt oder sein zugehöriges Unternehmen einen Deal hat, und wandelt den Kontakt in einen Lead um, falls keine Geschäftsbeziehung existiert.

Dieser Ansatz trennt die komplexe Logik von der reinen Datenmigration und macht den gesamten Prozess robuster.

Codebeispiele: Deluge-Skript für die Lead-Konvertierung

Nachdem alle Daten in Zoho CRM sind, kannst Du das folgende Deluge-Skript als geplante Funktion ausführen, um „kalte“ Kontakte in Leads umzuwandeln.


// Deluge Skript zur Umwandlung von Kontakten ohne Deals in Leads
// Dieses Skript sollte als geplante Funktion in Zoho CRM ausgeführt werden

// Hole alle Kontakte, die in der letzten Woche erstellt wurden (um den Scope zu begrenzen)
response = zoho.crm.getRecords("Contacts", 1, 200, {"created_time":">=" + zoho.currentdate.addDay(-7).toString("yyyy-MM-dd'T'HH:mm:ss")});

for each contact in response
{
    hasDeal = false;
    contactId = contact.get("id");
    accountId = contact.get("Account_Name").get("id");

    // 1. Prüfe, ob der Kontakt direkt mit einem Deal verknüpft ist
    relatedDeals = zoho.crm.getRelatedRecords("Deals", "Contacts", contactId);
    if(relatedDeals.size() > 0)
    {
        hasDeal = true;
    }

    // 2. Wenn nicht, prüfe, ob das zugehörige Unternehmen einen Deal hat
    if(hasDeal == false && accountId != null)
    {
        accountDeals = zoho.crm.getRelatedRecords("Deals", "Accounts", accountId);
        if(accountDeals.size() > 0)
        {
            hasDeal = true;
        }
    }

    // 3. Wenn immer noch kein Deal gefunden wurde, wandle den Kontakt in einen Lead um
    if(hasDeal == false)
    {
        // Konvertiere den Kontakt zu einem Lead-Datensatz
        // Beachte: Dies erstellt einen neuen Lead. Der alte Kontakt muss danach gelöscht werden.
        // Die eigentliche Konvertierung von Contact -> Lead ist in Zoho CRM nicht direkt per API vorgesehen.
        // Der Standardweg ist Lead -> Contact.
        // Workaround: Neuen Lead mit Kontaktdaten erstellen und Kontakt löschen.
        
        leadMap = Map();
        leadMap.put("Last_Name", contact.get("Last_Name"));
        leadMap.put("First_Name", contact.get("First_Name"));
        leadMap.put("Email", contact.get("Email"));
        leadMap.put("Company", contact.get("Account_Name").get("name"));
        
        // Füge weitere Felder nach Bedarf hinzu...
        
        createLeadResponse = zoho.crm.createRecord("Leads", leadMap);
        info "Neuer Lead erstellt: " + createLeadResponse;

        // Optional: Lösche den ursprünglichen Kontakt
        // deleteResponse = zoho.crm.deleteRecord("Contacts", contactId);
        // info "Alter Kontakt gelöscht: " + deleteResponse;
    }
}

Tipps und Best Practices

  • Teste nach jeder Änderung: Führe nach jeder wesentlichen Anpassung in Deiner Zoho DataPrep-Pipeline einen Testlauf mit einer kleinen Datenmenge durch.
  • Dokumentiere Deine Mappings: Halte in einem zentralen Dokument (z.B. in Zoho WorkDrive oder Zoho Sheet) fest, welches HubSpot-Feld welchem Zoho-API-Namen zugeordnet wird. Dies ist bei komplexen Migrationen Gold wert.
  • Verstehe die APIs: Nimm Dir Zeit, die API-Dokumentation sowohl der Quelle (HubSpot) als auch des Ziels (Zoho CRM) zu verstehen. Das Wissen über API-Namen, Datenformate und Limits ist entscheidend.
  • Plane für schlechte Datenqualität: Gehe davon aus, dass Deine Quelldaten unvollständig oder fehlerhaft sind. Nutze die Transformationsregeln in Zoho DataPrep proaktiv, um Daten zu bereinigen, bevor sie in Deinem neuen CRM landen.
  • Denke über den Tellerrand hinaus: Dieser Prozess ist nicht auf HubSpot beschränkt. Dieselben Prinzipien und Werkzeuge kannst Du für Migrationen von anderen Systemen wie Salesforce, Pipedrive oder jedem System mit einer zugänglichen API oder Datenbank anwenden. Auch die Anbindung an ERP-Systeme wie SAP oder Microsoft Dynamics kann über ähnliche Wege erfolgen.

Fazit: Mehr als nur ein Datentransfer

Eine CRM-Migration von HubSpot zu Zoho CRM ist eine komplexe Aufgabe, aber mit der richtigen Strategie und den passenden Werkzeugen absolut beherrschbar. Die Kombination aus einer direkten API-Verbindung über Zoho DataPrep, einer durchdachten, sequenziellen Vorgehensweise und der nachträglichen Datenveredelung durch Deluge-Skripte verwandelt einen potenziellen Albtraum in ein kontrolliertes Projekt. Du verschiebst nicht nur Daten, sondern nutzt die Gelegenheit, Deine Datenqualität zu verbessern und Prozesse von Grund auf sauber aufzusetzen. Am Ende steht ein sauberes, performantes CRM-System, das als solide Basis für Dein zukünftiges Wachstum dient.

Verwendete Zoho Apps in diesem Beispiel: