Sales Strategy12 min read

How to Build a Lead Scoring Model With Intent Signals, Firmographics, and Behavior

How to build a lead scoring model that combines intent signals, firmographics, and behavior. Weights, thresholds, a worked example, and a 90-day loop.

The 50/30/20 lead scoring split you found on a blog was built for someone else's funnel.

You've seen it. Fifty points for behavior, 30 for firmographic fit, 20 for intent. It shows up in nearly every guide on the first page of Google, usually with the same table and the same "recalibrate monthly" advice at the bottom. It's not wrong, exactly. It's a starting guess dressed up as a recipe.

You already suspect your current scoring is off. Reps ignore the number, work their own gut list, and the score field slowly turns into decoration. That happens because the model was never fit to your data, and because "behavior" was defined as clicks on your website, which misses everyone who hasn't visited yet.

This guide walks through building lead scoring with intent signals, firmographics, and behavior as three distinct layers, each doing a different job. You'll get the gating rule, a starting weights table, the method for replacing those weights with your own closed-won data, thresholds set from rep capacity, a worked example scoring two real-shaped prospects, and the 90-day iteration loop.

If you're deciding between a points model and a machine learning model, read the predictive lead scoring guide first. This article assumes you're building the points version, which is the right call for most teams under a few thousand labeled outcomes.

The Three Layers of a Lead Scoring Model

Every input to a scoring model answers one of three questions. Mixing them into a single pile of points is the most common design mistake, so keep them separate from day one.

Firmographics Answer "Can They Buy?"

Company size, industry, revenue band, geography, tech stack, job title, seniority. This is the data Apollo, ZoomInfo, and your CRM already hold. It tells you whether a prospect matches your Ideal Customer Profile (ICP).

It does not tell you anything about timing. A perfect-fit VP of Sales at a 200-person SaaS company is perfect-fit every single day of the year. Fit is static. That's why it makes a poor ranking signal and a great filter. We covered the ceiling on this approach in why firmographic scoring falls short.

Behavior Answers "Are They Paying Attention to Us?"

Pricing page visits, demo requests, email replies, webinar attendance, trial signups, product usage. This is first-party engagement on properties you control.

Behavior is where most models overweight. Three email opens are not a buying signal. A pricing page visit followed by a case study download inside 48 hours probably is. The difference is depth and clustering, not volume.

Intent Signals Answer "Are They in a Buying Cycle Right Now?"

Intent is activity that happens outside your funnel. Third-party topic surges from providers like Bombora. Review site research. And the one most models skip entirely: public LinkedIn activity. A Head of Sales who posts "hiring three SDRs in Q4, what tools should we be looking at?" has told the whole internet they're in a buying cycle. They've never visited your site. A behavior-only model gives them zero.

The distinction between these signal types matters for how you weight them, and we broke it down in intent signals vs buying signals explained.

Want to see what LinkedIn intent signals look like on real prospects? Import a list of 100 contacts free and Cleed will show you which ones are showing buying signals right now.

Step 1: Make Firmographics a Gate, Not a Score

Here's the rule that fixes half of broken lead scoring models: fit gates, behavior and intent rank.

Define your ICP as a pass/fail filter. Wrong industry, wrong company size, wrong region, or a title that never signs your contract: the prospect doesn't enter the scored pool at all. No partial credit.

Then, inside the pool, use a narrow fit band (say 0-20 points) only to separate tiers within your ICP. A 500-person company in your sweet spot gets 20. A 50-person company that's technically in range gets 8. That's it. Fit should never be able to push a prospect over your outreach threshold on its own.

Why so strict? Because firmographic data is the most abundant and the most stale input you have. B2B contact data decays at roughly 22.5% a year, which we unpacked in how CRM data decay kills your pipeline. If fit carries 30-40% of the score, one out-of-date job title can generate a "hot" lead who left the company eight months ago.

