From a weighted guess that buried good accounts to a model that earns confidence in our new business.
The first model was a weighted average. It shipped a real sprint - 125 accounts into reps' hands. It felt right.
It worked well enough to ship. But a weighted average has a hidden trap - and we didn't see it until we went looking.
"We have accounts with good ICP and good product usage that are still ranked low. Why?"
One look at the list and the instinct fired. That single question - not a dashboard, not an alert - is what kicked off the rebuild.
We pulled the bottom tiers apart. The signals leg wasn't adding nuance - it was collapsing, and dragging good accounts down with it.
# the "signals" leg, 0-100, across the universe ≤35 on signals .......... 319 / 715 (45%) = 0 (literally empty) ... 80 (11%) mean 42 · median 43 # of the 80 zeros… in our product (not silent) .. 31 strong ICP (≥80) ............. 21
When enrichment whiffed, the signals leg went to 0 - and a blank is not the same as "no intent." Real accounts got buried for a data gap.
initech.example.com ICP 92 product ESTABLISHED signals 0 → Tier 4 Watch hooli.example.com ICP 92 product EMERGING signals 0 → Tier 4 Watch # strong fit, real usage - sitting next to dead accounts
A missing signal is a data gap, not a verdict. No account should score zero on buying signal.
They only ever add. Their absence is never a penalty. They sharpen the ranking; they don't gatekeep it.
If they're ICP and in our product, that behavior outweighs any third-party signal by far.
Only the inputs that move the number. Filterable, auditable, defensible. Small on purpose.
Everything that makes the AI brief richer - news, funding, leadership, champions. Pulled once, read by the AI, never cluttering the score.
Fit earns a base, so nothing starts at zero. Product does the heavy lifting. Every buying signal only ever helps. A great product account ranks high before a single third-party signal shows up.
The additive base is what makes this work everywhere. A lead that isn't in the product scores +0 on the engine - no penalty - and rides fit plus whatever its channel can produce.
Loudest signal: sequence activation
Loudest signal: hand-raise (demo / form)
Loudest signal: trigger (funding, new VP)
A sequence-activating product lead and a freshly-funded outbound account compete on the same list.
Version one floated everything up: 616 of 715 climbed, nothing dropped, and silent accounts with no product reached Warm on fit alone. That's not a priority list. The data told us the base was too high, so we tuned it down.
# pass 1 (base 40-70) moved up 616 down 0 # silent accounts in Warm - wrong # pass 2 (base 35-55) moved up 363 down 5 # fit alone no longer earns Warm
The real anomalies climbed; the genuinely dead stayed down. initech 58.7 → 75.3 Warm · hooli 50 → 65.3 Warm. The 39 zeros still in Low were all silent - no usage, correctly parked.
mean score won 61.6 vs lost 45.3 (gap 16.3) Hot / Strike .... won 16 lost 0 # 100% precision at the top
"No signal" almost always means "we didn't find one yet" - not "no intent." Never let a data gap crater an account.
A weighted average lets one empty leg dominate. Adding boosts on a floor keeps a dealbreaker from hiding a good account.
Product usage predicts the buy better than any third-party intent score. Weight what the customer actually does.
Our first additive pass was over-generous. The output said so. We tuned instead of shipping a pretty number.
No single step did it. The judgment came from the floor; the forensics, the rebuild, and the self-check came from the machine. That loop is the method.
Never zero. Product-led. One score across every channel - validated against the only judge that matters: who we won and who we lost.