TL;DR
Lead Scoring ist eine Zahl oder ein Label (cold / warm / hot), das dem Vertrieb sagt, wen zuerst anzurufen — basierend auf Formulardaten, Verhalten auf der Website und Kampagnenquelle. Ein Kontaktformular in Next.js ist nicht nur mailto: — es ist eine Server Action, die den Lead in PostgreSQL auf Branchly Cloud speichert, CRM-Webhook sendet und generate_lead in GA4 feuert. Die Vertriebspipeline mappt Status (new → qualified → proposal → won) auf Automatisierung: Owner-Zuweisung, CRM-Task, Slack bei Score > 70. Im Folgenden: Datenmodell, Scoring-Regeln, Formular-Integration, Anti-Spam.
Für wen
- B2B-Unternehmen mit Dutzenden Formular-Anfragen monatlich — heiße Leads gehen in „info@" verloren
- Vertriebsteams ohne klare Prioritäten — jeder Lead sieht gleich aus
- Entwickler mit Next.js 15 Server Actions, DB- und CRM-Persistenz
- Marketing, das UTM / GA4 mit Lead-Qualität verbinden will, nicht nur Submit-Zahl
- Website-Betreiber nach DevStudio-Launch — Scoring ohne komplettes Rewrite
Keyword
lead scoring kontaktformular, vertriebspipeline crm, nextjs kontaktformular, server actions lead, crm webhook integration, b2b lead bewertung
Vom Formular zum Deal — Prozesskarte
Typischer Ablauf:
Website (UTM in Session) → Formular-Submit → Server-Validierung
→ Lead in Branchly (PostgreSQL)
→ Score + Segment
→ CRM-Webhook (HubSpot / Pipedrive / custom)
→ Benachrichtigung (E-Mail / Slack) bei hot
→ Pipeline: Status und VertriebsaufgabenDas Formular ist Systemeinstieg, nicht Ende. Ohne DB und CRM ist jeder Submit eine Mail im Shared Inbox — nicht messbar, leicht verloren.
Datenmodell — Lead und Score
Prisma auf Branchly (Auszug):
model Lead {
id String @id @default(cuid())
email String
company String?
budget String?
message String?
utmSource String?
utmCampaign String?
score Int @default(0)
segment LeadSegment @default(COLD)
status LeadStatus @default(NEW)
createdAt DateTime @default(now())
}Score als gewichtete Summe. Segment-Schwellen: 0–39 cold, 40–69 warm, 70+ hot — quartalsweise an Won-Conversion kalibrieren.
Scoring-Regeln — was bewerten
| Signal | Gewicht | Begründung |
|---|---|---|
| Budget „> 50k" | +30 | Investitionsbereitschaft |
| Firma ausgefüllt (nicht gmail) | +20 | B2B |
utm_medium=cpc |
+15 | Paid Intent |
Session /preise, /referenzen |
+10 je | Research |
| Nachricht > 200 Zeichen | +10 | Konkreter Bedarf |
| Free-Mail | −15 | Niedrigerer B2B-Wert |
Regeln in TypeScript oder Tabelle ScoringRule — letzteres für Marketing ohne Deploy, braucht Admin-UI.
Beispiel-Scoring-Funktion:
function computeLeadScore(input: LeadInput, sessionPages: string[]): number {
let score = 0;
if (input.company && !isFreeEmail(input.email)) score += 20;
if (input.budget === '50000+') score += 30;
if (input.utmMedium === 'cpc') score += 15;
if (sessionPages.includes('/preise')) score += 10;
if ((input.message?.length ?? 0) > 200) score += 10;
if (isFreeEmail(input.email)) score -= 15;
return Math.max(0, Math.min(100, score));
}Next.js — Server Action End-to-End
Server Action validiert (Zod), scored, speichert, sendet Webhook:
'use server';
import { z } from 'zod';
import { prisma } from '@/lib/prisma';
import { computeLeadScore } from '@/lib/scoring';
const schema = z.object({
email: z.string().email(),
company: z.string().optional(),
budget: z.enum(['unknown', '10000', '50000+']).optional(),
message: z.string().max(5000),
utmSource: z.string().optional(),
utmMedium: z.string().optional(),
});
export async function submitContactForm(formData: FormData) {
const parsed = schema.safeParse(Object.fromEntries(formData));
if (!parsed.success) return { ok: false, errors: parsed.error.flatten() };
const score = computeLeadScore(parsed.data, []);
const segment = score >= 70 ? 'HOT' : score >= 40 ? 'WARM' : 'COLD';
const lead = await prisma.lead.create({
data: { ...parsed.data, score, segment: segment as any, status: 'NEW' },
});
await fetch(process.env.CRM_WEBHOOK_URL!, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ leadId: lead.id, score, segment }),
});
return { ok: true, leadId: lead.id };
}Der Client übergibt UTMs aus sessionStorage oder Hidden Fields nach page_view. Hosting auf DevStudioIT Cloud mit CRM_WEBHOOK_URL und DATABASE_URL zu Branchly.
Vertriebspipeline im CRM
Kanban-Spalten = LeadStatus. Automatisierung:
| Status | Aktion |
|---|---|
| NEW + HOT | Senior AE, Slack in 15 Min |
| NEW + COLD | Nurturing, kein Anruf Tag 0 |
| CONTACTED | Task „Follow-up in 3 Tagen“ |
| QUALIFIED | Deal anlegen, Wert schätzen |
| PROPOSAL | Erinnerung nach 7 Tagen Stille |
| WON / LOST | Abschluss, optional GA4 Offline |
Webhook mit score und segment auf Custom Fields mappen. Eine Segment-Definition im Unternehmen.
Anti-Spam, DSGVO und Qualität
- Honeypot + Rate Limit (IP / Fingerprint) — weniger Rauschen im Scoring
- Double Opt-in für Newsletter vs Single Submit für Angebotsanfrage — unterschiedliche Einwilligungen in der Datenschutzerklärung
- Consent für Verarbeitung und Vertriebskontakt — Checkbox vor Submit
- Lead-Speicherung in der EU (Branchly) — Audit, wer auf Daten zugegriffen hat
Bot-getriebene Scores senken die Qualität — Leads mit gleicher IP > 5/h filtern.
GA4 und Marketing-Feedback
Event generate_lead mit lead_score, lead_segment (Custom Dimensions) vergleicht Kampagnen nach durchschnittlichem Score, nicht nur Submit-Anzahl. Eine günstigere CPC-Kampagne mit niedrigerem Durchschnitt kann schlechter sein als eine teure mit hot Leads.
FAQ
Wie viele Regeln am Start?
Fünf bis sieben. Nach 90 Tagen Schwellen an Won-Rate anpassen.
Ersetzt Scoring Qualifizierungsgespräch?
Nein — priorisiert nur die Queue. BANT/MEDDIC bleibt beim Vertrieb.
HubSpot vs eigene DB auf Branchly?
Klein: Branchly + HubSpot-Webhook. Groß: PostgreSQL als Source of Truth, bidirektionaler CRM-Sync.
Pipeline testen ohne CRM-Spam?
Staging auf Branchly + CRM-Sandbox (Staging-Artikel).
Formular, das Leads liefert?
- Kontakt — Formular, Scoring, CRM, Hosting aus einer Hand
- Next.js Server Actions — Kontaktformulare
- Unternehmenswebsites
Über den Autor
Wir bauen schnelle Websites, Web/Mobile-Apps, KI-Chatbots und Hosting — mit Fokus auf SEO und Conversion.
Empfohlene Links
Von Theorie zu Produktion — Branchly, Hosting-Stack und Referenzen.
