All articles
Guide

Fit, intent, and timing: the dual-scoring model that stops reps chasing ghosts

April 21, 2026Updated June 24, 202615 min read3,002 words

Score each account three ways: fit (should we ever sell to them?), intent (are they researching?), and timing (did something change?). Then route by go, wait, or stop, and only run outreach on accounts that clear all three.

Fit + Intent + Timing: The Dual-Scoring Model That Stops SDRs From Chasing Ghosts - Chronic Digital Blog

Reps chase ghosts for one reason. The "priority" list mixes two different worlds: accounts that match your ICP, and accounts that want to buy. Then someone sprinkles in random "hot" alerts and calls it a system.

It isn't one.

Fit, intent, and timing fixes this. It's the simplest scoring model that holds up in the real world. No data science team. No dashboards nobody trusts. Just a clear go, wait, or stop decision for every account.

Why fit, intent, and timing exists (and why your current scoring lies)

Most teams run one of these:

  1. Fit-only scoring (firmographics). Great for building a list. Useless for deciding who to contact today.
  2. Activity-only scoring (opens, clicks). Great for measuring curiosity. Useless for detecting real buying.
  3. "MQL" scoring (everything plus vibes). Great for internal alignment. Useless for pipeline.

Meanwhile buyers do more of their research alone. Gartner found that 61% of B2B buyers prefer a rep-free buying experience, based on a survey of 632 buyers in August and September 2024. That means your first touch often lands after they have already formed an opinion. (gartner.com)

So your model needs three answers:

  • Fit: are they even worth attention?
  • Intent: are they researching the category?
  • Timing: did something change that makes a conversation make sense this week?

McKinsey's B2B Pulse data shows buyers split their preferences across in-person, remote, and digital self-serve, and use an average of ten interaction channels. Translation: signals scatter. You need a scoring model that tolerates mess. (mckinsey.com)

Define the model: fit score, intent score, timing score

Fit score (0-100): "should we ever sell to them?"

Fit is your ICP match. It moves slowly.

Good fit inputs

  • Firmographics
    • Industry
    • Company size (employees, revenue)
    • Geography
    • Growth rate (optional)
  • Role match
    • Titles and functions you actually sell to
    • Seniority bands (Manager, Director, VP, C-level)
    • Buying committee coverage (economic buyer plus operator)
  • Technographics
    • Tools that indicate maturity
    • Tools that create integration pull
    • Tools that indicate "too small" or "wrong motion"

Fit is not a "today" signal. Fit tells you whether the account belongs in your universe at all.

Intent score (0-100): "are they in-market?"

Intent is observed research behavior. It decays.

Good intent inputs

  • First-party
    • Pricing page views
    • Product page depth
    • Docs visits
    • Demo or video completion
    • Reply intent ("what's pricing?" beats "sounds interesting")
  • Third-party
    • Topic research spikes (category keywords)
    • Competitor comparison research
    • Review site activity

Intent providers talk about "surge" behavior, where research spikes above an account's baseline. Bombora's Company Surge is one example of third-party intent derived from a large publisher co-op. (bombora.com)

Timing score (0-100): "will outreach land right now?"

Timing is the trigger layer. It spikes, then fades.

Timing triggers that actually create meetings

  • Job change: new VP Sales, new RevOps leader, new founder-led GTM hire
  • New funding: seed, Series A or B, growth round
  • Tool installs or migrations: new CRM, new outbound tool, new data provider
  • Competitor replacement events: rip-and-replace signals, careers pages mentioning migration projects, stack changes that imply switching costs already paid
  • Hiring patterns: hiring SDRs suggests an outbound ramp; hiring RevOps suggests a system change; hiring demand gen suggests pipeline pressure

Timing is the piece most scoring models miss. It is also the difference between "nice product" and "booked meeting."

Inputs, weights, decay windows, and thresholds

Here is a practical model you can build in a spreadsheet, Airtable, or whatever system already holds your accounts.

Step 1: choose weights (start simple)

Use a weighted total score.

Recommended default weights

  • Fit: 50%
  • Intent: 30%
  • Timing: 20%

Why this mix:

  • Fit prevents fantasy pipeline.
  • Intent catches in-market accounts.
  • Timing makes the message feel "about them," not about you.

If your TAM is huge and you sell transactional SMB, shift more weight to timing. If your TAM is tight and you sell enterprise, keep fit heavier.

