The Lead Quality Problem Every B2B Sales Team Has
Your marketing team generates 200 leads per month. Your sales team has capacity to meaningfully engage with 40. Without a systematic scoring system, the sales team cherry-picks based on brand name recognition or position title — missing high-intent SMEs from unfamiliar companies and wasting time on enterprise-branded leads who are just browsing.
Automated lead scoring solves this: a systematic, consistent, data-driven score that reflects each lead's likely fit and intent — so your sales team focuses on the 40 leads with the highest probability of converting, not the 40 with the most impressive email domains.
The Lead Scoring Model Components
A production B2B lead score combines two dimensions:
Demographic/firmographic fit score (who they are): How well does this lead match your ideal customer profile (ICP)?
- Company size (employee count or revenue range): +20 for ICP range, +10 for adjacent range, 0 for out-of-range
- Industry vertical: +15 for primary ICP verticals, +8 for adjacent verticals, 0 for non-ICP
- Job title/seniority: +20 for C-suite/VP/Director, +12 for Manager/Head of, +5 for Analyst/Specialist, 0 for unidentifiable
- Geographic market: +10 for primary markets, +5 for secondary markets, 0 for unsupported markets
- Technology stack alignment: +10 if company uses tools your product/service complements (detected via Clearbit or Builtwith enrichment)
Behavioral intent score (what they're doing): How much intent are their actions signaling?
- Pricing page visit: +25 (highest intent signal)
- Case study or testimonial page visit: +15
- Competitor comparison page visit: +20
- Demo booking page visit (even if they didn't book): +30
- Blog/resource consumption (3+ articles): +10
- Email open rate: +5 per campaign email opened
- Form submission with detailed message: +15
- Webinar attendance: +12
Composite score = fit score + intent score
- 60+: Hot (immediate sales follow-up)
- 35-59: Warm (enrollment in nurture sequence, sales outreach within 48 hours)
- Under 35: Cold (marketing nurture only, no sales outreach yet)
Building the Scoring System in HubSpot
HubSpot's native lead scoring (HubSpot Score property) handles demographic signals well. For behavioral scoring, HubSpot's contact activity tracking (page views, email engagement) feeds the score automatically.
Setting up HubSpot lead scoring:
- Navigate to Contacts → Lead Scoring
- Configure positive attributes: company size criteria, job title patterns, page view events (pricing page, case study pages)
- Configure negative attributes (factors that reduce score): invalid email domain, company size outside ICP, low engagement over 60 days
- Set HubSpot to re-calculate scores dynamically as new activities occur
Limitations of HubSpot's native scoring: No external enrichment data integration (HubSpot Score only uses HubSpot-native data), no custom scoring formula control, limited conditional logic.
Extending with n8n:Custom Scoring Logic
For more sophisticated scoring (incorporating enrichment API data, multi-source behavioral signals, or complex conditional logic), build the scoring engine in n8n and write the result back to a custom HubSpot contact property.
n8n lead scoring workflow:
Trigger: HubSpot contact activity webhook (fires when a contact has a new activity — form submission, email open, page view)
Step 1: HubSpot node → Get full contact record (all properties)
Step 2: HTTP Request → Clearbit Enrichment API (company size, industry, technology stack)
Step 3: Code node → Apply scoring formula:
const contact = $json.contact;
const enrichment = $json.enrichment;
let score = 0;
// Fit scoring
const employeeCount = enrichment.company?.metrics?.employees;
if (employeeCount >= 50 && employeeCount <= 500) score += 20;
else if (employeeCount > 500) score += 12;
const title = contact.jobtitle?.toLowerCase() || '';
if (['ceo','cto','coo','founder','vp','director'].some(t => title.includes(t))) score += 20;
else if (['manager','head of','lead'].some(t => title.includes(t))) score += 12;
// Intent scoring
const pricingVisits = contact.hs_analytics_num_page_views > 0 ? 25 : 0;
const emailEngagement = (contact.hs_email_open || 0) * 3;
score += pricingVisits + emailEngagement;
const tier = score >= 60 ? 'hot' : score >= 35 ? 'warm' : 'cold';
return { ...contact, leadScore: score, leadTier: tier };
Step 4: HubSpot node → Update contact properties: lead_score and lead_tier
Step 5: IF node → If tier changed to 'hot': Slack notification to sales, assign to senior sales rep via HubSpot workflow
Sales Routing and Alert Configuration
Lead scoring value is only realized when it drives action:
HubSpot workflow triggered by score threshold:
- Contact reaches Score ≥ 60 → Enroll in "Hot Lead" sequence: assign to sales rep, create deal in "Meeting Booked" pipeline, send internal Slack alert
- Contact reaches Score 35-59 → Enroll in "Warm Nurture" email sequence, schedule a follow-up task for sales in 48 hours
- Contact's score drops below 20 after 60 days → Move to "Re-engage" list, suppress from active sales pipeline
At Verdant Mindset, we design and implement B2B lead scoring systems for agencies and professional services. See our automation and growth services.
Scale Your Ecosystem
30-min discovery call — no cost, no pitch. We audit your digital architecture and deliver a clear operational plan.
- 01Short message with your business context
- 02Reply within 24h with a discovery-call proposal
- 03Operational plan + scope recommendation
FAQ.PROTOCOL
