A good lead scoring model scores every lead on two separate axes: fit (does the company and person match your ICP) and engagement (are they showing buying intent). A lead becomes an MQL only when it clears both thresholds, or when a fit contact requests a demo. Negative scores, disqualifiers and decay keep stale or junk leads out.
Single-number scores fail because they let enough blog visits from a student outrank one pricing-page visit from a VP at a perfect-fit account. Keep the axes separate.
| Fit score | Engagement score | |
|---|---|---|
| Question it answers | Should we ever sell to this company and person? | Are they trying to buy right now? |
| Built from | Firmographics, persona, technographics, region | Forms, page views, email clicks, events, product usage |
| Data source | Form fields plus enrichment | Marketing automation and product analytics |
| How often it changes | Rarely; re-enrich every 6 months | Daily |
| Decays? | No | Yes, by behavior type |
| Who owns the inputs | RevOps with sales leadership (ICP) | Marketing ops with demand gen |
| Typical failure | Scoring what is easy to capture instead of what predicts closed-won | Rewarding volume of activity over intent of activity |
| Salesforce Account Engagement name | Grade (A–F) | Score |
Start the fit side from your ICP, not from available fields. If you have not written it down, the ICP Fit Planner turns it into a weighted scoring matrix you can paste into the table below.
Score 3–5 categories, each independently. Typical: company size or segment, industry or vertical, persona seniority, department, and region or tech stack.
Every category ends with “Unknown” worth 0. Blank enrichment should not count against a lead, and should not count for it.
Drop categories that do not predict wins. If employee count does not separate your closed-won from closed-lost, score the operating metric that does (seats, locations, loan volume, portfolio size).
| Option tier | Example | Points |
|---|---|---|
| Primary ICP segment | B2B SaaS, 100–1,000 employees | +20 to +25 |
| Strong sub-vertical | Fintech or vertical SaaS | +18 to +22 |
| Adjacent / accept if inbound | 50–99 employees | +10 to +15 |
| Weak / verify before routing | Services firm using your category | +5 |
| Unknown | Enrichment blank | 0 |
| Seniority | Example titles | Points |
|---|---|---|
| C-level / owner | CEO, CRO, CMO, founder | +15 |
| VP / Director / MD | VP Sales, Director of RevOps | +12 |
| Manager / priority title | Marketing Ops Manager | +8 |
| Individual contributor / champion | Analyst, admin | +5 |
| Unknown | No title captured | 0 |
With these defaults a clear segment fit with a known VP persona scores about 32–37 fit points, which is why the sample fit threshold below is 30. Set your threshold just under the score of a clear-fit lead whose enrichment is still partly blank.
| Tier | Behavior | Points | Expires after |
|---|---|---|---|
| Handraiser | Demo request | +40 (auto-MQL if fit) | Never, until worked |
| Handraiser | Contact sales / talk to an expert form | +35 (auto-MQL if fit) | Never, until worked |
| High intent | Free trial or freemium signup | +30 | 60 days |
| High intent | Pricing page view | +20 | 30 days |
| High intent | Webinar or event attended | +20 | 90 days |
| High intent | Comparison, integration or case study page | +20 | 30 days |
| Medium intent | Gated content download | +10 | 60 days |
| Medium intent | Webinar registration (no attend) | +10 | 60 days |
| Low intent | Marketing email click | +5 | 30 days |
| Low intent | Blog or repeat homepage visit | +4 | 30 days |
| Negative | Careers page visit | −20 | 90 days |
| Negative | Email unsubscribe or hard bounce | −15 | Permanent |
| Negative | No activity in 90 days | Reset to 0 |
Each behavior counts once per expiry window, and low-intent behaviors are capped at 10 points in total, so blog binges cannot create an MQL. Only signals that clearly mean “I want to talk to sales” are handraisers. Event registrations and content downloads are interest, not a request, so score them as high or medium intent. For intent data from third-party signals, see Intent Signals.
With the sample tables above: fit of 30 or more and engagement of 20 or more makes an MQL. That requires one high-intent action or two medium ones. A single page view never qualifies.
| Condition | Status | Action | SLA |
|---|---|---|---|
| Any disqualifier is true | Disqualified | Suppress from sales queues, ads and nurture | Immediate |
| Handraiser + fit ≥ 30 | MQL (auto-qualify) | Route to owner, alert in real time | First touch < 5 min |
| Handraiser + fit < 30 | Lead, confirm fit | SDR verifies ICP before routing to an AE | Same business day |
| Fit ≥ 30 and engagement ≥ 20 | MQL | Route to SDR or AE by territory | First touch < 1 hour |
| Fit ≥ 30, engagement < 20 | Lead, nurture | ABM and nurture tracks; watch for intent spikes | None |
| Fit < 30, engagement ≥ 20 | Lead, verify | Enrich, then self-serve or partner route | None |
| Both below threshold | Lead | Low-touch nurture only | None |
Engagement is perishable. Without decay, a lead who read three posts last year looks as hot as one who visited pricing yesterday.
| Rule | Default |
|---|---|
| Engagement, no new activity 30 days | −25% of engagement points |
| Engagement, no new activity 60 days | −50% of engagement points |
| Engagement, no new activity 90 days | Reset to 0 |
| Per-behavior expiry | Page views 30 days, content 60, events 90 |
| Handraisers | Never decay until sales works them |
| Fit score | No decay; re-enrich every 6 months |
| Recycled MQLs | Engagement resets to 0 when sales recycles |
| Disqualifier | Why it is out |
|---|---|
| Competitor domain | Research, not purchase |
| Outside served regions | You cannot sell or support there |
| Student, job seeker or careers-page visitor | No buying authority |
| Personal or invalid email | Cannot be matched to an account (B2B only) |
| Disqualified titles | Roles that never buy or influence |
| Existing customer contact | Route to CS or expansion, not new business |
| Below minimum company size | Product or price does not fit |
Disqualifiers override every score. Keep them in their own property so you can report how many leads each one removes; a disqualifier that removes nothing should be retired, and one that removes 40% of inbound is a targeting problem upstream.
Fit_Score__c as a formula over picklists (industry, size, seniority) and Engagement_Score__c as a number field updated by Flow from tracked activities.Last_Engagement_Date__c field.Before you migrate a scoring model (for example Pardot grading to HubSpot fit scoring), back-test the new model on the old model’s closed-won set so MQL volume does not jump or crash on cutover. See Pardot to HubSpot migration.
Pre-loaded with an illustrative lead: a VP at a primary-ICP company who viewed pricing and attended a webinar.
We turn your ICP into a working, editable scoring workbook, validate it with sales, then build it in HubSpot or Salesforce.
We engineer growth systems. JayOh builds the RevOps architecture, GTM execution and data infrastructure that turn messy revenue operations into predictable pipeline for B2B SaaS and PE-backed teams.