Die Architektur in einem Satz
Webhook empfängt Lead → OpenAI bewertet anhand strukturiertem JSON-Schema → n8n routet je nach Score in passenden CRM-Pipeline-Stage → Slack/Discord alarmiert bei A-Leads sofort, B-Leads täglich, C-Leads wöchentlich.
Das Ganze läuft in n8n mit ~12 Nodes, kostet pro Lead ~0,003 € OpenAI-Tokens und läuft idempotent – derselbe Lead wird auch bei doppeltem Webhook nur einmal verarbeitet.
Schritt 1: Webhook-Eingang mit Idempotency-Key
Der erste Knoten in n8n ist ein Webhook-Trigger. Wichtig: Pro eingehendem Request schreiben wir die Payload mitsamt einem deduplizierten Hash in eine Postgres-Tabelle lead_events – sonst verdoppelt sich Ihr Lead bei Webhook-Retries (passiert bei Typeform, Tally, HubSpot Forms, Cal.com regelmäßig).
// Function-Node in n8n: Idempotency-Hash bilden
const crypto = require("crypto");
const payload = $input.item.json;
const hash = crypto
.createHash("sha256")
.update(`${payload.email}:${payload.message}:${payload.timestamp}`)
.digest("hex");
return [{ json: { ...payload, idempotency_key: hash } }];
Anschließend ein Postgres-Node mit INSERT … ON CONFLICT (idempotency_key) DO NOTHING RETURNING id. Wenn nichts zurückkommt, war es ein Duplikat – Workflow stoppt sauber.
Schritt 2: OpenAI-Scoring mit strukturiertem Output
Statt „antworte mir bitte mit einer Zahl“ nutzen wir das OpenAI Structured Output-Feature mit JSON-Schema. Damit ist die Antwort garantiert valides JSON – kein Parser-Drama.
{
"model": "gpt-4o-mini",
"messages": [
{
"role": "system",
"content": "Du bist ein B2B-Sales-Qualifier. Bewerte den Lead anhand von Budget, Authority, Need, Timing (BANT) und gib einen Score 0-100 zurück. Begründung max. 2 Sätze."
},
{
"role": "user",
"content": "Lead-Daten: Firma=Acme GmbH, Branche=Maschinenbau, Mitarbeiter=120, Anfrage='Wir brauchen einen KI-Chatbot für Service'"
}
],
"response_format": {
"type": "json_schema",
"json_schema": {
"name": "lead_score",
"schema": {
"type": "object",
"properties": {
"score": { "type": "integer", "minimum": 0, "maximum": 100 },
"tier": { "type": "string", "enum": ["A", "B", "C", "D"] },
"reasoning": { "type": "string", "maxLength": 280 },
"next_action": { "type": "string" }
},
"required": ["score", "tier", "reasoning", "next_action"]
}
}
}
}
Output ist garantiert in der Form { "score": 78, "tier": "A", "reasoning": "Mittelständischer Maschinenbauer mit klarem KI-Need…", "next_action": "Discovery-Call binnen 24h" }. Direkt verwendbar in Folge-Nodes.
Schritt 3: CRM-Sync mit Stage-Mapping
Je nach tier wird der Lead in eine andere Pipeline-Stage geschoben. Beispiel HubSpot-API:
- Tier A (Score 80+): Stage „Hot Lead“ + Owner = Sales-Lead + Slack-Alert „🔥 A-Lead!“
- Tier B (60–79): Stage „Qualified“ + Owner = Sales-Pool + tägliche Slack-Zusammenfassung
- Tier C (40–59): Stage „Nurture“ + automatische E-Mail-Sequence (Resend / Postmark)
- Tier D (0–39): Stage „Disqualified“ + Logging zur späteren Re-Evaluation
Schritt 4: Multi-Channel-Alerting
Wir senden A-Leads sofort in einen Discord-Channel mit Embed (Score, Reasoning, Direktlink ins CRM). Sales klickt einmal und ist im richtigen Lead. B-Leads kommen in eine tägliche „Daily Digest“-Nachricht um 8 Uhr. C-Leads landen in einer Wochen-Zusammenfassung am Freitag.
Vorteil: Sales muss nicht alle 30 Minuten ins CRM gucken. Wenn der Discord-Ping kommt, ist es echt.
Was Sie damit konkret sparen
| Aufgabe (vorher manuell) | Aufwand pro Lead | Bei 50 Leads/Woche |
|---|---|---|
| Lead sichten & lesen | ~3 Min | 2,5 h/Woche |
| In CRM eintragen + Stage setzen | ~5 Min | 4,2 h/Woche |
| Owner zuweisen + Notiz | ~2 Min | 1,7 h/Woche |
| Folgeaktion entscheiden | ~3 Min | 2,5 h/Woche |
| Summe | ~13 Min | ~10,8 h/Woche |
Mit dem n8n-Workflow läuft das in ~6 Sekunden pro Lead. Sales bekommt nur noch die A- und B-Leads aktiv auf den Tisch – die anderen werden automatisch genurtured oder disqualifiziert.
Was schief gehen kann (und wie wir das abfangen)
- OpenAI-API-Ausfall: Workflow speichert Lead in
dead_letter_queue-Tabelle, schickt Slack-Alert an Ops, erneuter Versuch alle 5 Min via Cron-Trigger. - Score schwankt für ähnliche Leads: Temperature in OpenAI-Call auf
0, System-Prompt mit klaren BANT-Beispielen, regelmäßige Spot-Checks der A/D-Leads zur Kalibrierung. - CRM-API-Rate-Limits: n8n-Builtin-Throttling + Retry mit Exponential-Backoff.
- Datenschutz: Lead-Daten werden vor OpenAI-Call pseudonymisiert (E-Mail → Hash, Firmenname bleibt). DSGVO-Hinweis im Datenschutz, AVV mit OpenAI EU-Region. Mehr zur DSGVO-Architektur →
Setup-Kosten und ROI
Aufbau dieses Workflows als 09Clicks-Festpreis: 1.890 € einmalig. Inkludiert: n8n-Self-Hosting auf Vercel/Hetzner, OpenAI-Integration, CRM-Connector, Discord/Slack-Bot, DSGVO-Setup, Doku, Übergabe.
Laufende Kosten: ~5 €/Monat OpenAI-Tokens bei 200 Leads/Monat. n8n-Self-Hosting: 5 €/Monat Hetzner-VPS oder Vercel-Function. Kein SaaS-Lock-in.
ROI bei 10 h Sales-Zeit/Woche × 50 €/h = ~21.000 €/Jahr eingesparte Personalkosten pro Sales-Person. Break-even nach < 5 Wochen.
Verwandte Builds
Dieser Lead-Workflow ist ein Spoke aus dem 09Clicks-Automatisierungs-Pillar. Er kombiniert sich gut mit:
- Stripe-Webhook-Pipeline – sobald A-Lead zu Kunde wird, automatisches Onboarding
- KI-Workflow-Automatisierung Übersicht – größerer Kontext zu n8n + KI
- Renzom-Case – wo wir denselben Stack End-to-End in eigener Plattform laufen lassen