Lead Enrichment6 min read

How Lead Scoring Works

The full technical breakdown of how Trust Leads's composite lead score is calculated from multiple validation signals.

lead scorescoring algorithmsignalsweighting

The Scoring Model

Trust Leads's lead score is a rule-based composite score computed from a weighted set of validation signals. It is deliberately not a machine-learning model — this means it is fully deterministic, auditable, and predictable. You can understand exactly why any given contact received its score by examining the enrichment_flags column.

The score starts at a baseline of 100 and deductions are applied for each failing signal. Positive bonuses are added for extra-strong signals (such as a corporate email domain with a perfect MX record and a known format). The final score is clamped between 0 and 100.

Positive Score Signals

Several signals increase a contact's score when they are present and verified. A confirmed deliverable email (syntax valid + MX found + not disposable) contributes the largest positive weight. Name completeness (both first and last name present and non-numeric) adds to the score. A valid, normalised phone number adds to the score.

Domain-level signals can also boost the score: a corporate email domain (not a free provider like Gmail, Yahoo, or Outlook) suggests a real business contact and contributes a positive signal. DMARC and SPF records on the domain add a small bonus, indicating the domain is actively managed.

  • Email syntax valid: +15 points
  • Email MX record confirmed: +25 points
  • Email not disposable: +10 points
  • Corporate (non-free-provider) email domain: +10 points
  • Phone number valid and normalised: +10 points
  • First and last name present: +10 points
  • Domain has DMARC record: +5 points
  • Company name present: +5 points
  • Job title present: +5 points

Negative Score Signals

Negative signals are applied as deductions from the accumulated positive total. The harshest deductions are reserved for signals that strongly indicate a contact will never be useful: disposable email domains and completely invalid email syntax both cause large deductions.

Moderate deductions are applied for signals that significantly reduce deliverability or confidence: no MX record on the email domain, a suspicious TLD, a phone number in an unrecognised format. Small deductions apply to minor data quality issues like a missing job title or company name.

  • Disposable email domain: -50 points
  • Email syntax invalid: -40 points
  • No MX record on email domain: -25 points
  • Suspicious TLD: -20 points
  • Domain typo detected: -15 points
  • Invalid phone format: -10 points
  • Missing first or last name: -5 points each

Warning

Scores are computed at processing time and reflect the state of the domain's DNS at that moment. MX record lookups have a TTL — a domain that had MX records when you enriched it may not have them if you re-enrich the same contact 6 months later.

The enrichment_flags Column

Every contact gets an enrichment_flags column in the output CSV. This column contains a pipe-separated list of all the flags triggered during processing. The value 'OK' means no negative signals were found. Flags are in SCREAMING_SNAKE_CASE for easy programmatic parsing.

You can use the flags column to build targeted remediation workflows. For example, filter on DOMAIN_TYPO and send those contacts to a data hygiene workflow to verify the correct email. Filter on NO_MX_RECORD and route those to a manual research queue to find the contact on LinkedIn.

# Common enrichment flag values
OK                   — No issues found
INVALID_EMAIL        — Email fails syntax validation
NO_MX_RECORD         — Domain has no MX DNS records
DISPOSABLE_EMAIL     — Email domain is on disposable blocklist
DOMAIN_TYPO          — Possible typo in email domain detected
SUSPICIOUS_TLD       — Email domain uses a high-risk TLD
INVALID_PHONE        — Phone number present but fails format check
MISSING_PHONE        — No phone number in the input record
MISSING_NAME         — First or last name (or both) not present

Was this guide helpful?