Most lead scoring models give points for company revenue the lazy way: bigger company, more points. Under $10M gets 5, $10M to $100M gets 10, $100M+ gets 20, and nobody can say where those numbers came from. The result is a fit score that rewards size instead of the thing you actually care about, which is how likely a lead is to turn into revenue for your business.
Revenue range mapping fixes that. You take your own closed deals, measure how much each revenue band is worth per lead, and convert that value into points with a simple formula. The six steps below walk through the full process with a worked example, from raw CRM data to scoring rules you can paste into HubSpot, Salesforce or a spreadsheet.
How To Map Revenue Range to Points
| Step | What You Do | Output |
| 1. Pull outcome data | Export leads and closed deals with company revenue | One row per lead with revenue and outcome |
| 2. Normalize revenue into bands | Turn mixed revenue values into one set of ranges | Every lead sits in exactly one band |
| 3. Measure value per lead | Calculate win rate, deal size and value per lead for each band | A table of band performance |
| 4. Convert value into points | Index each band against the average and scale to a point range | Points for every band |
| 5. Score the gaps | Decide points for unknown revenue and conflicting data | Rules for missing and messy records |
| 6. Build and recalibrate | Add the rules to your CRM and review them on a schedule | A live fit score that stays accurate |
Step 1: Pull Lead Outcomes With Company Revenue
Start with outcomes, not opinions. Export every lead created in the last 12 to 24 months with four fields: the company’s annual revenue (or revenue range), whether the lead became a customer, the deal amount if it did, and the date. Use leads rather than only opportunities, because the point of a fit score is to judge a lead before sales has touched it.
- Window: long enough to include a full sales cycle. If deals take six months to close, leads from the last six months will look like losses when they are still open, so either exclude them or extend the window.
- Outcome: closed won counts as a win. Closed lost, disqualified and leads that never progressed all count as non-wins.
- Value: use first-year contract value or the deal amount your team reports on. Pick one and stay consistent.
- Volume: as a rule of thumb, aim for at least 30 closed-won deals in total. Fewer than that and the model will chase noise.
Step 2: Normalize Revenue Values Into One Set of Bands
Revenue data is messy. Some records hold an exact number typed by a rep, some hold a range from an enrichment tool, some hold a range from a form dropdown, and the ranges rarely line up. One source says “$10M to 50M”,anothersays”10-49.9M”,athirdsays”25,000,000″. Before you can score anything, every lead needs to sit in exactly one band.
Common Revenue Formats and How to Normalize Them
| Raw Value | Problem | How to Band It |
| 25000000 | Exact number | Place directly in the band that contains it |
| $10M – $50M | Range that matches your bands | Map one to one |
| $5M – $25M | Range that crosses two of your bands | Use the midpoint ($15M) and band that |
| 50M+ | Open-ended top range | Treat as the lower bound ($50M) |
| Under $1M | Open-ended bottom range | Band as the lowest range |
| Blank or “Unknown” | No data | Keep as its own Unknown band (see Step 5) |
Pick bands that match how your market actually splits, not round numbers for their own sake. Five to seven bands is usually right: enough to show a pattern, few enough that each band holds a decent number of deals. This Python function handles the formats above:
import re
BANDS = [(0, 1e6, “Under 1M”),(1e6,10e6,”1M to 10M”),(10e6,50e6,”10M to 50M”),(50e6,100e6,”50M to 100M”),(100e6,500e6,”100M to 500M”),(500e6,float(“inf”),”500M+”)]
UNIT = {“k”: 1e3, “m”: 1e6, “b”: 1e9}
def to_number(text):
m = re.match(r”\$?\s*([\d.,]+)\s*([kmb])?”, text.strip().lower())
if not m:
return None
return float(m.group(1).replace(“,”, “”)) * UNIT.get(m.group(2) or “”, 1)
def revenue_band(raw):
if raw is None or str(raw).strip().lower() in (“”, “unknown”, “n/a”):
return “Unknown”
s = str(raw).lower().replace(“to”, “-“).replace(“under”, “0 -“)
parts = [to_number(x) for x in s.split(“-“) if x.strip()]
parts = [x for x in parts if x is not None]
if not parts:
return “Unknown”
value = sum(parts) / len(parts) if len(parts) == 2 else parts[0]
for low, high, label in BANDS:
if low <= value < high:
return label
return “Unknown”
print(revenue_band(“$5M – $25M”)) # $10M to $50M (midpoint $15M)
print(revenue_band(“25000000”)) # $10M to $50M
print(revenue_band(“Under $1M”)) # Under $1M
Step 3: Measure Value per Lead for Each Band
Now group by band and calculate three numbers: win rate, average deal size and value per lead, which is total won revenue in the band divided by the number of leads in it. Value per lead is the number that matters, because it combines how often a band buys with how much it spends. A band with a high win rate but tiny deals can be worth less than a band that rarely buys but signs big contracts.
Here is the worked example. The data is illustrative, built to show a pattern common in mid-market B2B software, where the smallest companies convert poorly and the largest buy rarely but big.
Band Performance in the Worked Example (Illustrative Data)
| Revenue Band | Leads | Won | Win Rate | Avg Deal | Won Revenue | Value per Lead |
| Under $1M | 310 | 6 | 1.9% | $4,000 | $24,000 | $77 |
| $1M to $10M | 420 | 21 | 5.0% | $9,500 | $199,500 | $475 |
| $10M to $50M | 260 | 26 | 10.0% | $18,000 | $468,000 | $1,800 |
| $50M to $100M | 120 | 14 | 11.7% | $32,000 | $448,000 | $3,733 |
| $100M to $500M | 90 | 9 | 10.0% | $48,000 | $432,000 | $4,800 |
| $500M to $1B | 40 | 4 | 10.0% | $60,000 | $240,000 | $6,000 |
| $1B+ | 25 | 1 | 4.0% | $85,000 | $85,000 | $3,400 |
| All bands | 1,265 | 81 | 6.4% | $1,896,500 | $1,499 |
Look at the $1M to $10M band. It produces the second-most wins (21), and a size-based model would give it a few points. But each lead there is worth only $475, about a third of the average of $1,499. Meanwhile, $50M to $100M companies are worth $3,733 per lead, roughly two and a half times the average. That is the gap a data-driven map closes.
Step 4: Convert Value per Lead Into Points
Turn each band’s value per lead into an index by dividing it by the overall value per lead. An index of 1.0 means the band is average, 2.0 means twice as valuable, and 0.5 means half. Then scale the index into points:
If index >= 1: points = MAX_POINTS x (index – 1) / (highest index – 1)
If index < 1: points = MIN_POINTS x (1 – index) / (1 – lowest index)
MAX_POINTS is the most revenue can add to the fit score, and MIN_POINTS is the most it can take away. In a 100-point fit score where revenue is one of four or five criteria, +25 and -10 are sensible starting values. Average bands land near zero, the best band gets the full 25, and the worst gets the full penalty.
Merge Thin Bands Before You Score
Run the formula on the raw example and you hit a problem. The $500M to $1B band has only 4 wins and $1B+ has just 1, so their scores jump around: 25 points for one, 11 for the other, based on a handful of deals. As a rule of thumb, merge any band with fewer than 5 closed-won deals into its neighbor before scoring. Combining them into a single $500M+ band gives 5 wins and a steadier result.
Final Revenue Range to Points Map (After Merging Thin Bands)
| Revenue Band | Leads | Won | Value per Lead | Index | Points |
| Under $1M | 310 | 6 | $77 | 0.05 | -10 |
| $1M to $10M | 420 | 21 | $475 | 0.32 | -7 |
| $10M to $50M | 260 | 26 | $1,800 | 1.20 | +2 |
| $50M to $100M | 120 | 14 | $3,733 | 2.49 | +16 |
| $100M to $500M | 90 | 9 | $4,800 | 3.20 | +24 |
| $500M+ | 65 | 5 | $5,000 | 3.34 | +25 |
Fit points by revenue range in the worked example
The finished map is not a straight line. The smallest companies lose points, mid-size companies gain a little, and the strongest bands sit at $100M and up. A size-based guess would have given the $1M to $10M band positive points and treated $1B+ as the clear best, and both would have been wrong for this business.
Rounding and Simplicity
Sales teams trust scores they can understand. Once the formula gives you raw points, round them to clean numbers (for example -10, -5, 0, +15, +25, +25) if the differences are small. The formula is there to set the direction and size of each band, not to defend a single point.
Step 5: Decide How to Score Unknown and Messy Revenue
Revenue is often the most incomplete field in a CRM. How you score the gaps matters as much as the bands themselves, because a large share of new leads may arrive with no revenue at all.
Rules for Missing and Conflicting Revenue Data
| Situation | Recommended Rule | Why |
| Revenue unknown | Score the Unknown group from its own value per lead, usually near 0 | Unknown leads often behave like the average, and a penalty punishes them for a data gap |
| Revenue unknown, employee count known | Use employee bands as a stand-in, mapped the same way | Headcount is filled in more often and tracks revenue for most industries |
| Revenue and headcount disagree | Trust the more recent or more reliable source, and log the conflict | Holding companies, staffing firms and resellers can show high revenue with few staff |
| Subsidiary of a large parent | Score on the subsidiary’s revenue, unless the parent signs contracts | The buying budget usually sits with the unit you sell to |
| Nonprofit or public sector | Use budget instead of revenue, or score separately | Revenue figures for these organizations rarely reflect buying power |
Check the Unknown group’s value per lead in your Step 3 table. If unknown leads convert well, a penalty would push good leads down the queue. If they convert badly, a small negative score is fair, but it is usually better to fix the enrichment gap than to score around it.
Build the Map in Your CRM and Recalibrate It
HubSpot
In HubSpot’s lead scoring tool, fit scores are built from property-based criteria, and each rule can add or subtract points. Create a fit score group for company size, add one rule per band on the Annual revenue property (for example, “Annual revenue is between 50,000,000 and 99,999,999” adds 16), and set a group limit equal to your MAX_POINTS so revenue can never dominate the total. HubSpot allows negative points, so the penalty bands work as written. The tool needs Marketing Hub or Sales Hub Professional or Enterprise.
Salesforce
Create a number formula field on the Lead or Account object that returns the points for each band, then add it into your overall fit score field:
IF( ISBLANK(AnnualRevenue), 0,
IF( AnnualRevenue < 1000000, -10,
IF( AnnualRevenue < 10000000, -7,
IF( AnnualRevenue < 50000000, 2,
IF( AnnualRevenue < 100000000, 16,
IF( AnnualRevenue < 500000000, 24,
25 ))))))
Google Sheets or Excel
Keep the band table on a separate sheet with the lower bound of each band in column A and points in column B, sorted from smallest to largest. Then use an approximate-match lookup:
=IF(ISBLANK(C2), 0, VLOOKUP(C2, Bands!A2:B7, 2, TRUE))
Using a lookup table rather than nested IFs means you can update the points next quarter without touching the formula.
Recalibrate Every Quarter
Markets shift, pricing changes and new products open up different company sizes. Rerun Steps 3 and 4 every quarter, or after any pricing or packaging change, and compare the new points with the old ones. Move a band only if its points change by more than about five, so the score stays stable for sales. The best check of all is simple: leads with high fit scores should close at a clearly higher rate than leads with low ones. If they do not, revisit the bands.
Common Mistakes When Mapping Revenue to Points
- Scoring by size instead of value. Bigger is not always better. Enterprise deals may be large but rare, slow and expensive to win.
- Using win rate alone. A band can win often and still be worth little if its deals are small.
- Letting revenue dominate the fit score. Cap the revenue group so industry, role and region still count.
- Scoring tiny bands. A band with two wins will swing wildly from one quarter to the next. Merge it first.
- Penalizing unknown revenue by default. Missing data is a data problem, not a buyer signal, until your numbers say otherwise.
- Setting it and forgetting it. A map built two years ago reflects the business you were, not the one you are.
FAQs
What Is Revenue Range Mapping in Lead Scoring?
Revenue range mapping is the process of assigning lead scoring points to company revenue bands based on how valuable each band has been in your own sales data. It replaces guessed point values with numbers tied to win rate and deal size.
How Many Points Should Company Revenue Be Worth?
In a 100-point fit score, revenue is usually worth up to 20 to 30 points, with a small penalty of around 10 points for poor-fit bands. That keeps it meaningful without drowning out other fit criteria like industry and job role.
Should Small Companies Get Negative Points?
Only if your data shows they are worth less than average per lead. If small companies close often and cheaply in your business, they may deserve positive points.
What If I Do Not Have Enough Closed Deals?
With fewer than about 30 closed-won deals, start with a simple map based on your ideal customer profile, then replace it with data-driven points once you have enough history. Merge bands so each holds at least five wins.
Can I Use Employee Count Instead of Revenue?
Yes. The same six steps work with employee bands, and many teams score both, using employee count as a stand-in when revenue is missing.