Step 2: add decay windows

This is where the model becomes real. Fit doesn't decay. Intent and timing decay hard.

Decay defaults

  • Intent half-life: 14 days. After 14 days with no new signal, intent weight drops by half.
  • Timing half-life: 7 days. Triggers go stale fast. A "new VP" email hits different on day 3 than on day 30.

If you want the simplest possible version:

  • Count intent signals only if they happened in the last 30 days.
  • Count timing signals only if they happened in the last 14 days.

Step 3: define "do nothing" thresholds (the anti-ghost rule)

Most teams fail here. They build a score, then still let reps "just try."

Set rules that block activity:

  • If Fit < 60: disqualify or nurture only.
  • If Fit >= 60 and Intent < 40 and Timing < 40: wait.
  • If Fit >= 80 but Intent < 20 and Timing < 20: wait, no manual touches, put it on a monitor list.

This is how you stop reps from "being busy."

Step 4: compute the total score

Example formula:

Total = 0.5*Fit + 0.3*Intent(decayed) + 0.2*Timing(decayed)

Keep it boring. Boring scales.

Build the scorecards: exact fields and point systems

Fit scorecard (0-100)

Firmographics (0-50)

  • Industry match: 0 / 10 / 20 (wrong / adjacent / core)
  • Employees band: 0 / 10 / 20
  • Geography: 0 / 5 / 10
  • Revenue band (optional): 0 / 5 / 10

Role match (0-30)

  • Has at least 1 target persona: 0 / 10 / 20
  • Has economic buyer persona: 0 / 10
  • Has ops or implementer persona: 0 / 10

Technographics (0-20)

  • Uses a compatible CRM: 0 / 5 / 10
  • Uses an outbound stack: 0 / 5 / 10

Fit floor rule: missing a target persona email? Cap fit at 70. No contactability, no pipeline.

Intent scorecard (0-100)

Use only signals you can capture consistently.

First-party (0-60)

  • Pricing page view (last 14d): +20
  • Visited 3+ pages (last 7d): +10
  • Returned visit (last 7d): +10
  • Demo request: +40 (cap the category)

Third-party (0-40)

  • Category topic surge (last 14d): +15
  • Competitor comparison topic (last 14d): +25

Then apply decay: if a signal is older than its window, reduce its points.

Timing scorecard (0-100)

Timing is about "why now."

Triggers (pick 6-10 that matter)

  • New VP Sales or Head of Growth hired (last 14d): +35
  • New RevOps hired (last 30d): +25
  • Funding announced (last 30d): +25
  • Installing a competitor tool (last 30d): +20
  • Hiring SDRs (last 30d): +15
  • Tool migration job post (last 30d): +25

Cap timing at 100. Don't overfit.

Routing logic: when to email, call, wait, or stop

This is where the scores turn into pipeline.

The routing matrix (simple and brutal)

1) Disqualify

  • Fit < 60. Disqualify, or push to a long-term nurture list. No sequences.

2) Wait (monitor)

  • Fit >= 60 AND Intent < 40 AND Timing < 40. Do nothing, monitor weekly, add to a "signal watch" list.

3) Email-first (high intent, normal timing)

  • Fit >= 70 AND Intent >= 60 AND Timing < 60. Start a 4-6 step email sequence. Add a LinkedIn view plus a connect on touch 2. No calls unless they engage. They're researching, so don't ruin it with random calling.

4) Call-first (high timing, enough fit)

  • Fit >= 70 AND Timing >= 70. Call within 24 hours. Follow with a tight email referencing the trigger. If no connect, 2 calls max in 7 days, then drop to email.

5) Full-court press (high everything)

  • Fit >= 80 AND Intent >= 70 AND Timing >= 60. Email day 0, call day 1, LinkedIn day 2, email day 4, call day 6.

6) Nurture (good fit, weak intent, stale timing)

  • Fit >= 80 AND Intent 20-39. Monthly value touch. Wait for new intent. No "checking in."

Decay windows in practice: the cheat sheet

You need decay because your records will happily tell you an account is "hot" based on a click from 9 months ago. That is not hot. That is archaeology.

Default decay windows

  • Pricing view: 14 days
  • Competitor comparison intent: 21 days
  • Funding: 45 days
  • Job change: 30 days
  • Tool install: 60 days
  • Hiring burst: 45 days

Rule: when in doubt, shorten the window. You want fewer "hot" accounts with higher close rates.

