CRM & ICP
Dieser Artikel erklärt das CRM-Modul von SpeamCore: was ein CRM-Profil ist, wie der Vertriebs-Status, Opportunities und der Aktivitäts-Verlauf zusammenspielen und wie das ICP-Scoring (Ideal Customer Profile) — teils automatisch, teils per KI-Website-Bewertung — funktioniert. Die operativen Seiten — die CRM-Übersicht und die CRM-Tabs auf Kunde/Kontakt/Standort — verweisen hierher.
Das Problem
Vertriebsinformationen (wer ist Lead, wer betreut, welche Branche, welcher Verlauf) landen sonst in Tabellen, Notizzetteln oder einem zweiten CRM-Tool — getrennt von den Stammdaten, mit denen operativ gearbeitet wird. Dadurch driften Daten auseinander und der Verlauf eines Kunden ist nie vollständig.
Lösung — eine Tracking-Schicht, kein Datensilo
SpeamCore legt kein zweites Kunden-Verzeichnis an. Stattdessen ist das CRM eine Schicht über den bestehenden Stammdaten: Pro Kunde, Kontakt oder Standort lässt sich das CRM-Tracking einschalten — dann entsteht genau ein CrmProfile zu diesem Datensatz und ein zusätzlicher Tab CRM.
Das CrmProfile ist polymorph an seinen Parent gebunden (parentType = Customer/Location/Contact, parentId) — siehe Polymorpher Parent-Pattern. Ein eindeutiger Index (parentType, parentId) stellt ein Profil pro Datensatz sicher.
Die Bausteine
CRM-Profil (CrmProfile)
Das Profil hält die Vertriebs-Stammdaten:
| Feld | Bedeutung |
|---|---|
crmStatus | Vertriebs-Status: lead → prospect → customer → inactive (Default lead) |
salesEmployeeId | zuständiger Vertriebsmitarbeiter (Owner) |
websiteUrl | Unternehmens-Website (wird aus der E-Mail-Domain vorbelegt) |
industryId | Branche (→ Branchen-Stammdaten) |
employeeSizeBand | Größenklasse (z. B. 1–10, 11–50, …) |
isIcp / icpReason | Ideal-Customer-Profile-Kennzeichen + Begründung |
icpScore / icpRationale | KI-Fit-Score 0–100 % + KI-Begründung |
aiAssessment | komplettes KI-Bewertungs-Objekt (JSON, siehe unten) |
Opportunities (CrmOpportunity)
Eine Opportunity verknüpft ein Profil mit einer angebotenen Leistung (serviceId) und einer Priorität (low/medium/high).
Aktivitäts-Timeline (CrmActivity)
Der Verlauf eines Datensatzes wird aus zwei Quellen zusammengeführt:
- Automatische Ereignisse (
category = system): Anlage des Datensatzes, Verkaufsbelege/Angebote, Briefe/ePost, sowie Audit-Einträge bei Feld-/Opportunity-/Social-Link-Änderungen und KI-Bewertungen. - Manuelle Einträge (
category = manual):call,note,meeting,email,reminder— mit Zeitpunkt (occurredAt, auch rückdatierbar), Titel/Text, Akteur, optionaler Wiedervorlage (remindAt) und Compliance-Markierung.
Jedes Ereignis kann per refType/refId auf das Ursprungs-Objekt verlinken (z. B. ein Angebot). Die Aggregation liefert GET /crm-timeline.
Branchen-Stammdaten (Industry)
Eine gepflegte Branchen-Liste (Schlüssel, deutsche/englische Bezeichnung, NACE-Abschnitt, Sortierung) — rund 90 Branchen sind vorbefüllt, Speam-relevante zuerst. Sie ist die Basis für das ICP-Scoring.
ICP — Ideal Customer Profile
SpeamCore bewertet, wie gut ein Datensatz zur eigenen Zielgruppe passt — auf zwei Wegen:
1. Automatisches ICP (Branchen-Abgleich)
In den CRM-Einstellungen pflegen Sie Zielbranchen (targetIndustries) und die eigenen Branchen (ownIndustries). Setzt jemand die industryId eines Profils auf eine Zielbranche, markiert ein Hook isIcp = true mit entsprechender Begründung.
2. KI-Website-Bewertung (POST /crm-profiles/:id/ai-assessment)
Auf Knopfdruck recherchiert ein KI-Lauf die hinterlegte Website per Web-Suche und liefert ein strukturiertes Ergebnis nach aiAssessment (JSON):
riskLevel · trustScore · companyAgeYears · onlineReputation ·
paymentSignals · redFlags[] · positives[] · recommendations[] ·
sources[] · suggestedIndustry · suggestedEmployeeSizeBand · suggestedSocialLinks[]
Daraus werden icpScore (0–100 %) und icpRationale gesetzt; leere Felder (Branche, Größe, Social-Links) werden vorgeschlagen, vorhandene nicht überschrieben. Jede Bewertung erzeugt ein Timeline-Ereignis.
Reaktionszeit-SLA
Die Einstellung crmResponseSlaHours legt fest, bis zu welcher Reaktionszeit eine Antwort als „im Ziel" gilt. Die CRM-Übersicht färbt die Reaktionszeit je Datensatz grün/rot gegen diese Schwelle.
Architektur / Komponenten
Backend
- Modelle
crm_profiles,crm_activities,crm_opportunities,industries. - Services
crmIcp(automatisches ICP),crmWebsiteAssessment(KI-Bewertung),crmTimeline(Aggregation),crmOverview(zentrale Analyse),crmAudit(protokolliert jede Änderung als Timeline-Ereignis).
Frontend
- Zentrale Seite
/crm(CrmOverviewPage), CRM-Tab (CrmTabContentmit Feldern, Timeline, Opportunities, Tracking-Toggle) auf Kunde/Kontakt/Standort.
Anti-Pattern (was NICHT machen)
- ❌ Das CRM als zweites Kunden-Verzeichnis behandeln — es ist eine Schicht über den Stammdaten, ein Profil je Datensatz.
- ❌ Von Opportunities eine gewichtete Forecast-Pipeline erwarten — sie sind Leistung + Priorität.
- ❌ Den KI-
icpScoreals Wahrheit nehmen — er ist eine Einschätzung aus Web-Recherche, kein Bonitätsnachweis.
KI-Chat-Anwendungen
Zeig mir alle Leads in einer Zielbranche, die seit 14 Tagen keinen Kontakt hatten.
Welche Kunden haben einen ICP-Score über 70 und noch keinen zugewiesenen Vertriebs-Owner?
Verwandte Doku
- CRM-Übersicht — die zentrale Seite und der CRM-Tab.
- Kunden / Kontakte / Standorte — Träger der CRM-Profile.
- Polymorpher Parent-Pattern — wie das Profil an seinen Datensatz gebunden ist.
- Berechtigungen verstehen (CASL).