Einheitliches Kundenprofil‑Schema für CRM, Abrechnung und Support
Erstelle ein einheitliches Kundenprofil‑Schema für CRM, Abrechnung und Support mit klaren Verantwortlichkeitsregeln, Dedupe‑Strategien und Integrations‑Mapping.

Warum Kundendaten über Tools verstreut sind (und warum das schadet)
„Ein Kunde“ heißt selten ein Datensatz. Im CRM ist es vielleicht eine Person (Lead oder Kontakt), die an ein Unternehmen (Account) gebunden ist. In der Abrechnung ist es die zahlende Einheit mit rechtlichem Namen, Steuerdaten und Rechnungen. Im Support ist es die Person, die das Ticket eröffnet hat – plus das Unternehmen, für das sie arbeitet.
Jedes Tool macht seinen Job und erfasst deshalb andere Details zu unterschiedlichen Zeitpunkten. Sales legt einen Kontakt von einer Visitenkarte an. Finance erstellt einen Billing‑Kunden aus einer Rechnungsanforderung. Support erstellt einen Requester aus einer E‑Mail. Das ist normal. Das Problem: Es entstehen separate Datensätze, die ähnlich aussehen, aber nicht wie ein einziger Kunde funktionieren.
Duplikate verstopfen nicht nur die Datenbank. Sie führen zu echten Fehlern. Existiert „Acme Inc“ zweimal in der Abrechnung, können Zahlungen auf einem Datensatz landen, während Rechnungen an den anderen gehen. Gibt es einen VIP zweimal im Support, übersehen Agenten frühere Eskalationen und stellen Fragen, die der Kunde bereits beantwortet hat.
Kundendaten splitten häufig, wenn:
- Datensätze über verschiedene Eingabepunkte erstellt werden (Formulare, E‑Mail, Importe)
- Namen leicht variieren (Acme, ACME, Acme Ltd) und Matching fehlschlägt
- Personen den Job, die E‑Mail oder Telefonnummer wechseln
- Eine Person für mehrere Teams oder Tochtergesellschaften kauft
- Merges in einem System passieren, aber nie in die anderen gelangen
Mit der Zeit führt das zu Drift: Systeme weichen still darüber ab, wie der korrekte Firmenname, der primäre Kontakt oder der aktive Status sind. Man bemerkt es normalerweise später, durch Rückerstattungen, verpasste Verlängerungen oder Support, der beim falschen Kunden landet.
Ein praktisches Single Customer Profile bedeutet nicht, CRM, Billing und Support durch eine einzige Datenbank zu ersetzen. Du wirst weiterhin mehrere Systeme haben. Ziel ist eine gemeinsame Sicht auf Identität und Beziehungen (Person ↔ Firma, Firma ↔ Billing‑Entität), damit Änderungen konsistent durchlaufen.
Definiere den Umfang deines „Single Profile“
Bevor du Tabellen entwirfst oder Sync‑Jobs baust, entscheide, was „single“ in deiner Organisation bedeutet. Ein Single Profile ist kein riesiger Datensatz, der alles enthält. Es ist eine Vereinbarung über:
- Welche Systeme im Umfang sind
- Welche Fragen das Profil beantworten muss
- Wie aktuell jeder Datenbereich sein muss
Beginne mit den Systemen, die du tatsächlich abgleichen wirst. Für viele Teams sind das CRM, Billing, Support, die Produkt‑User‑Datenbank und die vorhandene Integrationsschicht.
Definiere dann in einfachen Worten, was das vereinheitlichte Profil beantworten muss:
- Wer ist diese Person und zu welcher Firma gehört sie?
- Was hat sie gekauft und wie ist ihr aktueller Zahlungsstatus?
- Welche Probleme meldet sie, und sind welche dringend oder wiederkehrend?
- Wie sollen wir sie kontaktieren und was ist die Präferenz?
- Darf sie auf das Produkt zugreifen und mit welcher Rolle?
Sei strikt bei dem, was außerhalb des Umfangs bleibt. Viele Single‑Profile‑Projekte scheitern, weil sie stillschweigend zu einem Analytics‑ oder Marketing‑Umbau werden. Marketing‑Attribution, Ad‑Tracking, Enrichment und langfristige Verhaltensanalysen können später ergänzt werden. Sie sollten dein Kern‑Identitätsmodell nicht treiben.
Die Aktualität ist eine Scope‑Entscheidung, keine rein technische. Echtzeit‑Sync ist wichtig für Zugriffsänderungen (Sperrungen, Rollen), und für High‑Touch‑Support. Stündliche oder tägliche Syncs reichen oft für Rechnungsverlauf und Ticket‑Meta. Entscheide das pro Datenschnittstelle, nicht global.
Schreibe Datenschutz‑ und Aufbewahrungsgrenzen vorher fest: Welche personenbezogenen Daten dürfen gespeichert werden, wie lange und wo. Support‑Notizen können sensible Details enthalten, die nicht ins CRM fließen sollten. Abrechnungsdaten können gesetzliche Aufbewahrungspflichten haben.
Kern‑Entitäten: Person, Firma und wie Systeme sie nennen
Ein praktisches Schema beginnt mit zwei Basisentitäten: Firma (Company) und Person. Die meisten Teams haben diese bereits. Das Problem ist, dass jedes Tool andere Namen und Annahmen nutzt – hier entstehen Abweichungen.
Ein einfaches Basismodell, das sich leicht auf fast jeden Stack abbilden lässt (und später erweiterbar ist):
- Account (Company): das Unternehmen, an das du verkaufst. Auch Company, Organization oder Account genannt.
- Contact (Person): ein Individuum. Auch Person, User, Lead oder Requester genannt.
- Billing Customer: die zahlende Partei im Billing‑Tool (oft verbunden mit Zahlungsmethode und Steuerdaten).
- Subscription / Invoice: kommerzielle Objekte, die sich über die Zeit ändern. Halte sie getrennt vom Personen‑Datensatz.
- Support Ticket: der Konversationsfaden, der auf einen Requester (Person) und optional eine Organisation verweist.
Modelliere Beziehungen explizit. Ein Kontakt gehört normalerweise zu einem primären Account, braucht aber manchmal sekundäre Zuordnungen (z. B. ein Berater für mehrere Kunden). Erlaube mehrere E‑Mails und Telefonnummern pro Kontakt, markiere eine als primär und speichere die anderen als typisierte Alternativen (Arbeit, privat, mobil).
Billing kann einen „Kunden“ als Person darstellen, aber sicherer ist es oft, Billing Customer als eigene Entität zu behandeln, die an das Account gekoppelt ist, und dann Rechnungen und Subscriptions an Billing Customer zu hängen. So bleibt die Zahlungshistorie stabil, auch wenn einzelne Kontakte die Rolle wechseln.
Support‑Tools verwenden oft „Requester“ und „Organization“. Mappe Requester auf Contact und Organization auf Account, aber nimm nicht an, dass jeder Requester eine Organisation hat.
Plane Edge‑Cases früh ein:
- Shared Inboxes ([email protected]), die fake „Personen“ erzeugen
- Auftragnehmer, die Kontakte sein sollten, aber nicht als aktive Kunden gezählt werden
- Reseller, bei denen der Zahler nicht der Endnutzer ist
- Tochtergesellschaften, die separate Accounts brauchen, aber eine Parent‑Firma haben
System‑of‑record‑Entscheidungen auf Feldebene
Ein verantwortliches System ist der Ort, der ein Feld ändern darf. Alle anderen Systeme dürfen den Wert anzeigen, aber nicht überschreiben. Das wirkt strikt, verhindert jedoch stille Drift, wenn CRM, Billing und Support gleichzeitig „helfen“.
Triff die Entscheidung pro Feld, nicht pro System. Die meisten Teams sind schnell einig, sobald es dokumentiert ist.
| Feld | Verantwortliches System | Verhalten anderer Systeme | Konfliktregel |
|---|---|---|---|
| Primäre E‑Mail | CRM | Schreibgeschützt in Billing/Support | CRM gewinnt, außer E‑Mail ist in CRM unbestätigt und in Billing bestätigt |
| Rechnungsadresse | Billing | Schreibgeschützt in CRM/Support | Billing gewinnt; CRM bei nächstem Rechnungs-/Zahlungsereignis aktualisieren |
| Plan / Abonnementstatus | Billing | Schreibgeschützt anderswo | Billing gewinnt; bei Kündigung markiert Support, darf Plan nicht ändern |
| Support‑Priorität / SLA‑Tier | Support | Schreibgeschützt anderswo | Support gewinnt; CRM darf anzeigen, nicht ändern |
| Rechtlicher Firmenname | Billing (bei Rechnungsstellung) oder CRM (bei Lead) | Schreibgeschützt anderswo | Lead‑Phase: CRM gewinnt; nach erster Rechnung: Billing gewinnt |
Wenn Werte abweichen, vermeide „last write wins“. Das verdeckt Fehler. Nutze klare Regeln: Verifizierungsstatus schlägt Freitext, bezahlter Status schlägt Sales‑Notizen, „nach erster Rechnung“ schlägt „vor Kauf“. Falls ein Tiebreaker nötig ist, wähle eine Timestamp‑Quelle (z. B. Billing‑Ereigniszeit) und bleibe konsistent.
Mache Read‑Only vs. Writable‑Verhalten in deinen Integrationen real. Eine hilfreiche Vorgabe: Jedes System darf nur die Felder schreiben, die es besitzt, plus eine kleine Menge operativer Notizen, die niemals zurücksynchronisiert werden (z. B. interne Support‑Kommentare).
Entscheide, wo Merges passieren. Idealerweise werden Merges nur an einem Ort durchgeführt (oft CRM für Personen/Firmen, Billing für Accounts mit Zahlung). Andere Systeme sollten den Merge widerspiegeln, indem sie Mappings aktualisieren und alte IDs als „retired“ kennzeichnen.
ID‑Strategie: interne Customer‑ID und Cross‑System‑Mappings
Ein Single Customer Profile funktioniert am besten, wenn du Identität in drei ID‑Typen trennst: eine interne Customer‑ID, die du kontrollierst; die externen IDs jedes Tools; und „natürliche Schlüssel“ wie E‑Mail oder Domain, die nützlich, aber nicht garantiert sind.
Beginne mit einer stabilen internen Customer‑ID (z. B. UUID). Erstelle sie einmal, verwende sie nie wieder, und ändere sie niemals. Selbst bei Merge, Rebranding oder E‑Mail‑Wechsel bleibt diese interne ID der Anker für Reporting, Berechtigungen und Integrationen.
Externe IDs sind die IDs, die CRM, Billing und Support in ihren Datenbanken verwenden. Versuche nicht, die ID eines Systems universal zu machen. Speichere sie in einer dedizierten Mapping‑Tabelle, damit du einen internen Kunden über mehrere Datensätze und Migrationen hinweg verfolgen kannst.
Eine einfache Mapping‑Tabelle sieht oft so aus (PostgreSQL oder ähnlich):
- customer_id (intern, unveränderlich)
- system (crm | billing | support)
- external_id (die ID in diesem System)
- status (active | inactive)
- first_seen_at / last_seen_at
E‑Mail ist ein nützlicher natürlicher Schlüssel nur in engen Fällen. Sie kann Matches beim Onboarding vorschlagen, darf aber nicht dein Primärschlüssel sein: Shared Inboxes repräsentieren eine Firma, Personen wechseln oft Jobs in B2B, und Systeme gehen mit Aliassen unterschiedlich um.
Plane Soft Deletion und Audits ein. Wenn ein externer Datensatz entfernt oder gemerged wird, behalte die Mapping‑Zeile, markiere sie als inaktiv und speichere den Änderungszeitpunkt. Das erhält historische IDs für Streitfälle, Rückerstattungen und „Warum ist dieser Kunde verschwunden?“‑Untersuchungen.
Deduping‑Regeln, die in CRM, Billing und Support funktionieren
Deduplizierung ist zwei Aufgaben: Matching und Merging. Matching findet mögliche Duplikate. Merging ist eine Entscheidung, die Daten dauerhaft verändert. Trenne beides, damit du Matching feinjustieren kannst, ohne schlechte Merges zu erzeugen.
Beginne mit deterministischen Regeln. Das ist der sicherste Auto‑Merge‑Weg, weil er sich auf IDs stützt, die in allen Tools dasselbe bedeuten sollten:
- Dieselbe Billing Customer ID, die auf dieselbe interne Customer ID mappt
- Dieselbe Steuer‑ID oder VAT‑Nummer auf einem Firmenkonto
- Dieselbe Support‑Portal‑User‑ID (falls dein Support‑Tool eine ausstellt), gemappt auf dieselbe Person
- Dieselbe E‑Mailadresse auf einem Personen‑Datensatz, aber nur wenn die E‑Mail verifiziert ist
- Dieselbe Payment‑Method‑Fingerprint (nur wenn dein Billing‑Provider Stabilität garantiert)
Definiere dann „Needs review“-Regeln. Diese finden Drift gut, sind aber riskant für Auto‑Merges (Shared Inboxes, Tochtergesellschaften, Auftragnehmer):
- Ähnliche Namen plus gleiche Firmendomain ([email protected] und [email protected])
- Dieselbe Telefonnummer (besonders Hauptanschluss)
- Dieselbe Lieferadresse mit kleinen Formatunterschieden
- Varianten des Firmennamens (ACME Inc vs ACME Incorporated)
- Support‑Tickets aus derselben Domain, aber unterschiedlichen Kontakten
Setze eine Konfidenzschwelle und eine manuelle Review‑Queue. Beispiel: Auto‑Merge bei ≥ 0.95, Route 0.80–0.95 zur Prüfung, < 0.80 ignorieren. Die Review‑Queue sollte das Matching begründen, Werte nebeneinander anzeigen und eine einzelne Merge‑Aktion mit Undo‑Fenster bieten.
Nach einem Merge, tu nicht so, als hätte der alte Datensatz nie existiert. Leite alte IDs auf die überlebende interne Customer‑ID um, behalte Aliasse (alte E‑Mails, alte Firmennamen), und aktualisiere jede Cross‑System‑Mapping‑Zeile, damit zukünftige Syncs das Duplikat nicht neu erzeugen.
Beispiel: Billing hat „Acme LLC“ mit einer Steuer‑ID, CRM hat „ACME, LLC“ ohne diese, Support hat „Acme“ aus Tickets. Die Steuer‑ID löst Auto‑Merge für das Unternehmen aus. Ähnliche Kontakt‑E‑Mails gehen in manuelle Prüfung, bevor sie zusammengeführt werden.
Integration Mapping: Was wohin bewegt wird und bei welchem Trigger
Ein Single Customer Profile bleibt nur „single“, wenn du entscheidest, was wirklich bewegt werden muss. Alles zu synchronisieren wirkt sicher, erhöht aber Konflikte, Kosten und Drift.
Minimale Felder, die synchronisiert werden sollten (nicht alles)
Beginne mit dem kleinsten Satz, der jedes Tool handlungsfähig macht:
- Interne Customer‑ID und externe IDs (CRM‑ID, Billing‑ID, Support‑ID)
- Rechtlicher Name und Anzeigename (plus Firmenname bei B2B)
- Primäre E‑Mail und Telefon (plus Verifizierungsstatus)
- Account‑Status (active, past‑due, closed) und Abonnement‑Zusammenfassung
- Owner / Team‑Routing (Sales‑Owner oder Support‑Queue)
Behalte schnell wechselnde oder umfangreiche Daten lokal. Ticket‑Nachrichten bleiben im Support. Rechnungspositionen bleiben im Billing. Aktivitäts‑Timelines bleiben im CRM.
Mappe jedes Feld: Quelle, Ziel, Richtung, Frequenz
Schreibe die Zuordnung wie einen Vertrag nieder. Das verhindert Ping‑Pong‑Updates.
- E‑Mail: CRM -> Support (Echtzeit bei Änderung), CRM -> Billing (stündlich batch oder Echtzeit wenn unterstützt)
- Abonnementstatus: Billing -> CRM, Billing -> Support (Echtzeit bei Ereignissen)
- Firmenname: CRM -> Billing/Support (täglich oder bei Änderung, aber nur wenn Billing es braucht)
- Support‑Plan‑Tier: Billing -> Support (Echtzeit), optional Billing -> CRM (täglich)
- Primäres Telefon: CRM -> Support (bei Änderung), kein Rückschreiben, außer CRM erlaubt es
Definiere für jedes Feld erlaubte Formate (Groß-/Kleinschreibung, Whitespace, Telefonnummern‑Normalisierung), ob leere Werte überschreiben dürfen und was passiert, wenn zwei Systeme widersprechen.
Trigger: Die Momente, die zählen
Nutze Ereignis‑Trigger statt häufiger Full‑Sync‑Jobs. Typische Trigger: neuer Kunde erstellt, Subscription gestartet/erneuert, Ticket erstellt, E‑Mail geändert, Account geschlossen.
Wenn ein Update fehlschlägt, verstecke es nicht. Queue ausgehender Updates, nutze Exponential Backoff und setze ein maximales Retry‑Fenster (z. B. 24 Stunden), bevor das Ereignis in eine Dead‑Letter‑Queue zur Überprüfung wandert.
Führe ein Audit‑Log mit: interne Customer‑ID, Feldname, alter Wert, neuer Wert, Timestamp und Quellsystem.
Wie du Drift nach Go‑Live verhinderst
Ein Single Profile kann nach dem Launch wieder splitten. Drift beginnt oft klein: Eine Telefonnummer wird im Support korrigiert, Billing ändert einen rechtlichen Namen für eine Rechnung, CRM behält den alten Wert. Nach einem Monat vertraut niemand mehr dem Profil.
Drift kommt meist von partiellen Updates (nur ein System erhält die Änderung), manuellen Bearbeitungen an der falschen Stelle und veralteten Caches in Integrationen, die gestern’s Daten weiterkopieren. Die Lösung ist weniger „mehr Sync“ und mehr klare Regeln, wo Änderungen erlaubt sind.
Schreibsperren aufstellen (nur der Owner darf schreiben)
Für jedes kritische Feld wähle ein Besitzsystem und schütze es:
- Mach Nicht‑Besitzer‑Systeme für dieses Feld schreibgeschützt (Formulare ausblenden, Berechtigungen sperren).
- Falls UI‑Sperren nicht möglich sind, blockiere das Update in der Integrationsschicht und gib eine klare Fehlermeldung zurück.
- Füge Bearbeitungsanweisungen dort hinzu, wo Menschen arbeiten: „Adresse in Billing ändern, nicht im CRM.“
- Logge jeden abgewiesenen Schreibversuch mit wer was von wo versucht hat zu ändern.
Reconcile, verifizieren und gezielt backfillen
Auch mit Zäunen treten Abweichungen auf. Füge einen kleinen Reconcile‑Job hinzu, der Systeme vergleicht und tägliche/wöchentliche Mismatch‑Reports erzeugt. Fokus auf hoch‑wirksame Felder: rechtlicher Name, Rechnungsadresse, Steuer‑ID, primäre E‑Mail und Account‑Status.
Füge ein last_verified_at‑Timestamp für kritische Felder hinzu, getrennt von „last updated“. Eine Telefonnummer kann oft wechseln, aber „verifiziert“ sagt dir, wann jemand das bestätigt hat.
Entscheide, wie rückwirkende Änderungen gehandhabt werden. Wenn Billing den rechtlichen Firmennamen korrigiert, backfillst du alte Rechnungen, historische Support‑Tickets und frühere CRM‑Notizen? Schreibe pro Feld eine Regel: immer backfillen, nur für neue Datensätze backfillen oder nie backfillen. Ohne das „korrigieren“ sich Systeme gegenseitig für immer.
Schritt‑für‑Schritt: Schema bauen und sicher ausrollen
Definiere, wie „gut“ aussieht: ein Profil, das konsistent bleibt, wenn ein Vertriebsmitarbeiter CRM ändert, Billing eine Rechnung bucht oder Support Tickets merged.
Fundament kontrolliert aufbauen
Arbeite in dieser Reihenfolge, damit du kein Chaos ins Modell einbackst:
- Inventarisiere jedes kundenbezogene Feld in CRM, Billing und Support und weise pro Feld einen Owner zu.
- Entwirf die vereinheitlichten Tabellen: Customer (oder Account), Company/Account, Contact, Mapping (Cross‑System‑IDs) und Alias (alte Namen, E‑Mails, Domains).
- Lade Exporte in das vereinheitlichte Modell und führe Matching durch, um Kandidaten‑Duplikate zu erstellen (noch nicht auto‑mergen).
- Löse Duplikate, erstelle Mappings und sperre Edit‑Berechtigungen, sodass Felder nicht an drei Orten verändert werden können.
- Implementiere Sync‑Flows mit klaren Triggern (create, update, merge, cancel) und Monitoring für Fehler und Mismatches.
Führe einen Pilot in einem kleinen Segment durch, bevor du ausrollst. Wähle einen Bereich mit genug Unordnung, um sinnvoll zu testen (eine Region oder Produktlinie), aber klein genug, dass Fehler rückgängig gemacht werden können.
Rollout‑Tipps, die Nacharbeit vermeiden
Führe ein einfaches Änderungsprotokoll für jede Merge‑Entscheidung mit dem „Warum“, nicht nur dem „Was“. Das spart Zeit, wenn ein Merge später bestritten wird.
Definiere einen Rollback‑Plan vor Pilotstart. Beispiel: Wenn >1% der Profile falsch gematcht sind, Pause des Syncs, Wiederherstellung vom letzten sauberen Snapshot und erneutes Matching mit strengeren Regeln.
Realistisches Beispiel: ein Unternehmen, zwei Kontakte und unterschiedliche Datensätze
Acme Parts ist ein kleines B2B‑Kundenunternehmen. Zwei Personen interagieren mit dir: Maya (Operations) und Jordan (Finance). Finance möchte Rechnungen an eine gemeinsame Mailbox schicken: [email protected]. Innerhalb von drei Monaten gehen drei Support‑Tickets ein: zwei von Maya, eines von der gemeinsamen Billing‑Adresse.
Vor einem Single Customer Profile existiert derselbe reale Kunde dreifach:
- CRM: „Acme Parts“ als Lead, mit Maya als einzigem Kontakt ([email protected])
- Billing: Kunde „[email protected]“ mit Firmenname „Acme Parts LLC“ und einer Lieferadresse
- Support: Requester‑Datensätze für [email protected] und [email protected], plus Tickets ohne Referenz zum CRM‑Lead
Wende nun eine praktikable Dedupe‑Regel an: Firmen werden zusammengeführt, wenn rechtlicher Name + normalisierte Domain übereinstimmen (acmeparts.com), aber Kontakte werden nicht allein wegen gemeinsamer Firma gemerged. Maya und Jordan bleiben separate Kontakte unter einem Firmenaccount. Die gemeinsame Billing‑Mailbox wird als „billing contact“ Rolle behandelt, nicht als primäre Person.
So könnte Feld‑Besitz und Sync aussehen:
| Feld | Besitzt von (System of Record) | Gesynct nach | Hinweise |
|---|---|---|---|
| Rechtlicher Firmenname | Billing | CRM, Support | Billing ist meist der nächste an Steuer‑ und Rechnungsdaten |
| Plan / Abonnementstatus | Billing | CRM, Support | Vermeidet, dass Sales oder Support den Plan raten |
| Support‑Priorität / SLA‑Tier | Support | CRM | Support steuert Tag‑to‑Day‑Entitlement |
| Haupttelefon | CRM | Support | Sales aktualisiert das am häufigsten |
| Rechnungsadresse | Billing | CRM | Trenne evtl. Versand‑ und Rechnungsadresse, wenn beides nötig ist |
Was passiert, wenn Maya ihre E‑Mail von [email protected] auf [email protected] ändert und ein neues Ticket öffnet?
Support erhält das Ticket mit einer neuen Requester‑E‑Mail. Deine Identitätsregeln versuchen: (1) exakte E‑Mail‑Übereinstimmung, dann (2) verifiziertes Contact‑ID‑Mapping, dann (3) Firmen‑Match per Domain mit Needs‑Review‑Flag. Das System erstellt einen neuen Requester, hängt das Ticket aber an Acme Parts anhand der Domain. Eine interne Aufgabe bestätigt die E‑Mail‑Änderung. Nach Bestätigung wird Mayas Kontakt im CRM aktualisiert (Owner für Personendetails), und Support mappt den Requester auf dieselbe interne Contact‑ID. Die gemeinsame Billing‑Mailbox erhält weiterhin Rechnungen; das Unternehmen bleibt ein Account.
Checkliste und nächste Schritte
Bevor du „fertig“ rufst, prüfe die langweiligen Details. Die brechen zuerst und sind am einfachsten zu beheben, solange das Projekt noch klein ist.
Kurze Checkliste (Dinge, die Drift verhindern)
- IDs sind vollständig und konsistent. Jeder Kunden‑Datensatz hat deine interne Customer‑ID, und jedes verbundene Tool hat seine externe ID in der Mapping‑Tabelle.
- Jedes gemeinsame Feld hat einen Owner. Für jedes Feld, das du synchronisierst (rechtlicher Name, Rechnungs‑E‑Mail, Steuer‑ID, Plan, Status), gibt es ein erklärtes verantwortliches System und eine Richtung der Wahrheit.
- Dedupe ist rückgängig machbar. Du behältst Alias‑ und Merge‑Historie (alte E‑Mails, alte Firmennamen, frühere externe IDs) und kannst einen Merge zurücknehmen, ohne zu raten, was passiert ist.
- Sync‑Fehler werden gezielt gehandhabt. Es gibt Retries, fehlgeschlagene Events gehen in eine Dead‑Letter‑Queue oder Holding‑Tabelle, und ein Audit‑Log zeigt, wer was geändert hat und was gesendet wurde.
- Menschen haben eine sichere Override‑Möglichkeit. Support und Finance können „do not auto‑merge“ und „needs review“ flaggen, damit Edge‑Cases nicht ständig kaputtgemacht werden.
Nächste Schritte
Wähle einen realen Workflow und prototypisiere ihn End‑to‑End: „Neues Unternehmen meldet sich an, bezahlt die erste Rechnung, öffnet ein Support‑Ticket.“ Baue nur die minimalen Entitäten und Mappings, führe 20–50 reale Datensätze durch und messe, wie oft manuelle Prüfung nötig ist.
Wenn du das Datenmodell, Workflows und APIs schneller modellieren willst, ohne alles von Hand zu programmieren, kannst du das Schema in AppMaster (appmaster.io) prototypen. Konzentriere dich zuerst auf die Mapping‑Tabelle, Merge‑Historie und das Audit‑Log – das sind die Bausteine, die Identität stabil halten, wenn Integrationen wachsen.
FAQ
Ein Single Customer Profile ist eine gemeinsame Identitätsschicht, die dieselbe Person und Firma über CRM, Billing, Support und deine Produktdatenbank verbindet. Es ersetzt diese Tools nicht; es ermöglicht eine konsistente Antwort auf „Wer ist das?“ und „Welche Berechtigungen hat diese Person?“ ohne widersprüchliche Datensätze.
Beginne mit dem kleinsten Satz an Systemen, die den Betrieb wirklich antreiben: CRM, Billing, Support und deine Produkt-Nutzerdatenbank. Marketing und Analytics kommen später dazu, da sie den Umfang oft aufblähen und Identitätsregeln verkomplizieren, bevor Person-/Firma-Abgleiche stabil sind.
Modelliere zwei Basiseinheiten: Person und Company. Ergänze eine separate Einheit „Billing Customer“, die mit der Firma verknüpft ist, sowie Rechnungen und Abonnements, die an die Billing Customer hängen. So bleibt die Zahlungshistorie stabil, auch wenn Kontakte ihre Rolle oder E‑Mail ändern.
Treffe die Entscheidung pro Feld, nicht per „Master-System“ für alles. Übliche Defaults: CRM für primäre Kontaktdaten, Billing für rechtliche Namen, Adressen und Abonnementstatus, Support für SLA/Priorität. Anschließend machen Nicht‑Besitzsysteme diese Felder schreibgeschützt, um stille Drift zu verhindern.
Nutze klare Konfliktregeln auf Basis von Bedeutung, nicht „zuletzt geändert gewinnt“. Beispiel: verifizierte Daten schlagen unstrukturierte Texte, Billing‑Ereignisse schlagen Sales-Notizen für Planstatus, und „nach erster Rechnung“ entscheidet über den Besitz des rechtlichen Firmennamens. Schreibe die Regel nieder, damit sie konsistent anwendbar ist.
Lege eine interne, unveränderliche Customer‑ID (z. B. UUID) an und speichere die externen IDs jedes Tools in einer Mapping‑Tabelle, die durch diese interne ID geordnet ist. E‑Mails und Domains sind nützliche Hinweise, aber keine Primärschlüssel – Shared Inboxes, Aliase und Jobwechsel brechen Email‑basierte Matches.
Trenne Matching (Mögliche Duplikate finden) vom Merging (Daten dauerhaft zusammenführen). Nutze strikte, deterministische Regeln für Auto‑Merges (z. B. Steuer‑ID, verifizierte E‑Mail oder Mapping auf dieselbe Billing Customer ID) und leite unsichere Fälle (Namensähnlichkeit, Domain, Telefon) in eine manuelle Review‑Queue.
Verwende ereignisgesteuerte Trigger für relevante Momente: Abonnementwechsel, Kontoschließung, E‑Mail‑Änderung, neues Ticket. Synchronisiere nur die minimalen Felder, die jedes Tool für die tägliche Arbeit braucht, und belasse umfangreiche oder schnell wechselnde Daten (Tickettexte, Rechnungspositionen) im Quellsystem.
Setze Schreibsperren (write fences), sodass nur das verantwortliche System kritische Felder ändern kann, und protokolliere abgewiesene Schreibversuche, damit Prozesslücken sichtbar werden. Ergänze eine kleine Reconcile‑Routine für Schlüsselfelder und tracke last_verified_at, damit du weißt, was tatsächlich bestätigt wurde, nicht nur was zuletzt geändert wurde.
Du kannst das Schema in einer No‑Code‑Plattform wie AppMaster (appmaster.io) prototypen und später echten Backend‑Code generieren. Wichtig ist, dass Mapping‑Tabelle, Merge‑Historie und Audit‑Log früh modelliert werden – das sind die Elemente, die Identitätsstabilität wahren, wenn weitere Systeme und Edge‑Cases hinzukommen.