Three sample scorecards (agency, SaaS, services)

These are starter templates. Change the numbers. Keep the structure.

ICP 1: lead gen agency selling outbound services

Fit (0-100)

  • Employees 5-50: 20
  • Industry is marketing or lead gen agency: 20
  • Geography is US/CA/UK/AU: 10
  • Has a founder or agency owner contact: 20
  • Uses Apollo or Instantly: 15
  • Uses HubSpot or Pipedrive: 15

Intent (0-100)

  • Visits a "cold email" content page: +10
  • Visits pricing page: +20
  • Reads 2+ case studies: +15
  • Third-party topics like "lead generation," "cold email," "sales automation": +25
  • Decay: 14-day half-life

Timing (0-100)

  • Hiring SDRs or appointment setters: +20
  • New Head of Growth: +25
  • New email sending platform installed: +25
  • Funding: rare here, ignore or weight low
  • Decay: 7-day half-life

Routing: Fit 80+, Timing 70+ is call-first. Agencies move fast and respect speed.

ICP 2: B2B SaaS selling to sales teams

Fit

  • Employees 20-500: 20
  • Tech industry: 15
  • Has RevOps or Sales Ops: 20
  • Has a VP Sales: 15
  • Stack includes HubSpot or Salesforce plus a sales engagement tool: 30

Intent

  • Competitor comparison topic surge: +25
  • Review site activity: +20
  • Pricing page: +20
  • Docs or feature deep dives: +15
  • Decay: 14-day half-life

Timing

  • New VP Sales: +35
  • New RevOps: +25
  • Funding (A or B): +25
  • "CRM migration" job post: +25
  • Decay: 7-day half-life

Routing: high intent plus decent timing is email-first with a trigger-based opener. High timing (a new VP Sales) is call-first within 24 hours.

ICP 3: services company selling high-ticket

Think dev shop, cybersecurity services, or consulting.

Fit

  • Employees 50-1000: 20
  • Industry is regulated (finance, healthcare, manufacturing): 20
  • Has a CIO, CTO, or IT Director: 20
  • Has a compliance or security leader: 15
  • Existing cloud plus security stack maturity: 25

Intent

  • Consumes "vendor evaluation" content: +10
  • Views a case study relevant to their industry: +15
  • Searches for "SOC 2," "pen test," "MDR," and similar: +25
  • Competitor research: +20
  • Decay: 21-day half-life (services deals move slower)

Timing

  • Breach news: +40 (if applicable)
  • New compliance deadline mentioned: +25
  • New CIO or CTO: +25
  • New funding: often irrelevant
  • Decay: 14-day half-life

Routing: email-first with proof, then call. If intent is weak, do nothing. Services outreach without a reason looks like spam with a logo.

How to implement without a data science team (a weekend build)

Step 1: pick your data sources (minimum viable)

You need three buckets.

Fit

  • Account fields (industry, size)
  • An enrichment source (employees, revenue, tech stack)
  • Contact title mapping

Intent

  • Website analytics (even basic page-view events)
  • Review site activity if you have it
  • Third-party intent if budget exists

Timing

  • LinkedIn job changes
  • Funding announcements
  • Hiring and job posts
  • Tech stack change signals

If you want the system to run without humans playing detective, the enrichment and scoring have to be automatic. That is the part Chronic owns: lead enrichment and AI lead scoring feed the model, and scoring-driven outreach goes out through the AI email writer without anyone updating a spreadsheet.

Step 2: create your fields

Wherever your accounts live, create:

  • Fit_Score (0-100)
  • Intent_Score (0-100)
  • Timing_Score (0-100)
  • Total_Score (0-100)
  • Score_Updated_At (date)
  • Route (Email, Call, Wait, Disqualify)
  • Reason Codes (multi-select), for example "New VP Sales," "Pricing view," "Competitor surge"

Reason codes matter. Reps trust reasons, not numbers.

Step 3: set the rules (automation)

The logic:

  1. Calculate fit weekly.
  2. Update intent daily with decay.
  3. Update timing daily with decay.
  4. When the total crosses a threshold, set the route:
    • Call if Timing >= 70 and Fit >= 70
    • Email if Intent >= 60 and Fit >= 70
    • Wait if Fit >= 60 and Intent < 40 and Timing < 40
    • Disqualify if Fit < 60

Step 4: attach actions to routes

