Turn a pile of accounts into a stack rank with a reason on every row.
Fair across channels, blank fields never scored as zero, with a why behind each account's score.
Inside: The three score modes, the gates and escalators, and per-account reasoning.
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 your account fields automatically, across the whole list.
fills the gaps (firmographics, technographics, hiring, contacts) so more signals are present per account.
adds live usage as a boost on accounts already in your product.
This was built for a B2B SaaS org scoring accounts across mixed acquisition channels. Set these to your stack:
Score on the signals you actually have. The skill does not care whose weights they are; point it at your ICP evidence, not anyone else's.
| Set this | What it is | Default / Example |
|---|---|---|
| SIGNAL LIBRARY | the signals you score on | size bandtech stackhiringwebsite CTAusageintent |
| GATES | hard caps applied before ranking | email-stack fairnessICP disqualifierno-sales-motion |
| WEIGHTS | how much each signal counts | evidence-weightedrenormalized over the signals that are filled |
| ESCALATORS | bounded additive boosts on top of the base rank | product usage +6 / +12buyer intent +8 / +15 |
| TIERS | the score bands | Hot >=80 / Warm 65-79 / Watch 50-64 / DQ <50 |
| STRIKE_BAND | the action cutoff (work these first) | >=90 |
Everything the skill does, in full.
Reads a list of accounts and gives each one a fit score and a rank, with the reasoning spelled out per account: what pushed it up, what held it back, and what you could not see. It blends many signals into one number without letting the signal you happen to have the most of drown out the ones you have less of. The output is a stack rank you can work top-down, plus a short "why this score" on every row.
- 1Score modes (pick by lifecycle, never by channel)
Three modes read one signal library: NEW-BUSINESS (accounts you have not sold), EXPANSION (current customers), WIN-BACK (churned accounts). Mode is chosen by commercial state. Channel segments an account inside a mode, it never picks the mode and it is never a scoring input.
- 2Layer 0: gates
Hard caps applied before any ranking. Examples: an email-stack fairness multiplier so an account on a provider that fits your motion is not penalized against one that does not; an ICP disqualifier cap when a hard "not our fit" signal is present; a "no sales-motion fingerprint" cap. Gates answer yes/no questions from the cheapest source first. A DNS MX lookup for the email stack costs nothing and covers every domain, so it beats a paid field.
- 3Layer 1: base rank, renormalized over the signals you have
score = SUM(weight x value x filled) / SUM(weight x filled). Only the signals actually present count toward the denominator, so a missing enrichment field is never scored as a zero. A Coverage stamp caps the score and says so when too little is filled. This is the channel-fair core: every account is ranked on its own present signals, and the highest-fill signal cannot dominate the rest.
- 4Layer 2: escalators (bounded, additive)
Product usage and buyer intent add points on top. They add, they never multiply, because multiplying saturates the ceiling and buries the base rank. Example bands: product usage +6 for a foothold, +12 for real depth; buyer intent +8 for one in-market person, +15 for two or more. Disqualified accounts get their boosts capped low so a gate is never bought back by usage.
- 5Reasoning per account ("why this score")
Every row ships with its evidence in order: the live escalators first (usage, intent, the outreach hook), then the fit case (tech-stack match, hiring, a displaceable competitor, a talk-to-sales CTA), then the qualifiers, then the caveats stated plainly (disqualifier cap, coverage cap, unknown-stack haircut). A score is never delivered without its evidence.
- No score without its per-component reasoning. Every row explains itself.
- Missing signals are renormalized out, never scored as zero.
- A Coverage stamp rides on every account; a thin account is flagged, not silently ranked next to a fully-enriched one.
- Weights change only through a pre-registered lift test, never a hunch. A new signal enters at weight zero, shadow-scores, earns its weight, then gets promoted.
- Recompute a handful of scores by hand every run; they must match the machine.
ICP STACK RANK - 8 accounts Account Score Tier Why Acme Corp 92 Hot CRM in stack + hiring 3 sales roles + demo CTA; 12 weekly users Vertex 78 Warm Right size + hiring; no product usage yet Blend Labs 64 Watch Fits size band; thin coverage (2 of 6 signals) Northwind 38 DQ Disqualifier cap: not our motion Work first (>=90 strike band): 1. Acme Corp. Product foothold plus in-market this week. Lead with the usage hook.
The weights, the +6 / +12 escalator bands, and the tier cutoffs (Hot / Warm / Watch / DQ) are defaults from one team's win/loss backtest, not laws. They fit that team's motion. If your ICP is different, re-fit them on your own closed cohort. The layering logic (gate, renormalize over filled, add bounded boosts) is the part that carries over; the exact numbers are yours to earn.
Where an operator takes this next.
The rank is step one. Here is where an operator takes it once the manual version proves out.
You built the rank once, now it stays current without anyone re-running it by hand.
Point a scheduled Claude task at Salesforce and your enrichment stack, and write the score, tier, and reasoning back to each account record every night.
Send a Slack DM to the account owner the moment an account crosses the >=90 strike threshold, so the hottest accounts get worked same-day.
Pull closed-won and closed-lost from Snowflake or Salesforce quarterly and re-fit the escalator bands against what actually converted, instead of leaving them frozen at launch defaults.
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.