Consider Priya, RevOps lead at a 40-rep SaaS company. In February she copied a 50/30/20 model into HubSpot. By May, 70% of her "hot" leads came from one enterprise account: 23 employees who had all downloaded the same ebook for an internal training session. Firmographic points plus one content download put every one of them over the line. Zero of them had budget. Gating on fit and capping its points would have kept the whole account at "watch," not "call now."

Step 2: Score Behavior With Time Decay

Behavior is the layer your marketing automation already tracks, so the build here is about discipline, not data collection.

Three rules make behavioral lead scoring useful instead of noisy:

  1. Score depth, not volume. A pricing page visit is worth more than five blog visits. A demo request is worth more than everything else combined. Weight the actions that historically precede a sales conversation.
  2. Apply time decay. A pricing page visit yesterday matters. The same visit six months ago does not. Halve behavior points every 30 days, or zero them at 90. Without decay, scores only go up and every long-lived contact eventually looks hot.
  3. Add negative behavior. Unsubscribes, bounced emails, a "not interested" reply, or a job title change to something outside your ICP should subtract points immediately.

A reasonable starting band for behavior is 0-40 points. Put the ceiling on a single high-value action (demo request, trial start) at around 25, so one action can get a prospect most of the way but not all the way. Clustering does the rest: two mid-value actions within a week should be worth more than the same two actions three months apart.

Step 3: Add Intent Signals to Lead Scoring From Outside Your Funnel

This is the layer that separates a lead scoring model that finds new pipeline from one that just re-ranks people already in your funnel.

Third-Party Intent Data

Topic-surge providers watch content consumption across publisher networks and flag accounts researching your category. It's account-level, not person-level, and it's noisy. Treat it as a moderate signal: it tells you an account is warming, not who inside it cares. If you're evaluating providers, our comparison of first-party vs third-party intent data covers what each type actually delivers for pipeline.

Starting band: 0-15 points, with the top of the band reserved for a surge on your exact category (not an adjacent one) sustained across two or more weeks.

LinkedIn Activity Signals (the Layer Most Models Skip)

This is person-level, public, and timestamped. It's also the layer that competing guides leave out because it's hard to collect manually. Reading through one prospect's last 30 days of posts, comments, and reactions takes 30-60 minutes. Nobody does that for 500 leads.

But it's the highest-signal input in the model. The 11 LinkedIn buying signals we track break down into roughly three strength tiers for scoring purposes:

  • Strong (15-25 points): Posted about a pain point you solve. Asked for tool recommendations in your category. Engaged with a competitor's product launch or pricing post. Started a new role that matches your buyer persona within the last 60 days.
  • Medium (8-14 points): Commented on posts about your problem space. Company posted hiring announcements for roles that use your product. Company announced funding.
  • Weak (2-7 points): Reacted to industry content. Followed your company page. Connected with one of your reps.

Two things make LinkedIn signals different from web behavior. First, they catch prospects who have never touched your funnel. Second, they come with context: you know what they posted, which means the first line of your outreach writes itself.

Starting band for LinkedIn intent: 0-30 points, decaying on the same 30-day schedule as behavior.

This is the part Cleed automates. Signal detection reads posts, comments, and reactions across your prospect list, tags each of the 11 signal types plus any custom signals you define, and returns a relevance score from 0 to 100 with the exact post that triggered it. You can score your existing CRM contacts free for 7 days and export the results straight into the intent column of your model.

Step 4: Set Lead Scoring Weights From Your Own Closed-Won Data

Now the weights. Here's the honest starting table, followed by the method that replaces it.

LayerStarting bandRole in the model
Firmographic fit0-20 (after gate)Tier prospects inside ICP
First-party behavior0-40Rank engaged prospects
Third-party intent0-15Flag warming accounts
LinkedIn activity signals0-30Catch in-market prospects, supply hooks
Negative signals-5 to -40Remove dead or disqualified prospects

That sums to a ceiling of 105 before negatives. Don't normalize it to 100; the ceiling is a rounding artifact and nobody will ever hit it.