This is where most teams stop. Don't.

  • Email: start the sequence, with personalization anchored to the top reason code.
  • Call: create the task, with the trigger context in the task title.
  • Wait: no tasks, no sequences, just monitoring.
  • Disqualify: set the lifecycle stage and stop all outbound.

Chronic's job starts at "go." The moment the score clears your threshold, the agent runs the outbound end-to-end from a managed, warmed mailbox, references the trigger in the opener, handles the replies, and books the meeting, and it surfaces the calls worth a human eye instead of asking you to babysit a queue.

Weighting and tuning: the practical iteration loop

You don't need machine learning. You need feedback and discipline.

What to track (weekly)

  • Meetings booked per route
  • Reply rate per trigger type
  • Connect rate for call-first
  • SQL rate by fit band (60-69, 70-79, 80-89, 90+)
  • Time-to-first-touch after a trigger fires (speed matters)

Woodpecker, an outbound email tool, points to its own analysis suggesting that adding a single follow-up can lift reply rates by roughly 22% in the example it frames. (woodpecker.co) Treat that as a reminder that sequences matter, but only after scoring stops you emailing the wrong people in the first place.

If your reply rate is bad, it is usually list quality. Read Cold email in 2026: the list is the strategy (not your subject line), then fix scoring.

How to tune weights (without lying to yourself)

  • If Fit 80+ accounts still never convert, your fit inputs are wrong.
  • If Intent 70+ accounts never reply, your intent signals are weak or too broad.
  • If Timing drives replies but not meetings, your trigger messaging is off. The offer does not match the moment.

Common failure modes (and how to avoid them)

"Everything is hot." Cause: no decay, no do-nothing threshold. Fix: add decay and enforce wait states.

"Reps ignore the score." Cause: no reason codes. Fix: show the top 1-2 reasons next to the score.

"Intent data creates false positives." Cause: the topic list is too broad. Fix: narrow it to vendor-evaluation intent, competitor comparisons, and problem-specific phrases.

"Timing triggers cause spam." Cause: triggers fire, but messaging stays generic. Fix: write one sequence per trigger type. A funding email is not a job-change email. Obvious, rarely done.

For a fuller operating framework around signals, priorities, and next actions, see Precision selling: a practical playbook for signals, priorities, and next actions.

Where Chronic fits: scoring is the brain, execution is the muscle

Most teams duct-tape together a list tool, an enrichment tool, a sequencer, a system of record, and a scoring spreadsheet, then wonder why nothing stays consistent.

Chronic runs the whole loop as one operator:

If you're comparing stacks:

For how the pricing actually works, read Seats vs credits vs pay-per-action: the only outbound pricing math that matters.

FAQ

What's the difference between intent and timing?

Intent is research behavior. Timing is a change event. Intent answers "are they looking?" Timing answers "why now?"

What's a good starting threshold for outreach?

Start with: disqualify at Fit < 60; wait at Fit >= 60 and Intent < 40 and Timing < 40; email at Fit >= 70 and Intent >= 60; call at Fit >= 70 and Timing >= 70. Then tune based on meetings booked, not on activity.

How long should intent signals stay "active"?

Short. Buyers move, so your data should too. A clean default is a 14-day half-life for intent and a 7-day half-life for timing.

Do I need third-party intent data for this to work?

No. First-party intent plus timing triggers already beats most teams. Third-party intent is an accelerant, not a foundation.

How do I stop reps from overriding "wait" accounts?

Remove the option. No tasks, no sequences, no "just checking in." Monitor only. When new intent or timing appears, the route flips automatically.

What if fit is perfect but intent is zero?

Then you found a great account that does not care today. Waiting is a strategy. Calling is a hobby.

Build it this week, then enforce it

  1. Define your fit scorecard and set a hard disqualify line.
  2. Choose 5-8 intent and timing signals you can capture consistently.
  3. Add decay windows so old behavior dies on schedule.
  4. Set do-nothing thresholds so reps stop chasing ghosts.
  5. Route automatically and measure meetings booked by route.

When the score says go, execution has to be instant. That is the part you can hand off. Chronic takes the accounts that clear your thresholds and runs the outreach end-to-end, from a warmed mailbox through reply handling to a booked meeting, and only interrupts you for the decisions that matter.

Ready when you are

Put your pipeline on autopilot.

Chronic runs discovery, outreach, and follow-up end to end. You approve the decisions that matter.