Built GTM
SANITIZED BUILD RECEIPT · builtgtm.ai/builds
the company · Scoring Model · the evolution
the GTM system · How we got here · 2026

How we evolved the scoring model

From a weighted guess that buried good accounts to a model that earns confidence in our new business.

Weighted average Additive · never zero
Where we started

One number, three legs, a gate.

The first model was a weighted average. It shipped a real sprint - 125 accounts into reps' hands. It felt right.

Product
×0.40
+
ICP
×0.30
+
Signals
×0.30
×
email gate

It worked well enough to ship. But a weighted average has a hidden trap - and we didn't see it until we went looking.

The question that started it

"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.

The forensics - Tier 4 & 5

Nearly half the list had a near-empty signals leg.

We pulled the bottom tiers apart. The signals leg wasn't adding nuance - it was collapsing, and dragging good accounts down with it.

signals_distribution - 715 product leads
# 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
The smoking gun

A co-equal leg that hits zero zeroes 30% of the score.

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.

anomaly_check - buried by an empty leg
initech.example.com  ICP 92  product ESTABLISHED  signals 0Tier 4 Watch
hooli.example.com          ICP 92  product EMERGING     signals 0Tier 4 Watch
# strong fit, real usage - sitting next to dead accounts
Back to first principles

Three rules reset the whole model.

Nothing is zero

A missing signal is a data gap, not a verdict. No account should score zero on buying signal.

Signals are additive

They only ever add. Their absence is never a penalty. They sharpen the ranking; they don't gatekeep it.

Product is louder

If they're ICP and in our product, that behavior outweighs any third-party signal by far.

The reframe

Signals do two jobs. So we built two layers.

Score layer - lean

Only the inputs that move the number. Filterable, auditable, defensible. Small on purpose.

Context layer - greedy

Everything that makes the AI brief richer - news, funding, leadership, champions. Pulled once, read by the AI, never cluttering the score.

See the work → The Signal Library
The new model

Additive. Never zero. Product leads.

ICP base
40-70 · never 0
+
Product engine
up to +30 · loudest
+
Signal boosts
capped +20 · only add
×
gate

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.

Built for all of new business

One score - inbound, outbound, product.

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.

Product

Loudest signal: sequence activation

Inbound

Loudest signal: hand-raise (demo / form)

Outbound

Loudest signal: trigger (funding, new VP)

A sequence-activating product lead and a freshly-funded outbound account compete on the same list.

The honest moment

The first additive pass was too generous - and we caught it.

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.

tuning_pass - the catch
# 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
What the tuned model did

A real pyramid - and the right accounts climbed.

Strike
1 → 2
Hot
10 → 24
Warm
113 → 165
Watch
160 → 374
Low
421 → 140

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.

The judge - won vs lost

We tested it against the truth: 100 won, 60 lost.

0.775
AUC - a won account outranks a lost one - on fit + signals alone
0
lost accounts reached Hot or Strike. The top of the funnel is clean.
94%
of Warm+ accounts are won - vs a 62% base rate. 1.5× lift.
calib_additive.py - truth cohort
mean score   won 61.6   vs   lost 45.3     (gap 16.3)
Hot / Strike .... won 16   lost 0     # 100% precision at the top
What the model taught us

The lessons we'll carry forward.

A blank isn't a zero

"No signal" almost always means "we didn't find one yet" - not "no intent." Never let a data gap crater an account.

Additive beats averaged

A weighted average lets one empty leg dominate. Adding boosts on a floor keeps a dealbreaker from hiding a good account.

The loudest signal is their own behavior

Product usage predicts the buy better than any third-party intent score. Weight what the customer actually does.

Let the data correct you

Our first additive pass was over-generous. The output said so. We tuned instead of shipping a pretty number.

How we got here

Human instinct + AI execution, on a loop.

You noticed
"good accounts ranked low?"
AI dug
found the empty-leg flaw
You set principles
additive · never 0 · product louder
AI rebuilt & caught itself
tuned the over-generous pass
Validated together
won/lost, 0 lost at the top

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.

Where we are

A model we can trust
on new business.

Never zero. Product-led. One score across every channel - validated against the only judge that matters: who we won and who we lost.

01 / 17
Built GTM
A sanitized build receipt · company name and account examples generalized, the method left intact · builtgtm.ai