Design an account score your team will actually trust.
Picks the signals that separate wins from losses, weights them fairly across channels, adds gates and escalators, and never scores a blank field as zero.
In plain English: “How should I weight these signals into one score?”
Inside: The signal picker, the channel-fairness rule, gates and escalators, coverage caps, and the tier bands.
Install it in one line, or paste it in.
~/.claude/skills/ and runs automatically when it is relevant.Connect your context. Set it to your motion.
it reads closed-won and closed-lost so the weights reflect what actually converts, not a guess.
it backtests the model against a real cohort before you trust it.
it scores on real signal coverage instead of assuming every field is filled.
This was built to be motion-agnostic. Set these to your business:
The model is yours. The skill's job is to make it fair, defensible, and honest about what it cannot see, not to impose someone else's weights.
| Set this | What it is | Default / Example |
|---|---|---|
| SIGNALS | the inputs you can actually see | firmographicproduct usageintentengagement |
| CHANNELS | the ways an account reaches you | inboundoutboundproduct-led |
| WEIGHTS | how much each signal counts | set by fitretuned against wins |
| GATES | hard rules that cap or disqualify | not-our-motionwrong regioncompetitor |
| ESCALATORS | signals that earn a top tier on their own | a dominanthigh-intent signal |
| TIERS | the bands you route on | Hot / Warm / Nurture / DQor your own |
| COVERAGE_RULE | how missing data is handled | cap the scorenever score blanks as zero |
Everything the skill does, in full.
Designs the scoring model your team stack-ranks on, and makes it defensible. It helps you pick the signals that actually separate a good account from a bad one, weight them fairly so an inbound account and an outbound account can each earn their score, add the gates and escalators that stop junk from ranking high, and set the tier bands. The output is a scorer spec with the logic written down, so the score has a reason on every row instead of a black box nobody trusts. This designs the model; a scoring skill then runs it.
- 1Pick signals that separate, not signals that exist
A signal earns a place only if it actually differs between accounts that win and accounts that lose. Start from a handful of real wins and losses and ask what was true of the wins. Signals that look the same on both sides are noise, no matter how easy they are to pull.
- 2Weight fairly across channels
An outbound account and a product-led account show up on different signals. If the model only rewards product usage, outbound accounts can never score. Weight so every channel can reach every tier on its own strongest signals. Uncap the channels, then let the gates do the filtering.
- 3Add gates and escalators
Gates are hard rules: a wrong-motion or wrong-region account gets capped or disqualified no matter how good it looks. Escalators are the opposite: one dominant, high-intent signal can lift an account to the top tier on its own. Both keep the middle of the score honest.
- 4Handle missing data honestly
A blank field is not a zero. An account scored on two of six signals must not sit next to a fully-enriched account at the same number. Cap the score by coverage so a thin account cannot hide as a strong one. This is the single most common way scoring models lie.
- 5Set the tier bands and the reason string
Define the bands you route on and, for every account, require a short reason: the signals that drove the score. A score with no reason is a black box reps will ignore. A score with a reason is a score they will work.
- Every signal in the model has a stated reason it separates wins from losses. No signal included just because it is available.
- Every channel can reach every tier on its own signals. No channel is structurally capped.
- Blank fields are never scored as zero; coverage caps the score.
- Every score carries a reason string naming its top drivers.
- Gates and escalators are explicit rules, not vibes buried in a weight.
SCORING MODEL SPEC · [your org] · built [date] Signal Weight Reason it separates Fit (firmographic) 30 wins cluster in this size + segment Product usage 25 active trial predicts close Intent 20 repeat high-intent visits precede wins Engagement 15 multi-thread predicts a real deal Recency 10 fresh signal beats stale GATES: not-our-motion -> DQ · competitor -> cap at Nurture ESCALATORS: >=3 high-intent sessions in 7d -> min Warm COVERAGE: score capped at 60 if <3 of 5 signals present TIERS: Hot >=85 · Warm 65-84 · Nurture 40-64 · DQ gated Reason string (per account): "Hot 91 - strong fit + active trial + 4 intent sessions this week"
The weights, gates, escalators, and tier bands are yours to set. The examples here suited a hybrid inbound-plus-outbound motion. A pure product-led or pure enterprise motion weights differently. The logic, pick signals that separate, weight fairly, gate the junk, never score a blank as zero, does not change.
Where an operator takes this next.
The model is step one. Here is where an operator takes it once it holds.
Design the model once, defend it with a real cohort, and let it run.
Feed the spec to an ICP-scoring skill so every account in the CRM gets scored, tiered, and reasoned, on demand or nightly.
Pull closed-won and closed-lost from Salesforce or Snowflake and re-fit the weights against what actually converted, so the model does not freeze at launch defaults.
Wire the bands into Salesforce and Slack so a Hot account alerts its owner the moment it crosses the line.
One skill is the on-ramp.
A single skill does one job. Chained into a playbook, or run as a full build, it becomes a system. Here is where this one plugs in.