The Lead-Scoring Model

A 0–100 score that tells you who to call first, and why each weight is what it is

6 min read

Worked example below uses an invented business, city, and phone number for teaching only — not a real lead, not drawn from any real list.


Calling down a list in the order it happens to export is calling in random order. A score fixes that — but only if you understand why it's built the way it is, because a score you don't trust is a score you'll quietly stop using the first time it disagrees with your gut.

1. The four things being weighed, and why

The model sums four factors that a lead-generation professional actually weighs, then subtracts negatives:

SCORE (0–100) = PAIN + VALUE + FIT + REACH − NEGATIVES

  • PAIN (up to ~32 points) — how strong is the web-status signal itself. This is weighted highest because it's the most direct evidence of the actual problem you solve. A business with a noindex tag or no site at all has a provable gap; a business with a merely dated-but-functional site has a much softer one.
  • VALUE (up to 30 points) — what does this category typically pay. A dental or legal practice supports a $1,500–3,000 build; a barber shop supports a $997 one. This isn't about which business deserves more — it's about matching your build effort to what the deal is actually worth, which is the entire logic behind the volume-play/value-play split in the next lesson.
  • FIT (flat 20 points) — is this an in-market category you're actually set up to serve. Kept flat and simple on purpose: it's a yes/no gate, not a spectrum, so it doesn't need graduated scoring.
  • REACH (up to 15 points) — does a local, direct number exist. A lead you can't actually reach a decision-maker through is worth far less regardless of how strong the other three factors are — reachability isn't a nice-to-have, it's the gate every other point has to pass through.

Grade bands: A = 85+ (build the demo before calling — call this week) · B = 70–84 (full call + email + SMS sequence) · C = 55–69 (light nurture only) · D = below 55 (skip).

2. The point table

PAIN (web status)                          VALUE (category ability-to-pay)
  No real site (placeholder/social)   28      Dentist / medical / legal      30
  Facebook-only                       30      Plumber / trades / auto        18
  Outdated real site                  32      Restaurant / food              16
  (noindex, or stale by the checklist  in §3) Barber / nails / salon         12
  Aging but real site                 20
  Dated but maintained template       12
  "No link shown" on one directory    20    FIT   = 20 flat (in-market category)
  Modern, responsive site              0    REACH = 15 if a local direct number exists, 3 if toll-free/out-of-area

NEGATIVES: modern site already in place −40 · no working contact method −15 · known franchise −25

Notice "No link shown on one directory" scores lower (20) than "Facebook-only" or "placeholder page" (28–30), even though on the surface all three mean "no real site." That's the accuracy caveat from Module 2 built directly into the scoring, not just mentioned as a warning: a single directory failing to show a link is the least reliable of the three signals, so it earns fewer points until you've personally verified it.

3. The outdated-site checklist (for anything that already has a website)

Each signal below is a proxy for something a real visitor — or Google itself — would actually notice, which is why it's worth checking rather than eyeballing a site and guessing "looks old":

SignalWhere to lookOutdated if…
Viewport meta tagPage <head>Absent or fixed-width — the site isn't mobile-responsive, and most local searches happen on a phone
Robots meta tagPage <head>Set to noindex — the site is functionally invisible on Google no matter how good it looks
Copyright yearFooterThree or more years stale
Generator/CMS tagPage <head>An old page-builder version or a hand-coded static file, both signs nobody has touched the site in years
Dead-tech tellsAnywhere on the pageDefunct social-platform links, Flash, no HTTPS

A site failing the viewport check or carrying noindex or showing a copyright year three-plus years old counts as Outdated = Yes. Free tools (a mobile-friendliness checker, a page-speed checker) do this per-URL without writing anything yourself; at real volume, most scraping platforms return the site URL so you can run a small script over the whole list at once.

4. Worked example — two invented leads, scored step by step

Lead 1 — "Marchetti's Auto Detail," a fictional shop in a fictional town. Facebook page only, no real site. Auto-services category. A local direct number on the listing. One recent review, no owner replies to reviews, not running ads, 34 total reviews.

PAIN   (Facebook-only)              = 30
VALUE  (auto/trades)                = 18
FIT    (in-market category)         = 20
REACH  (local direct number)        = 15
ENRICH (one recent review, +5;
         no owner replies, +0;
         no ads running, +0;
         under 100 reviews, +0)     =  5
NEGATIVES                           =  0
──────────────────────────────────────
TOTAL                               = 88  →  Grade A

An 88 clears the A threshold — build this one's demo before you dial.

Lead 2 — "Ridgeline Barber Co.," also fictional. No website link shown on a single directory listing (unverified signal), barber category, a toll-free number is the only contact listed, no recent review activity, no ads.

PAIN   ("no link shown," capped)    = 20
VALUE  (barber/salon)               = 12
FIT    (in-market category)         = 20
REACH  (toll-free/out-of-area)      =  3
ENRICH (nothing recent to add)      =  0
NEGATIVES                           =  0
──────────────────────────────────────
TOTAL                               = 55  →  Grade C, right at the boundary

A 55 lands exactly on the C/D line — light nurture at most, and worth the 20-second Google verification from Module 2 before you spend any real time on it, precisely because its PAIN score rests on the least reliable signal in the model.

5. The optional sharpening layer

Once you're pulling review data alongside the basics, add: a recent review (+5), the owner replying to reviews (+5), the business running paid ads (+6), and 100+ total reviews (+4). Review activity is worth adding because it now outranks a bare website check as a "this business is alive and paying attention" signal — an owner who replies to reviews is an owner who'll answer a text about their website, too.

Score =
  SWITCH(WebStatus, "none",30, "social",30, "placeholder",28,
                    "outdated",32, "aging",20, "maintained",12,
                    "modern",0, 20)                                    // PAIN
+ SWITCH(CategoryTier, "high",30, "midtrade",18, "food",16, "low",12, 15) // VALUE
+ 20                                                                     // FIT
+ IF(LocalDirectNumber, 15, 3)                                          // REACH
+ IF(RecentReview,5,0) + IF(OwnerReplies,5,0) + IF(RunsAds,6,0)
    + IF(Reviews>=100,4,0)                                             // ENRICH
- IF(ModernSiteAlready,40,0) - IF(Franchise,25,0) - IF(NoContact,15,0)  // NEGATIVES
→ cap 0–100
WAW · progress saved in this browser · sign in to sync across devices

Up next

Choosing Where to Focus

Reading the score distribution to decide how to split your week

3 min