How to set up lead scoring in HubSpot (the 2026 guide)
This is a current setup guide for HubSpot lead scoring, written after the August 2025 sunset of the legacy HubSpot Score property. Most older guides on the internet describe a tool that no longer exists. The flow below is the new tool, with a focus on getting to a defensible scoring model in an afternoon, not three weeks.
If you migrated under duress in 2025 and the result has been quietly underperforming, the same guide works as a rebuild. Most teams need one.
Step 0: know what your tier supports
Before you touch anything, know your constraints. The new tool ships materially different capabilities depending on your Marketing Hub tier.
Marketing Hub Professional:
- Total scores capped at 100 points
- No AND/OR compound conditions inside a single rule
- No count-based engagement signals (number of page visits, marketing emails opened)
- Either an Engagement score or a Fit score per object, not both as a Combined score
- Decay supported per event group
Marketing Hub Enterprise:
- Higher score caps
- AND/OR logic per rule
- Count-based engagement signals available
- Combined score (Engagement + Fit composite) with auto-generated A1–C3 threshold matrix
If you’re on Pro, several decisions below get forced for you. We’ll flag them.
Step 1: decide your scoring model
You have three model shapes to choose from in the new tool: an Engagement score, a Fit score, or a Combined score that merges the two (Enterprise only).
Pick based on your team’s actual workflow:
- Engagement-only is fine if your sales team already knows the ICP cold and just needs activity signals. Most B2B teams shouldn’t pick this.
- Fit-only is fine if your inbound is small enough that any qualified lead is worth a call regardless of activity. Most teams shouldn’t pick this either.
- Combined is the right shape for almost every B2B SaaS team. It exposes the question of “is this person + company a fit and are they engaged” in a single matrix. On Enterprise, this is what HubSpot encourages by default. On Pro, you can’t build it natively, and you’ll need to either upgrade, build a manual composite in workflows, or use a layer like kenbun.
The rest of this guide assumes you’re building toward a Combined score (or its manual equivalent on Pro).
Step 2: build your Fit score
Navigate to Settings > Properties > Scoring and create a new Fit score on the Contact object.
Fit is two questions stacked: Profile Fit (the person) and Account Fit (the company). HubSpot’s tool lumps both into one Fit score, which is workable but loses some resolution. We recommend separating them in your rule structure even when the tool puts them in one property.
Profile Fit rules to add (positive):
- Job title contains “Director”, “VP”, “Head”, “Chief” → +15
- Function (custom property or inferred) is RevOps, Marketing Ops, Demand Gen, or your buyer persona → +15
- Email domain is a real corporate domain (not gmail/yahoo/etc.) → +5
Profile Fit rules to add (negative):
- Job title contains “Student”, “Intern”, “Founder of [solo LLC]” → −10
- Email domain is a known free-tier provider → −10
Account Fit rules to add (positive):
- Company size in target band (set the property based on your ICP) → +20
- Industry matches your closed-won verticals → +10
- Tech stack signals (uses HubSpot, Salesforce, or whatever you integrate with) → +10
- Recent funding, hiring spike, or growth signal → +5
Account Fit rules to add (negative):
- Company size below your minimum ICP band → −15
- Geography you don’t currently serve → −10
The numbers above are starting points, not gospel. Step 6 calibrates them.
Pro Hub note: if you can’t do AND/OR inside a single rule, write each criterion as a separate rule. Write fewer rules with cleaner criteria, and don’t try to recreate compound logic by stacking redundant rules.
Step 3: build your Engagement score
Create a separate Engagement score on the Contact object.
Engagement is about recent activity, not lifetime activity. You want to score what the lead is doing now, not what they did six months ago. This is where decay configuration in Step 4 becomes critical.
Engagement rules to add (positive):
- Submitted a “Contact us” or “Talk to sales” form → +20
- Visited the pricing page → +10
- Visited a product/feature comparison page → +10
- Requested a demo → +25
- Started a free trial (if applicable) → +25
- Replied to a sales email → +15
Engagement rules to add (lower or negative):
- Visited only the homepage and bounced → 0 or +1 (not enough to register)
- Email unsubscribe → −20
- Hard bounce on email → −5
Pro Hub note: count-based signals like “visited pricing page 3+ times in a week” aren’t available on Pro. You can score “visited pricing page” as a binary trigger, but the count threshold isn’t exposed. This is one of the bigger gaps on the Pro tier.
Step 4: configure decay
Decay is what keeps your engagement score honest as activity ages. HubSpot’s modern tool supports decay per event group: you can configure a group of events to lose a fixed percentage of their score over a fixed period.
The constraint: decay is per group, not per event. Every signal in a group decays at the same flat rate. So you need to think about decay groupings.
A reasonable starting structure:
Group 1, long half-life (decays slowly): whitepaper downloads, demo requests, free trial signup, replies to sales sequences. These represent real time investment and stay warm for weeks. Configure ~25% decay over 60 days.
Group 2, medium half-life: quality page visits (pricing, comparison, integrations), webinar attendance. Configure ~50% decay over 30 days.
Group 3, short half-life: generic page visits, single-page bounces, cold ad clicks. Configure ~75% decay over 14 days, or simpler, score them so low at the source that decay barely matters.
Hard constraint: in HubSpot, decay and timeframe filters are mutually exclusive per group. If you set a hard timeframe (“only count events from the last 90 days”), you can’t also apply decay to that group. Pick one or the other per group.
If you want different events within a group to decay at different speeds, you’ll need to split them into more groups. The configuration cost grows quickly. This is one of the gaps a layer like kenbun solves natively with per-event half-life decay.
Step 5: set thresholds and tier labels
HubSpot auto-generates a threshold property when you turn on a score. For single scores (Engagement only or Fit only), the labels default to High / Medium / Low. For Combined scores, the matrix uses A1–C3 (3 fit tiers × 3 engagement tiers).
Set the thresholds based on what your team will act on:
- Hot (A1, A2, B1): AE works it within 24 hours. This should be a small, sortable list.
- Warm (B2, A3, B3): SDR works it this week. Medium volume.
- Nurture (C1, C2): marketing nurture sequence; not yet for sales touch.
- Pass (C3): disqualified; recheck quarterly in case of ICP drift.
The single most important calibration here is matching your Hot band volume to your sales team’s actual capacity. If your AEs can each work 20 leads a week and you have 5 AEs, your Hot band should produce roughly 100 leads/week. If it produces 800, your thresholds are too generous. If it produces 12, they’re too tight.
Step 6: validate against your closed-won data
This is the step almost nobody runs, and it’s the most important.
Build a HubSpot Custom Report comparing MQL→SQL conversion rate by score band over the last 90 days. Group by your Hot / Warm / Nurture / Pass tiers (or A1–C3 if you’re on the Combined matrix). The numbers should look something like:
- Hot: 25–40% MQL→SQL conversion
- Warm: 10–20%
- Nurture: 2–8%
- Pass: <2%
If your bands are flat (Hot converting at the same rate as Warm or Nurture), your scoring isn’t predictive and the rules need tuning before you trust the score for anything quota-affecting. If the bands are inverted, something is structurally wrong (typically: a fit rule that’s pointing in the wrong direction).
This is the single most important habit to build, and HubSpot doesn’t make it easy. The Lead Score History view shows you score values over time, but not conversion rates by band; you have to construct that report manually. Run it monthly. The day Hot starts converging with Warm, you have a drift problem.
Step 7: ship alerts
The score doesn’t do anything until your team acts on it. Wire up alerts:
- Slack channel for new Hot leads: include the score broken down by dimension if you can, and the specific rule that triggered the threshold cross. Native HubSpot Slack notifications are limited to property values; if you want a real score breakdown in the alert, you’ll either build it via Operations Hub custom-coded actions or use a layer that ships this natively.
- Email digest for Warm: daily summary, not real-time; reps work these on a queue cadence.
- Workflow for Nurture: auto-enroll into a nurture sequence aligned to the segment.
The alert is where most scoring projects die, because the team builds the score perfectly and then the queue is invisible. Spend at least as much time on the alert as you did on the rules.
Common mistakes
A few traps worth flagging up front:
Building rules without an ICP. Lead scoring rewires whatever ICP definition is in your model. If your ICP is fuzzy, your scoring will be fuzzy. Tighten the ICP first, build the rules second.
Ignoring Account Fit. Most failure modes in HubSpot scoring trace back to scoring the person and ignoring the company. Account Fit is half the model.
Setting thresholds before calibration. Don’t pick “80+ is Hot” out of thin air. Run the validation report first; let the data tell you where the thresholds are.
Forgetting to negative score. Models that only ever go up eventually score everyone Hot. Use negative rules on Fit, especially Account Fit (wrong size, wrong geo, wrong industry).
Treating the model as static. Calibrate quarterly. Your ICP drifts; your model should too.
When to use a layer like kenbun
The HubSpot setup above produces a working scoring model. It also produces a model with three known limits:
- Decay is per event group, not per event. Different signal types can’t have different half-lives within the same group.
- There’s no built-in conversion lift report. You build it yourself in Custom Reports and run it manually.
- Slack alerts can’t render a score breakdown by dimension natively; that requires Operations Hub plumbing.
These are the gaps kenbun fills. kenbun runs on top of HubSpot, scores natively across four dimensions (engagement, profile fit, account fit, deal context), ships per-event half-life decay, calibrates against your actual closed-won data on demand, and sends Slack alerts with the score breakdown and triggering events embedded in every message.
If you want the setup above without the manual calibration, the limited decay, and the Operations Hub project: Book a Demo and we’ll run the four-dimension model on your actual HubSpot data, with per-event half-life decay, the conversion-lift report, and dimension-broken-down Slack alerts visible the same day.