These weights are a guess. A decent one, biased toward the two layers that carry timing information, but a guess. Here's how to replace them with lead scoring weights derived from your data:

  1. Pull every prospect from the last 12 months with a known outcome. Closed-won, closed-lost, and disqualified. You need at least 100 in each of won and lost for the numbers to mean anything.
  2. Backfill the signals. For each prospect, record which behaviors, firmographic attributes, and intent signals were present in the 30 days before they entered the pipeline. This is tedious. Do it in a spreadsheet the first time.
  3. Compute lift per signal. For each signal, divide the win rate among prospects who had it by the base win rate. A signal with a lift of 3.0 means prospects showing it closed three times as often.
  4. Rescale points to lift. Give your highest-lift signal the top of its band and scale the others proportionally. A signal with lift below 1.2 gets zero points; it's not predictive, it's decoration.
  5. Rebalance the bands. If your LinkedIn pain-point signal shows a lift of 4.1 and pricing page visits show 1.6, the intent band should be wider than the behavior band, no matter what a template said.

Teams that do this properly are the ones behind the "advanced lead scoring hits 40% MQL-to-SQL conversion versus a 13% industry average" number reported in lead qualification statistics. The gap isn't the algorithm. It's whether anyone checked the weights against outcomes.

Step 5: Set Thresholds From Rep Capacity, Not Round Numbers

Marcus runs a five-person sales team at a Series A company. He set his "sales-ready" threshold at 60 because the HubSpot template did. Within two weeks his team had 400 qualified leads in the queue and could realistically work 60. Reps started cherry-picking by company logo, which is exactly the behavior scoring was supposed to eliminate.

The fix is arithmetic. Work backward from capacity:

  • Each rep can run meaningful first-touch outreach on roughly 12-15 new prospects per day, including research and personalization.
  • Five reps, five days: 300-375 prospects per week at the absolute ceiling, closer to 250 once you account for follow-ups and meetings.
  • So the "call now" threshold is whatever score puts about 250 prospects a week above the line. Not 60. Not 70. Whatever number the distribution gives you.

Then add a second, lower threshold for "nurture" and a third band for "watch." Prospects in "watch" are in-ICP but showing nothing. They aren't dead; they're waiting for a signal.

This is why daily rescoring matters more than the initial score. Cleed's auto-rescore reruns signal detection on saved prospects every night. A prospect sitting at 34 on Monday who posts about switching tools on Tuesday is a 78 on Wednesday morning, and your rep sees them at the top of the list instead of never. Our guide on how to prioritize leads covers how to structure the daily queue around these bands.

A Worked Example: Scoring Two Prospects Side by Side

Abstract weights don't build intuition. Here are two prospects, scored with the starting bands above.

Prospect A: Dana, VP of Sales, 450-person SaaS company.
Perfect ICP. Company uses HubSpot, which you integrate with. Visited your homepage once four months ago. No LinkedIn activity in your problem space in the last 90 days. No third-party surge on the account.

  • Fit: 20 (passes gate, top tier)
  • Behavior: 0 (single visit, fully decayed)
  • Third-party intent: 0
  • LinkedIn signals: 0
  • Total: 20. Band: Watch.

Prospect B: Tomas, Head of Sales, 90-person SaaS company.
Mid-tier ICP. Company just posted three SDR job openings. Tomas commented on a competitor's pricing announcement 11 days ago and posted eight days ago asking "what's everyone using for outbound prioritization?" He's never visited your site.

  • Fit: 12 (passes gate, mid tier)
  • Behavior: 0
  • Third-party intent: 6 (mild category surge on the account)
  • LinkedIn signals: 22 (pain-point post) + 18 (competitor engagement) + 10 (company hiring) = 50, capped at 30 for the band
  • Total: 48. Band: Call now (assuming a capacity-derived threshold near 45).

