A team turns on lead scoring with default rules, watches the score column populate, and never looks at it again. Three quarters later the score has zero correlation with conversion and sales ignores it. Lead scoring is one of those features that takes a weekend to set up and a year of discipline to make useful. The scoring logic is the easy part; the calibration loop is what separates portals where scoring drives action from portals where it does not.
Predictive vs manual
Manual scoring:
Rule-based, you assign points per signal
Available on Marketing Hub Pro+
Transparent: you can explain any score
Right starting point for most teams
Predictive scoring:
ML-based, HubSpot trains on your historical data
Marketing Hub Enterprise
Higher accuracy when you have 1000+ historical conversions
Black box: harder to explain individual scores
Start manual. You control the logic and reps trust scores they understand. Add predictive once you have a baseline to compare against.
Multiple score properties, not one composite
A single number reduces information. Build separate scores per dimension and a composite for routing decisions:
Property: fit_score
Industry match +20
Company size in range +15
Geography in target +10
Has compliance need +10
Property: engagement_score
Form submission +10 per
Pricing page visit +5 per
Demo request +25
Email reply +15
Meeting attended +20
Property: composite_score
Calculated: 0.6*fit + 0.4*engagement
Reports filter on the right dimension for the question. Sales asks about engagement; marketing asks about fit; routing uses composite.
Workflow triggers on score bands
Use bands rather than hairline cutoffs. A contact at 59 should not be treated radically differently from a contact at 61:
Composite < 30 -> nurture only
Composite 30-49 -> sales-aware nurture, no SDR action
Composite 50-69 -> SDR cadence, low priority queue
Composite 70-89 -> SDR cadence, high priority queue
Composite 90+ -> AE direct routing
Set workflow triggers on band entry. Reps see priority changes; nurture programs adjust automatically.
Engagement score decay
A contact engaged 18 months ago should not score the same as one engaged last week. Decay engagement points over time:
Workflow: Decay engagement score
Trigger: scheduled, daily
Action: for each contact with engagement_score > 0
multiplier = 0.99 (loses 1% per day)
new_score = max(0, engagement_score * multiplier)
Half-life of about 70 days fits most B2B cycles. Faster for high-velocity SMB; slower for long enterprise cycles.
Calibration loop
Quarterly, pull the actual conversion rate by score band:
Score band Count Converted to SQL Conversion rate
0-29 8200 98 1.2%
30-49 2300 140 6.1%
50-69 800 180 22.5%
70-89 220 122 55.5%
90+ 65 51 78.5%
If a band’s conversion rate jumps unexpectedly, investigate. If 80 percent of leads land above MQL threshold, your rules over-score. If 5 percent do, you under-score. Adjust rules and re-baseline.
Negative scoring
Subtract for disqualifiers, do not just exclude:
Free email domain -10
Job title in [intern, student] -15
Country not served -50
Existing customer skip workflow entirely
Negative scoring keeps the data while keeping the queue clean. Excluded contacts vanish from analysis; subtracted ones stay visible.
Score-driven routing
Routing logic:
Composite >= 90 + Industry = Enterprise -> Strategic AE
Composite >= 90 + Industry = Mid-market -> Mid-market AE
Composite 70-89 -> SDR queue, named priority
Composite < 70 -> Marketing nurture
Document the routing in one shared sheet so leadership can audit the path any lead took.
What to do this week
Build separate fit and engagement scores if you do not have them, audit current score distribution against actual conversion, add decay if engagement is static, and schedule the next quarterly calibration before reviewing the deck for leadership.