Lead scoring hub → HubSpot template
HubSpot Lead Scoring Template: Drop-In Properties + Workflow
The 8 custom properties and 4 workflows that run lead scoring across 127 audited B2B SaaS companies. Copy the data model, paste the point values, route leads on threshold. Setup is 90 minutes if you have admin access.
A working HubSpot lead scoring system needs 8 custom properties (Fit Score, Intent Score, Total Lead Score, Lead Tier, Last Score Update, Score Decay Pause, Routing Owner, Last High-Intent Action) and 4 workflows (Fit calculation, Intent calculation, daily recalc + decay, tier assignment + routing).
Step 1: Create the 8 custom properties
Settings → Properties → Create Property. Object: Contact. Group: "Lead Scoring" (create if it doesn't exist).
| Property | Internal name | Type | Range | Notes |
|---|---|---|---|---|
| Fit Score | fit_score | Number | 0-50 | Sum of firmographic point values |
| Intent Score | intent_score | Number | 0-50 | Sum of behavioral point values, decays |
| Total Lead Score | total_lead_score | Calculation | 0-100 | Calculated: fit_score + intent_score |
| Lead Tier | lead_tier | Single-line text | Hot/Warm/Cold/Disqualified | Set by tier-assignment workflow |
| Last Score Update | last_score_update | Date | Timestamp | Updated on every recalculation |
| Score Decay Pause | score_decay_pause | Single checkbox | true/false | Manual override to freeze decay |
| Routing Owner | routing_owner | HubSpot user | User reference | Set by tier-assignment workflow |
| Last High-Intent Action | last_high_intent_action | Single-line text | Action name | Audit trail for why they crossed threshold |
Total Lead Score is a Calculation property type. Formula: fit_score + intent_score. HubSpot recalculates it whenever either input changes — no workflow needed for the math itself.
Step 2: Workflow #1 — Fit Score on firmographic change
Enrollment trigger
Contact property value changes — any of: industry, numberofemployees, annualrevenue, tech_stack_x.
Action sequence
For each firmographic attribute, set or copy a point value into fit_score. Standard B2B SaaS allocations:
- • Industry matches ICP (SaaS, fintech, health-tech) → +12 points
- • Employee count 50-500 → +10 points (200-2,000 → +12)
- • Annual revenue $5M-$50M → +10 points
- • Has core tool in stack (e.g. HubSpot, Salesforce, Outreach) → +8 points
- • Geo: US, Canada, UK, Australia → +5 points; EMEA non-UK → +3
Cap fit_score at 50. The cap is critical — without it, an over-firmographic match (perfect industry + perfect size + perfect stack) can drown out intent signals.
Step 3: Workflow #2 — Intent Score on behavior
Enrollment trigger
Any of: form submission, page view (Marketing Hub Pro+ tracking), email engagement event, list membership change.
Branch logic by event type
- • Demo request form submit → +15 points + set
last_high_intent_actionto "demo_request" - • Pricing page viewed 3+ times → +12 points + set action to "pricing_revisit"
- • Case study downloaded → +10 points + set action to "case_study_dl"
- • ROI calculator completed → +10 points + set action to "calculator_complete"
- • Webinar attended → +8 points
- • 5+ email opens (one campaign) → +6 points
- • Blog post viewed → +2 points
- • Email unsubscribe → set
intent_scoreto 0 + setlead_tierto "Disqualified"
Cap intent_score at 50. Increment, don't overwrite — use the "Increase property value" action so concurrent events stack instead of racing.
Step 4: Workflow #3 — Daily recalc + decay
Enrollment trigger
Daily at midnight UTC. Filter: score_decay_pause is false AND last_high_intent_action was 7+ days ago.
Action
Multiply intent_score by 0.9. After 60 days of no high-intent action, branch: set intent_score to 0 and re-evaluate lead_tier.
Update last_score_update to now() on every run. The decay rule keeps stale "warm" leads from clogging the AE queue forever.
Decay is the most-skipped workflow and the most expensive omission. Why intent expires covers the math in detail.
Step 5: Workflow #4 — Tier assignment + routing
Enrollment trigger
total_lead_score property value changes.
Branch logic
- • Score 80+ →
lead_tier= "Hot", assignrouting_ownerto next AE in round-robin, send Slack alert with full context, set lifecycle stage to SQL - • Score 60-79 →
lead_tier= "Warm", assign to next BDR, enroll in a 24-hour qualification cadence - • Score 40-59 →
lead_tier= "Cold", marketing nurture only, re-evaluate monthly - • Score under 40 →
lead_tier= "Disqualified", suppress from outreach
The Slack alert payload should include: contact name + email, company, score breakdown (Fit / Intent / Total), the triggering action (last_high_intent_action), and a one-click link to the contact record. Without context, AEs ignore the alert.
Routing is the gate, sequencing is the action. A lead that crosses 80 and waits 4 hours for a manual reply still loses 50% of its conversion potential. Sequence Hot leads automatically with Amplemarket the moment the tier-assignment workflow flips them — no human handoff between threshold cross and first-touch. Official Artemis GTM partner. Affiliate link.
Common mistakes
- Letting Fit Score uncap. An over-firmographic match (perfect industry + perfect size + perfect stack) drowns out intent. Cap fit at 50, period.
- Using "Set property value" instead of "Increase property value". Concurrent behavior events race and overwrite each other. The Increase action accumulates.
- Skipping decay. A six-month-old "warm" lead with a score of 65 that never re-engages is dead but stays in the AE queue forever. Decay is what keeps the queue honest.
- Not logging which action crossed the threshold. Without
last_high_intent_action, AEs get a Slack alert that says "this lead is Hot" with no idea what just happened. They ignore it. Always log the trigger. - Tying compensation to score before calibration. Don't pay AEs on tier movements until you've seen 60 days of conversion data and confirmed your thresholds predict revenue. Bad thresholds + comp tied to them = AEs gaming the system.
Beyond Fit + Intent
This template runs the standard Fit + Intent model that works in any CRM. Once it's stable, the next evolution is Pain-First ICP Scoring — a 10-point framework that weights pain signals at 80% and firmographics at 20%. Pain-First handles the case where two prospects with identical firmographics and engagement still convert at completely different rates.
Frequently asked
Which HubSpot tier do I need for this template?
Marketing Hub Professional or Sales Hub Professional minimum. Workflow tools are gated behind the Pro tier. The custom properties themselves work on free, but you'll have to recalculate scores manually without workflows. If you're on free, the template still gives you the data model — just expect more manual upkeep.
How long does the full setup take?
Roughly 90 minutes for an admin who knows HubSpot. Property creation is 20 minutes, the four workflows are 15 minutes each, and routing rules + Slack alerts add 10 minutes. Add another 30 minutes for testing on a small batch before flipping the workflows live.
Can I run this alongside HubSpot's predictive lead scoring?
Yes, but pick one as the source of truth for routing. Predictive scoring uses HubSpot's ML model on your historical data — it's a black box. The custom-property model in this template is rule-based and explainable. Most teams use the custom model for routing and keep predictive as a sanity check in reports.
What happens to lead scores when contacts unsubscribe or go dormant?
The decay workflow handles that. Intent Score multiplies by 0.9 every 7 days of inactivity (no email opens, no page views, no form fills). After 60 days the workflow zeroes Intent Score and re-evaluates Tier. Fit Score never decays unless firmographics change — those are static attributes.
How do I know if my point allocations are right?
Wait 60 days, then pull a report grouping closed-won deals by their Total Lead Score at the moment of conversion. If your top quartile of deals all scored 70+, your thresholds are calibrated. If closed-won is spread evenly across all score bands, your model isn't predictive yet — adjust point weights based on which firmographic and behavior signals show up in the won deals.
Related
- Lead scoring hub — the full Fit + Intent framework, the parent of this template
- Salesforce version of this template
- Why intent expires — the decay math behind workflow #3
- BDR queue routing from lead scores — what happens after Workflow #4 hands off
- Pain-First ICP Scoring — the next evolution beyond Fit + Intent