Blog · Finance metrics and formulas · Sales teams
B2B cost per lead becomes useful when contact counts connect to qualified accounts and opportunities. Build a cohort report from campaign and CRM exports, with spreadsheet formulas and checks for account duplication and sales-cycle timing.
B2B cost per lead divides campaign spending by valid business leads, but the budget decision also needs qualified accounts and opportunities. Track contacts into buying accounts, then compare the same acquisition cohort through a shared observation cutoff.
A business can send several contacts to the same event. Those are separate people but may represent a single purchasing opportunity. Preserve the contact count for campaign CPL, and add an account view for qualification and pipeline decisions.
Write down what makes an account qualified: the required company fit, evidence of need, and sales acceptance. Name the owner who approves exceptions. HubSpot's lifecycle definitions distinguish marketing-qualified leads from sales-qualified leads and from opportunities; use those distinctions to document your own stage rules rather than treating every response as pipeline.
The generic cost per lead formula covers the initial ratio. This workflow adds account identity, later stages, and the time needed to observe outcomes.
Bring campaign spending by campaign ID and service period. From the CRM, collect lead ID, account ID, acquisition date, assigned campaign, first qualification date, opportunity ID, opportunity creation date, close date, outcome, and won amount. All money in this example is USD.
Keep separate lists for unique contacts, unique accounts, and unique opportunities. Count an account's first qualifying event once. Give each opportunity one campaign assignment under the agreed reporting rule, even when several contacts contributed to the buying process.
The example uses campaigns acquiring leads during April 2026, with outcomes observed through September 30, 2026. Both the dates and the cutoff belong on the report. Spending from another acquisition period and wins from unrelated older leads stay outside this cohort.
A US industrial services company has the following matched results. Qualified accounts are unique eligible organizations accepted by sales. Opportunities and won deals are also unique records; this example has no overlapping campaign assignments. Each qualified account has at most one opportunity here, so opportunity counts equal unique qualified accounts reaching opportunity. If an account has several opportunities in your export, count that account once for conversion and keep the deal count separate.
| Campaign | Spend (USD) | Valid contacts | Qualified accounts | Opportunities | Won deals | Won deal value (USD) |
|---|---|---|---|---|---|---|
| Search | 18,000 | 120 | 24 | 12 | 3 | 90,000 |
| Webinar | 12,000 | 200 | 20 | 5 | 1 | 30,000 |
| Partner | 10,000 | 50 | 15 | 9 | 3 | 120,000 |
| Total | 40,000 | 370 | 59 | 26 | 7 | 240,000 |
The won amounts are closed-deal values supplied by the CRM, not recognized revenue or cash receipts. Keep that distinction when sharing the table with finance.
Contact CPL = Campaign spending / Valid contacts
Cost per qualified account = Campaign spending / Qualified accounts
Qualified-account opportunity conversion = Unique qualified accounts reaching opportunity / Qualified accounts
With the table above in columns A:G and the first campaign in row 2, enter these Excel formulas:
=IF(C2=0,"N/A",B2/C2)
=IF(D2=0,"N/A",B2/D2)
=IF(D2=0,"N/A",E2/D2)
=IF(E2=0,"N/A",B2/E2)
They return contact CPL, cost per qualified account, opportunity conversion, and cost per opportunity respectively. Format the conversion as a percentage, and retain unrounded amounts behind displayed currency.
| Campaign | Contact CPL (USD) | Cost per qualified account (USD) | Qualified accounts becoming opportunities | Cost per opportunity (USD) |
|---|---|---|---|---|
| Search | 150.00 | 750.00 | 50.0% | 1,500.00 |
| Webinar | 60.00 | 600.00 | 25.0% | 2,400.00 |
| Partner | 200.00 | 666.67 | 60.0% | 1,111.11 |
| Total | 108.11 | 677.97 | 44.1% | 1,538.46 |
Each total divides summed spending or outcomes by the corresponding summed denominator. Currency is rounded to cents and conversion to one decimal place. Webinar has the cheapest contacts but the highest campaign cost per opportunity. Partner has the most expensive contacts and the lowest cost per opportunity in this observed cohort.
For contact-stage comparisons, use cost per qualified lead; do not quietly substitute accounts for leads in an existing report.
Prepare an Accounts sheet with one row per attributed account, campaign in A, acquisition date in B, and first qualification date in C. In the summary, A2 contains the campaign, H1 the cohort start, I1 the next-period start, and J1 the observation cutoff.
=COUNTIFS(Accounts!$A$2:$A$10000,A2,Accounts!$B$2:$B$10000,">="&$H$1,Accounts!$B$2:$B$10000,"<"&$I$1,Accounts!$C$2:$C$10000,">0",Accounts!$C$2:$C$10000,"<"&($J$1+1))
The positive qualification-date condition excludes blanks. The final condition includes qualification timestamps throughout the cutoff date. Microsoft's COUNTIFS documentation explains that every supplied criterion must match for a row to count. This requires real spreadsheet dates and one row per account, not repeated contact rows. Extend the ranges to include the full export.
Reconcile the campaign costs to the spending export: $18,000 plus $12,000 plus $10,000 equals $40,000. Rebuild the stage totals from the unique source records: 370 contacts, 59 qualified accounts, 26 opportunities, and 7 wins.
Tie won amounts to the selected closed deals: $90,000 plus $30,000 plus $120,000 equals $240,000. Review unmatched IDs and opportunities assigned to more than one campaign before accepting that tie.
Then compare cohorts with equivalent follow-up. Keep open opportunities visible and retain earlier report cutoffs so late wins do not rewrite the historical view without explanation. A strong observed campaign can still have uncertain future results, especially when only a few deals have closed.
Before moving budget, review delivery costs and customer acquisition cost. Won deal value does not establish customer profitability. Use cost per lead by channel when shared channel costs also need allocation.
Covirage is not affiliated with Microsoft or HubSpot.
Bring campaign spending and a sample of your own CRM exports with account IDs and stage dates. Covirage maps the columns, and its tools compute and check the figures; the external AI model explains the results with every figure traced to its rows. Create a free Covirage account, then set up your business and bring a sample of your own data.
See Covirage for sales teams for the supporting context.
A useful target depends on the offer, account value, lead definition, and downstream conversion. Compare mature cohorts with matching cost scopes. A campaign can support a higher CPL when its qualified accounts convert more often or generate stronger customer economics.
Keep both when a buying group contains several contacts. Contact CPL measures the cost of generating individual inquiries; cost per qualified account measures entry into eligible buying organizations. Label the denominator explicitly and deduplicate each account before comparing account-level outcomes.
Its leads may still be progressing through the sales cycle. Report the acquisition cohort, observation cutoff, and open opportunities. Compare cohorts after equivalent follow-up periods rather than reading immature revenue as a final judgment on lead quality.
It is a narrower ratio unless the cost scope includes all applicable acquisition expenses. Campaign spend can omit sales labor, commissions, and other acquisition costs. Keep the campaign measure labeled and calculate fully loaded customer acquisition cost separately.