Cost per opportunity by ad campaign: how to calculate cost per SQL, opportunity and pipeline dollar
Cost per opportunity by campaign is the campaign’s ad spend divided by the sales opportunities attributed to that campaign in the same period or cohort. Cost per SQL and cost per pipeline dollar use the same spend divided by SQLs and by pipeline value. To calculate them you need three things in the CRM: the ad campaign captured on every lead (click ID or UTM), lifecycle stage dates on the contact, and the contact associated with the deal. We recommend judging B2B campaigns on cost per opportunity and pipeline per dollar, reported by lead cohort, not on cost per lead.
Key takeaways
- Cost per opportunity = campaign spend / opportunities attributed to that campaign; pipeline per dollar = pipeline value / spend.
- Use one attribution rule for cost per opportunity (we use the first ad campaign that created the contact) and show influence separately.
- Report by lead cohort (leads created in the month) for long sales cycles, or this month’s opportunities will be divided by this month’s spend that did not create them.
- The CRM setup is the hard part: capture click IDs and UTMs into fields, keep stage dates, associate contacts to deals.
- The cheapest cost per opportunity is not always the best campaign; compare pipeline per dollar and win rate before moving budget.
Why cost per lead misleads B2B budget decisions
Ad platforms optimize and report on the conversions they can see: form fills, lead gen form submits, calls. In B2B, most of those leads never become pipeline, and the share that does varies widely by campaign. A webinar campaign on LinkedIn can produce leads at a third of the cost of a high-intent search campaign and still produce fewer opportunities per dollar.
When budget moves on cost per lead, it flows toward the cheapest form fills. When it moves on cost per opportunity and pipeline per dollar, it flows toward the campaigns that sales actually works. That is the shift CFOs and CROs ask for, and it is the core of a pipeline-first paid media report.
The formulas
| Metric | Formula | Use it to |
|---|---|---|
| Cost per SQL | Campaign spend / SQLs attributed to the campaign | Check lead quality early, before deals are created |
| Cost per opportunity | Campaign spend / opportunities attributed to the campaign | Compare campaigns and channels on the outcome sales cares about |
| Cost per pipeline dollar | Campaign spend / pipeline value attributed to the campaign | Compare campaigns that create deals of different sizes |
| Pipeline per ad dollar | Pipeline value / campaign spend | Present the same thing to finance as a return multiple |
| SQL to opportunity rate | Opportunities / SQLs for the campaign | Spot campaigns that pass qualification but stall in sales |
A worked example with example inputs for one quarter. These are illustration numbers, not benchmarks: use your own CRM data.
Worked example: three campaigns, one quarter
| Campaign (example inputs) | Spend | SQLs | Opportunities | Pipeline | Cost per SQL | Cost per opportunity | Pipeline per US$1 |
|---|---|---|---|---|---|---|---|
| Google Ads, non-brand search | US$60,000 | 40 | 24 | US$720,000 | US$1,500 | US$2,500 | US$12.00 |
| LinkedIn Ads, target account list | US$45,000 | 15 | 12 | US$600,000 | US$3,000 | US$3,750 | US$13.33 |
| Microsoft Advertising, non-brand search | US$9,000 | 6 | 3 | US$75,000 | US$1,500 | US$3,000 | US$8.33 |
On cost per opportunity, search looks best. On pipeline per dollar, the LinkedIn account-list campaign wins because its deals are larger. Neither metric alone justifies a budget move; together they tell you to protect both and look harder at the Microsoft campaign, which has the same cost per SQL as Google but loses half its SQLs before the opportunity stage. That is a qualification or targeting question to take to sales, not a reason to cut by default.
With small numbers like six SQLs, treat any single quarter as directional. We look at rolling two-quarter cohorts before moving more than 20% of a campaign’s budget on down-funnel cost alone.
Bring your funnel numbers to a 30-minute pipeline plan session. We show where spend is leaking against your CRM data and what to fix first.
Period view or cohort view
There are two honest ways to line up spend and opportunities, and mixing them is the most common reporting mistake we see.
The period view divides this quarter’s spend by opportunities created this quarter, whichever campaign or month their leads came from. It is simple and works when the sales cycle from lead to opportunity is short, a few weeks.
The cohort view divides the spend of a month by the opportunities later created from the leads that month generated. It is fairer for long B2B cycles, but the latest cohorts are incomplete, so show them with a note such as "cohort still maturing" rather than as a bad month.
Pick one per report, label it, and keep it for at least two quarters. Changing method every review makes trends meaningless.
The CRM setup you need
None of these metrics work unless the CRM can tell which ad campaign created or influenced each contact, and when each contact reached each stage. Here is what to put in place in HubSpot or Salesforce.
- Capture the ad click ID (such as Google’s GCLID) and all UTM parameters into hidden form fields, and store them on the contact or lead. Keep the first values; do not let later visits overwrite them.
- Make campaign names in UTMs match ad platform campaign names exactly, so spend can be joined to CRM records without a mapping table that someone has to maintain.
- Use lifecycle stages with dates. HubSpot records "date entered" and "date exited" for each lifecycle stage; Opportunity means the contact or company is associated with a deal. In Salesforce, use lead and opportunity creation dates and stage history.
- Associate contacts with deals. In HubSpot, the Opportunity lifecycle stage means the contact or company is associated with a deal, so deal associations are what make opportunities countable by campaign. In Salesforce, use contact roles or Campaign Influence, which can automatically associate influential campaigns to an opportunity within an influence time frame you set.
- Agree with sales on what an SQL and an opportunity are, in writing, and on who sets each stage.
- Send qualified stages back to the ad platforms. Google’s offline conversion imports use the GCLID (or enhanced conversions for leads) to measure what happens after the click, so bidding can learn from SQLs and opportunities instead of form fills.
For attribution, HubSpot’s deal create and revenue attribution reports require Marketing Hub Enterprise and can include ad click interactions from connected LinkedIn and Google ad accounts. You do not need multi-touch attribution to start: a first-campaign rule for cost per opportunity plus an influence view for programs is enough for most budget decisions.
Mistakes that make cost per opportunity wrong
- Dividing all paid media spend by all opportunities, including those from outbound, partners and organic.
- Letting the last form fill overwrite the original source, which hands credit to retargeting and brand search.
- Counting opportunities that sales created for existing customers, renewals or upsells in new-business cost.
- Comparing a campaign’s cost per opportunity this month with spend this month when its cycle is 90 days.
- Using platform-reported spend for some channels and invoiced spend for others in the same table.
Putting cost per opportunity next to pacing
Most teams compute cost per opportunity once a quarter in a slide. It is far more useful while the month is running, next to pace: an on-pace campaign with a rising cost per SQL is the one to fix this week.
Pacing Console puts it there. On Pro, CRM lifecycle stages by campaign come from HubSpot, Salesforce, Pipedrive, or any CRM by CSV or API, so cost per SQL and per opportunity sit next to spend and pace. On Enterprise, pipeline and revenue (deals) by campaign are added, so cost per pipeline dollar is visible for every campaign in the same view finance uses for the forecast. The first month is free, and you can try the live demo before connecting anything.
Frequently asked questions
How do you calculate cost per opportunity?
Divide the campaign’s spend by the number of sales opportunities attributed to that campaign in the same period or lead cohort. Use one attribution rule consistently, such as the first ad campaign that created the contact.
What is the difference between cost per SQL and cost per opportunity?
Cost per SQL divides spend by leads that sales has qualified. Cost per opportunity divides spend by leads that became deals in the pipeline. The gap between the two shows how many qualified leads stall before a deal is created.
Should I use the period view or the cohort view?
Use the period view when leads become opportunities within a few weeks. Use the cohort view for long sales cycles, and label the newest cohorts as still maturing so they are not read as poor results.
What CRM data do I need for cost per opportunity by campaign?
The ad campaign on every contact (click ID and UTMs kept from the first visit), lifecycle stage dates, contacts associated with deals, and agreed definitions of SQL and opportunity.
Is the lowest cost per opportunity the best campaign?
Not always. Compare pipeline per dollar and win rate too. A campaign with a higher cost per opportunity can create larger deals and more pipeline for each dollar spent.
Sources
Related service: Paid media. See also pricing and client results.
We run enterprise B2B demand generation for teams in Montreal, Toronto, Ottawa and the United States.