Skip to Content
CRM & PipelineLead Scoring

Lead Scoring

Lead scoring ranks leads by conversion likelihood so teams can prioritize outreach and qualification effort.

Goals

  • Rank leads in a consistent, explainable way
  • Route high-intent leads faster to human follow-up
  • Trigger automation (alerts, nurture enrollment, queue priority)
  • Improve qualified-to-converted rate over time

Scoring model

score_total is calculated on a 0-100 scale from weighted signals:

  • Fit signals (who the lead is)
  • Intent signals (what the lead has shown interest in)
  • Engagement signals (how the lead interacts with outreach)
  • Negative signals (inactive/bad-fit/spam indicators)

Formula:

score_total = clamp(0, 100, fit_score + intent_score + engagement_score - negative_score)

Suggested weights (v1.0)

CategoryWeightExample factors
Fit40Company size match, industry match, geography, job title
Intent35Pricing page visit, demo request, high-value form answers
Engagement25Email open/reply, call connected, repeat site visits
Negative-30 maxBounce, unsubscribe, invalid contact, spam pattern

Weights are tenant-configurable with sane defaults.

Score bands

BandRangeMeaning
hot70-100High-priority follow-up now
warm40-69Qualified for nurture or light-touch follow-up
cold0-39Low-priority; monitor or disqualify

Band thresholds are configurable per tenant.

Recalculation triggers

Score recalculation runs on:

  • Lead created
  • Enrichment completed
  • New activity logged (email_received, call, page intent event)
  • Status changed
  • Manual recompute request
  • Daily scheduled refresh for stale leads

Data model additions

leads (snapshot fields)

ColumnTypeNotes
score_totalinteger0-100 current score
score_bandenumcold | warm | hot
score_versionvarchar(50)Scoring rule version
score_updated_ontimestamptzLast recompute time

lead_score_factors

Stores explainability and audit trail for each recompute.

ColumnTypeNotes
tenant_iduuid FK → tenants
lead_iduuid FK → leads
model_versionvarchar(50)e.g. v1.0
factor_keyvarchar(100)e.g. job_title_match
factor_categoryenumfit | intent | engagement | negative
pointsintegerSigned points contribution
detailsjsonbRaw evidence for the factor
created_ontimestamptz

Indexes:

CREATE INDEX idx_lead_score_factors_lead ON lead_score_factors(tenant_id, lead_id, created_on DESC);

Workflow usage

  • Sort list views by score_total DESC
  • Auto-assign hot leads to owners
  • Trigger alerts when a lead crosses warm → hot
  • Auto-enroll warm leads into nurture when no reply after N days

Guardrails

  • Do not use protected-class attributes directly in scoring
  • Keep factor-level explanations visible to users
  • Version scoring rules and keep historical scores reproducible
  • Allow manual override with required reason logging

© 2026 Leadmetrics — Internal use only