Skip to Content
CoursesSignals & ABM07 Scoring across signals

Scoring Accounts Across Signals

Outcome: a single timing score combining several signals with decay, weights derived from your own conversion data, and a threshold that routes accounts into action.

Surface
App
Level
Intermediate
Uses
Formula columns
Credits
0
Prerequisite
Lessons 02–06

Keep fit and timing apart

Fit says can we sell to them. Timing says should we act now. Combining them into one number destroys the distinction that makes signals useful.

priority = fit_score >= fit_floor AND timing_score >= timing_floor ordered by timing_score DESC

A hot signal at an unsellable account must not outrank a strong-fit account. A floor on fit is what guarantees it cannot.


Decay is the whole point

A signal’s value falls as its window closes. Without decay, a four-month-old funding round scores the same as one from last week, and your queue fills with stale triggers.

A workable decay, applied per signal:

signal_points = base_points × decay_factor decay_factor: age <= 30% of window 1.0 age <= 60% of window 0.7 age <= 100% of window 0.4 age > window 0

Decay is why you must store the signal date rather than a boolean. A true/false flag makes decay impossible to compute and turns every signal into a permanent attribute — which is the single most common design error in signal pipelines.


Weight by evidence, not intuition

Take accounts that became opportunities

The last two quarters, if you have them.

Look back at what was true 30–60 days before

Which signals were present?

Compare against accounts that did not convert

Same period, same market.

Weight by the gap

A signal present in 60% of converters and 15% of non-converters earns a high weight. One present in 40% of both earns zero — it is background noise in your market.

Most teams discover that one or two signals do almost all the predictive work, and several others they were tracking do none.


Stacking

Signals combine non-linearly. Two together are usually worth more than the sum of their individual weights, because they corroborate each other.

CombinationReading
Funding + hiring in your functionMoney and a place it is going
New exec + hiring in their functionA mandate being staffed
Stack change + hiringA migration underway
Job change + the new company fitsWarm relationship at a qualified account

Add a modest bonus for a corroborated pair — a couple of points, not a doubling. The bonus should reward corroboration without letting a stack of weak signals outrank a strong single one.


Do not double-count

The same underlying event often surfaces through several signals, and counting each separately inflates the score.

Looks like several signalsIs really one event
Funding + headcount growth + hiring, all in the same monthThe round
New exec + leadership change + job change for the same personOne person moving
Multiple job posts for the same role repostedOne vacancy

Group signals by underlying event and take the strongest, plus a small corroboration bonus. Otherwise a single funding round scores three times.


The threshold

Same derivation as everywhere else in this library: capacity, not intuition.

  1. Compute how many accounts your team can work per week.
  2. Score everything — free.
  3. Sort by timing within the fit floor.
  4. The score at your capacity row is the threshold.
  5. Read ten accounts above and ten below. If they are indistinguishable, add a discriminating signal.

Do this now

List your signals with base points

Whole numbers, and a window for each.

Add the decay function

Per signal, based on its window.

Group signals by underlying event

Prevent double-counting.

Add a small corroboration bonus

For genuinely independent pairs.

Run the converter-versus-non-converter comparison

Adjust weights to match the gaps.

Set the threshold from capacity

Sanity-check the top 20

With someone who knows the accounts.


Check your work

  • Fit and timing are separate, with a floor on fit
  • Every signal decays against its own window
  • Signals from one event are grouped, not summed
  • Weights trace to a measured conversion gap
  • The threshold came from capacity

Where this breaks

A score without decay turns into an all-time signal count, and the accounts at the top become the ones with the longest history rather than the most current activity. It looks like a working prioritization for about a quarter, and then the queue is full of events from last year. Decay is not a refinement — it is what makes the score mean “now”.


Further automation

Re-score on every signal run so accounts cross the threshold on their own. Route newly-crossed accounts to a queue or Slack with the signal that pushed them over — the trigger is the reason the message will need, so passing it along saves the rep from looking it up.


Next lesson

08 — Running an ABM play end to end, putting the tiers, signals and score together.

Reference for this lesson: Signals, Tables, GTM Engineering — attributes versus signals, TAM Sourcing.