Lead Scoring
Heuristic 0–10 score. File: src/enrichment/processors/scoring.ts. Not ML — additive weights based on which signals were extracted.
Source: docs/SYSTEM_OVERVIEW.md § Lead scoring.
Formula
let score = 0;
if (contacts.some(c => c.role_type === 'VD')) score += 2; // VD found
if (contacts.some(c => c.phone)) score += 1;
if (contacts.some(c => c.email)) score += 1;
if (contacts.length >= 3) score += 1;
if (domain) score += 1;
if (google_maps?.rating) score += 1;
if (market_intel?.growth_signals?.length) score += 1;
if (email_patterns_detected?.length) score += 0.5;
return Math.min(Math.round(score * 10) / 10, 10.0);Maximum
8.5 of 10 from the listed signals. Headroom reserved for future signals (NPS, financials).
Inputs
contacts[]from Crawlee Scraper / Firecrawlrole_typefrominferRoleType()(VD, Styrelseordförande, CFO, CTO, etc.)domainfrom Domain Discoverygoogle_mapsfrom Google Placesemail_patterns_detected(e.g.firstname.lastname@)
Caveat
Note
Heuristic, not validated against revenue or conversion. Works for POC ranking, not for ML-grade qualification.