In short: A PQL score doesn't need machine learning. Combine a firmographic fit score (0-50 points, from company data) with a usage score (0-50 points, from product events) into a single 100-point scale, set routing bands, and re-tune every 30 to 60 days against real conversions.
Most PLG teams treat PQL scoring like it needs a data science team and a quarter of runway. It doesn't. It needs a spreadsheet, eight to ten signals, and an afternoon. The model that gets you 80% of the value is a weighted point system you can build today and tune next month.
Here's the version that actually works.
The mistake: scoring usage alone
A PQL score built only on product usage has a blind spot. A university student running your analytics tool five hours a day looks identical, behaviorally, to a VP at a 400-person company doing the same thing. One of them will never buy anything. This is the "power user with no budget" problem, and it's the single most common reason PQL scores misfire: they measure engagement without measuring whether the account could ever become a customer.
The fix isn't complicated. Score two things separately, then combine them: fit (does this account match your ICP) and usage (are they getting value from the product). A account that scores high on both is a real PQL. High usage with low fit is a power user, not a lead. High fit with low usage just signed up and hasn't done anything yet. Different problems, different treatment, and a single blended score hides the difference.
Building the fit score
Fit comes from firmographic data: company size, industry, funding stage. Pull it once at signup (this is exactly what company enrichment is for) and keep it static; it doesn't change day to day the way usage does.
Keep it to four or five signals. More than that and the model gets noisy without getting more accurate.
| Signal | Points | Why it counts |
|---|---|---|
| Employee count in your ICP range | 20 | The single strongest fit predictor for most B2B tools |
| Industry matches your ICP list | 15 | Filters out accounts that will never need the product |
| Company has raised funding (seed through Series C, or your equivalent) | 10 | Proxy for budget authority and growth stage |
| Domain isn't a free consumer email provider | 5 | Cheap signal, catches personal-project signups early |
That's 50 points max for fit. Adjust the point values to match what actually predicts conversion for your product, not what predicts it for someone else's.
Building the usage score
Usage comes from product events, and it should weight the actions that are hardest to fake and closest to real value.
| Signal | Points | Why it counts |
|---|---|---|
| Hit the free-tier limit | 20 | Direct signal they're getting enough value to run into a wall |
| Invited a teammate or created a second API key | 15 | Multi-user adoption is the strongest expansion signal in B2B |
| Active 3+ days in the first week | 10 | Consistency beats a single burst of activity |
| Visited the pricing page | 5 | Closest behavioral signal to buying intent |
Also 50 points max. Combined with fit, that's a 100-point scale, which makes the bands below easy to reason about without a lookup table.
If your product has an obvious category-specific signal, weight it in. Collaboration tools should weight team invites more heavily since single-user adoption rarely turns into an enterprise deal. Data and integration products should weight connected integrations, since a data tool with no integrations is providing limited value regardless of how often someone logs in.
Setting the routing bands
A score means nothing until it triggers an action. Here's a starting set of bands:
| Score | Band | Action |
|---|---|---|
| 0-29 | Not yet | Self-serve only, no outreach |
| 30-59 | Warm | Add to a lifecycle email sequence |
| 60-79 | PQL | In-app nudge, or a lightweight async check-in |
| 80-100 | Hot PQL | Direct outreach, same-day if you can manage it |
These numbers are a starting point, not a target to hit. Set them, run them for 30 to 60 days, then compare which bands actually converted and adjust. A model that never gets revisited after launch is a worse guess than the one you started with, because it accumulates false confidence instead of accuracy.
Shipping it
You don't need a scoring platform to start. A weighted sum is a weighted sum whether it runs in a spreadsheet or a script. Here's the whole model as code, using EnrichLoops for the fit half and your own event data for the usage half:
async function scorePQL(domain, usageEvents) {
const company = await fetch('https://api.enrichloops.com/v1/company', {
method: 'POST',
headers: { Authorization: `Bearer ${process.env.ENRICHLOOPS_API_KEY}` },
body: JSON.stringify({ domain })
}).then(r => r.json());
let fit = 0;
if (company.employee_count >= 11 && company.employee_count <= 500) fit += 20;
if (icpIndustries.includes(company.industry)) fit += 15;
if (company.funding_stage && company.funding_stage !== 'bootstrapped') fit += 10;
if (!freeEmailDomains.includes(domain)) fit += 5;
let usage = 0;
if (usageEvents.hitFreeTierLimit) usage += 20;
if (usageEvents.invitedTeammate) usage += 15;
if (usageEvents.activeDaysThisWeek >= 3) usage += 10;
if (usageEvents.visitedPricingPage) usage += 5;
return { fit, usage, total: fit + usage };
}
Run this on signup for the fit half (one API call, cached against the domain), and on a nightly job or event trigger for the usage half. You don't need real-time scoring for a v1. Daily is fine.
Checklist
- Pick four or five fit signals and four or five usage signals. Stop there for version one.
- Assign point values based on what you believe predicts conversion, not what feels comprehensive.
- Set routing bands and connect each one to an actual action, not just a label in a dashboard.
- Ship it, even with your best-guess weights. A live model beats a perfect model still in a spec doc.
- After 30-60 days, pull which bands actually converted and which signals showed up in every conversion versus none of them. Drop the signals that aren't predictive. Reweight the ones that are.
FAQ
What is a PQL scoring model?
A PQL (product qualified lead) scoring model is a weighted point system that combines firmographic fit (does the account match your ICP) with product usage (are they getting real value) into a single score used to route leads.
How many signals should a PQL scoring model use?
Stick to four or five fit signals and four or five usage signals for a first version. More than eight to ten signals total tends to make the model noisier without making it more accurate.
What's the difference between fit and usage in PQL scoring?
Fit measures whether an account could ever become a customer: company size, industry, funding stage. Usage measures whether they're actually getting value from the product right now. A high score on only one of the two isn't a real PQL.
How often should a PQL scoring model be re-tuned?
Review it every 30 to 60 days against actual conversion outcomes, drop signals that aren't predictive, and reweight the ones that are.
Where EnrichLoops fits
The fit half of this model needs firmographic data on every signup, not just the ones that already look promising. EnrichLoops covers exactly that: employee count, industry, location, on the free tier at 100 enrichments a month, self-serve with no sales call. The usage half is already sitting in your own product analytics. Combine them and you have a working PQL model before the end of the day.