Sign in

Blog · Finance metrics and formulas · Sales teams

B2B cost per lead: compare quality and conversion

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.

The short answerB2B cost per lead is campaign spending divided by valid business leads. Compare it with cost per qualified account, opportunity conversion, and outcomes from the same lead cohort. Multiple contacts can belong to one buying account, so contact volume alone can mislead. Use consistent qualification rules and the same observation cutoff before deciding which campaign deserves more spending.

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.

Define the lead and the account before comparing

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.

Step 1: collect exports with stable identifiers

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.

Step 2: build the campaign cohort table

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.

Step 3: calculate costs and conversion

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.

Step 4: reproduce the qualified account count

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.

Step 5: check the totals before moving money

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.

Where it goes wrong

  • Contacts mistaken for buying accounts. Repeated engagement by one company increases contact volume without creating another buyer.
  • Current stage used instead of first-entry history. A won account should remain in the earlier qualification cohort.
  • Different observation periods. New leads have had less time to produce opportunities and wins.
  • Deal value counted per contact. Repeating an opportunity's amount across its contacts inflates the outcome.
  • Revenue mistaken for contribution. Campaign performance still needs margins and acquisition costs before it becomes a profitability decision.

Covirage is not affiliated with Microsoft or HubSpot.

Compare your B2B campaign file in Covirage

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.

Questions people ask

What is a good B2B cost per lead?

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.

Should B2B leads be counted as contacts or accounts?

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.

Why does a recent B2B campaign have few closed sales?

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.

Is campaign spend per won account the same as CAC?

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.