A fit-heavy model ranks Dana first every time. Dana will take a polite meeting in 2027, maybe. Tomas is buying this quarter and asked publicly for recommendations. The rep who reaches him this week, opening with his own question, gets the meeting. That's what lead scoring with intent signals changes: the model surfaces the person who's ready, not the person who looks right.

Ready to see which of your prospects are Tomas right now? Run your list through Cleed. Every scored prospect comes back with the signal, the source post, and a hook drafted from it.

Step 6: Iterate Every 90 Days (the Actual Loop)

"Recalibrate monthly" is advice with no method attached. Here's the loop that works:

  1. Pull 90 days of scored prospects with outcomes. Every prospect who crossed your outreach threshold, plus a sample of those who didn't.
  2. Bucket by score band (0-20, 21-40, 41-60, 61+) and compute reply rate, meeting rate, and opportunity rate per bucket.
  3. Check monotonicity. Higher buckets should convert better at every step. If the 41-60 bucket outperforms 61+, something in the top band is inflated. Usually it's a behavior signal that's easy to trigger accidentally.
  4. Rerun lift per signal on the new 90 days and compare to the previous run. Signals whose lift dropped below 1.2 get cut. New signals (a custom one you added, a new competitor) get evaluated for the first time.
  5. Adjust one layer at a time. Change weights in one band, hold the rest, and wait 30 days. Changing everything at once makes it impossible to know what helped.
  6. Reset the threshold against current capacity, since headcount and quota both move.

Write the changes down with a date. Scoring models drift because nobody remembers why a weight is what it is.

Companies running machine learning scoring report 75% higher conversion than traditional methods, and the reason is mostly this loop. An ML model retrains on outcomes automatically. A points model only improves if a human runs the loop. If you skip it, your carefully built model is a static rules table within six months, and rules-based scoring drifts out of date silently.

Common Lead Scoring Model Mistakes

Even teams that build all three layers correctly hit the same handful of problems. Watch for these:

  • Letting fit stack with behavior. If a prospect can reach the outreach threshold on firmographics plus one ebook download, you'll flood reps with in-ICP people who aren't buying. Gate on fit, cap its points.
  • Treating email opens as engagement. Opens are inflated by privacy features and mail scanners. Score replies and clicks; ignore opens.
  • Scoring accounts and people in the same number. Third-party intent is account-level. LinkedIn signals and behavior are person-level. Keep them in separate columns even if they sum into one score, so a rep can see why the number is what it is.
  • No negative scoring. A model that only adds points produces a list that only grows. Bounced emails, disqualifying job changes, and explicit "no" replies must subtract.
  • Ignoring data quality. Nearly half of sales professionals using AI tools report that data-quality problems actively hurt their results. Scoring a list where 20% of titles are wrong produces scores that are 20% wrong. Enrich and dedupe before you weight anything.
  • Building for signals you can't act on. A signal is only worth points if it changes what the rep says. "Reacted to a post" doesn't. "Posted asking for recommendations" does, and it hands the rep the opening line.

As DemandScience notes in its intent-scoring guide, intent-based models convert at two to three times the rate of models built on company data alone. The gain only shows up if the intent signals are real, current, and specific enough to drive outreach.

The Bottom Line on Lead Scoring With Intent Signals

A lead scoring model is three questions with three different answers. Firmographics tell you who can buy, and belong in a gate. Behavior tells you who's paying attention, and needs time decay. Intent signals, especially public LinkedIn activity, tell you who's buying right now, and that's the layer that finds pipeline instead of re-sorting it.

The template weights are a starting guess. Replace them with lift from your own closed-won data, set thresholds from how many prospects your reps can actually work, and run the 90-day loop so the model keeps learning.

Here's the shortest path to the intent layer. Export your current prospect list, import it into Cleed, and get every contact scored against 11 LinkedIn buying signals with the source post and a drafted hook. Seven days free, no card required. You'll know by Friday which of your "watch" prospects are actually Tomas.