GTM Playbooks
Finance/FP&AIntermediateLast reviewed Run it in your LLM

Cost per Opportunity by Channel: Spend, SQOs, and Share of ACV

The problem

Channel spend is reviewed as a blended CAC, or as cost per click, so a source that produces cheap SQOs that never close looks efficient, a source with a high win rate and ACV looks expensive, and finance and RevOps argue about the budget without a shared cost per SQO and cost per expected closed-won deal.

Copy, paste, run

Run it in your LLM

One prompt for Claude or ChatGPT that turns channel spend and SQOs into cost per SQO, expected closed-won, and cost as a share of first-year ACV, ranked so a budget review can see which channel to inspect first. Type run the example after pasting it to test it on the fictional data built into the prompt.

Download .mdSKILL.mdExample CSV
# Cost per opportunity by channel

You are a RevOps and finance lead reporting to the CRO and the CFO. From spend, SQOs created, win rate, and first-year ACV per acquisition channel, compute cost per SQO, expected closed-won deals, cost per closed-won deal, and that cost as a percent of first-year ACV, so the budget review can see which channel is expensive relative to the deal it produces.

Closed-won on this page is SQOs times the stated win rate, not a count of deals already won. For payback on actual customers, point the user at CAC payback by channel. For win rate from closed deals, point them at win rate by lead source.

## Rules

- Use only the data in this conversation. Do not invent win-rate, ACV, or cost-per-SQO benchmarks. If something is missing, ask for it, or use the fallback this prompt defines and label it as an assumption.
- Run the calculations in code if you can. If you cannot run code, say so at the top and show the working.
- Show the formula next to every headline number.
- Rank channels by cost as a percent of ACV. That ranking is a comparison, not a cut-or-scale decision and not a forecast of what more or less spend would produce.
- Read only. Do not change CRM records, budgets, or campaigns.
- Format: money to the nearest dollar, percents to one decimal if not whole, deal counts to one decimal if not whole.

## Definitions

- Spend is fully loaded acquisition cost of the channel in the period (program spend plus the people time spent on it). Shared cost that serves every channel stays out of the channel rows.
- SQOs created are sales-qualified opportunities attributed to the channel in the same period.
- Win rate is SQO-to-won, in percent. 25 means 25%.
- ACV is average first-year contracted value of a new-logo win from that channel, in the same currency as spend.
- Cost per SQO = spend / SQOs.
- Expected closed-won = SQOs x (win rate / 100).
- Cost per closed-won = spend / expected closed-won.
- Cost as % of ACV = cost per closed-won / ACV.
- Do not divide by zero. If SQOs, win rate, or ACV is 0 or missing, leave that channel out and say why.

## Step 0. Inputs

If the user says "run the example", use the EXAMPLE DATA section at the end of this prompt, do not ask any questions, and label every output "Example data (fictional)".

Otherwise ask for everything below in one message, skipping anything the user already gave:

1. A CSV of channels, one row per channel, with these columns (ask the user to map theirs):
   - channel, spend, sqos, win_rate_pct, acv
   Where to get it: finance or the ledger for spend; CRM for SQOs, SQO-to-won, and ACV. Rates are percents (25 means 25%).
2. The period the extract covers, so the write-up can name it.

Then report a data check: rows read; rows left out and why (duplicate channel, no channel name, inputs not numbers, SQOs of zero, a win rate or ACV that cannot be used); channels kept. Ask the user to confirm before going on, unless they said "run the example".

## Step 1. Per channel

For each kept channel:

- Cost per SQO = spend / SQOs.
- Expected closed-won = SQOs x (win_rate_pct / 100).
- Cost per closed-won = spend / expected closed-won.
- Cost as % of first-year ACV = cost per closed-won / ACV.

## Step 2. Blended and rank

Sum spend, SQOs, and expected closed-won. Blended cost per SQO = total spend / total SQOs. Blended cost per closed-won = total spend / total expected closed-won. Blended ACV = sum of (expected closed-won x ACV) / total expected closed-won. Blended % of ACV = blended cost per closed-won / blended ACV.

Rank kept channels from highest cost as a percent of ACV to lowest. Name the highest as the first place to inspect before cutting, and the lowest as the first place to inspect before scaling. Do not recommend a cut or a scale from this table alone.

## Step 3. Output

Start with a five-line summary:

- Headline: "Highest cost as a share of ACV is {highest} at {pct}%; lowest is {lowest} at {pct}%."
- Paid search check (if present): "{channel} {spend} / {sqos} SQOs = {costPerSqo} per SQO; {deals} expected closed-won; {costPerDeal} per deal; {pct}% of {acv} ACV."
- Blended: "{spend} spend, {sqos} SQOs, {deals} expected closed-won, {costPerSqo} per SQO, {costPerDeal} per deal, {pct}% of blended ACV."
- Ranking: list each kept channel with cost per SQO, cost per deal, and % of ACV.
- One line: "Expected closed-won is SQOs times win rate, not deals already won. {excluded} rows were left out. Take this table to the budget review next to CAC payback and win rate by source."

Then these tables:

1. Data check
2. By channel (spend, SQOs, win rate, ACV, cost per SQO, expected closed-won, cost per deal, % of ACV), highest % of ACV first, blended last
3. Assumptions, each labeled as an assumption, including: win rate and ACV are history not a forecast; spend and SQOs are matched in the same period; a long cycle means this period's spend is charged for SQOs that earlier spend produced; ranking is not a cut-or-scale decision.

If you can create files, offer the scored table as a CSV download.

## EXAMPLE DATA (fictional, for testing this prompt)

Use this only when the user says "run the example". The company and channels are made up.

- Period 2026-Q3
- Paid search: $60,000 spend, 40 SQOs, 25% win, $30,000 ACV
- Outbound: $80,000 spend, 20 SQOs, 20% win, $40,000 ACV
- Partner: $20,000 spend, 20 SQOs, 40% win, $25,000 ACV

Channels:

```csv
channel,spend,sqos,win_rate_pct,acv
Paid search,60000,40,25,30000
Outbound,80000,20,20,40000
Partner,20000,20,40,25000
Paid search,60000,40,25,30000
BAD-1,60000,0,25,30000
```

How to run it

  1. Open Claude or ChatGPT with code execution on (Claude's analysis tool, ChatGPT data analysis). Without it the model does arithmetic by hand, and you should check every number.
  2. Paste the prompt. To test it first, send "run the example" and compare with the expected results below.
  3. Attach a CSV of channels with spend, SQOs, win rate, and ACV. The prompt lists the columns.
  4. Read the data check first, then take the ranked table to the budget review next to CAC payback and win rate by source. Keep expected closed-won labeled as SQOs times win rate, not deals already won.

Before you paste spend and funnel data

Channel spend, win rates, and ACV are commercially sensitive. Check your company's AI and data policy, prefer a business or enterprise plan, and drop names: the prompt only needs channel ids and amounts. It reads the extract and changes nothing in the CRM.

Expected results on the example data

A correct run of "run the example" should match these, give or take rounding. They are computed from the prompt's definitions by a reference implementation that is tested against hand-worked numbers. The data is fictional.

Data check
5 rows; kept Paid search, Outbound, Partner; left out: Paid search (duplicate channel), BAD-1 (BAD-1: enter SQOs created above zero.)
Paid search
$1,500 per SQO, 10 deals, $6,000 per deal, 20% of ACV
Rank
Highest Outbound 50% of ACV; lowest Partner 10% of ACV
Blended
$160,000 spend, 80 SQOs, 22 deals, $2,000 per SQO, $7,273 per deal, 24.2% of ACV
Expected cost per opportunity by channel
ChannelSpendSQOsCost / SQODealsCost / deal% of ACV
Outbound$80,00020$4,0004$20,00050%
Paid search$60,00040$1,50010$6,00020%
Partner$20,00020$1,0008$2,50010%

Paid search $60,000 / 40 SQOs = $1,500 per SQO, 10 expected closed-won, $6,000 per deal, 20% of $30,000 ACV. Outbound is 50% of ACV; Partner is 10%. Expected closed-won is SQOs times win rate, not deals already won. Ranking is a comparison, not a cut-or-scale decision.

Cost per opportunity by channel

Enter spend, SQOs created, SQO-to-won, and first-year ACV per channel. Closed-won is SQOs times win rate, not deals already won. Prefilled with the fictional example.

Channels

Highest cost as a share of ACV
Outbound
50% of ACV, $20,000 per expected closed-won
Lowest cost as a share of ACV
Partner
10% of ACV, $2,500 per expected closed-won
Blended cost per SQO
$2,000
$160,000 / 80 SQOs
Blended cost per closed-won
$7,273
22 expected deals
Blended share of ACV
24.2%
Weighted ACV $30,000
Paid search check
$1,500
$6,000 per deal, 20% of ACV
Cost per opportunity by channel, highest share of ACV first
ChannelSpendSQOsCost / SQOExpected dealsCost / deal% of ACV
Outbound$80,00020$4,0004$20,00050%
Paid search$60,00040$1,50010$6,00020%
Partner$20,00020$1,0008$2,50010%
Blended$160,00080$2,00022$7,27324.2%

Ranking by cost as a share of ACV is a comparison, not a cut-or-scale decision. Expected closed-won is SQOs times the stated win rate. Payback on actual customers is on the CAC payback by channel playbook; win rate from closed deals is on win rate by lead source.

Implementation steps

  1. 1

    Write the definitions down with finance before pulling data: spend is fully loaded acquisition cost of the channel in the period (program spend plus the people time spent on it); SQOs are sales-qualified opportunities attributed to that channel; win rate is SQO-to-won in percent; ACV is average first-year contracted value of a new-logo win from that channel. Shared cost that serves every channel stays out of the channel rows. Closed-won on this page is SQOs times the stated win rate, not a count of deals already won

  2. 2

    Export SQOs created in the period from HubSpot or Salesforce with channel (lead source mapped to a short list), and pull spend by channel from the ledger and payroll for the same period. Drop rows with a missing channel name, duplicate channels, SQOs of zero, a win rate of zero, or ACV of zero, and list each dropped row

  3. 3

    Cost per SQO = spend / SQOs. In the fictional example Paid search spends $60,000 on 40 SQOs, so $1,500 per SQO. A cheap SQO is not a cheap customer if the win rate is low

  4. 4

    Expected closed-won = SQOs x (win rate / 100). Cost per closed-won = spend / expected closed-won. In the fictional example 40 x 25% = 10 deals and $60,000 / 10 = $6,000 per expected closed-won. Do not divide by zero

  5. 5

    Cost as a percent of first-year ACV = cost per closed-won / ACV. In the fictional example $6,000 / $30,000 = 20%. Rank channels from highest share of ACV to lowest. That ranking is a comparison, not a cut-or-scale decision and not a forecast of what more or less spend would produce

  6. 6

    Add a blended row of total spend, total SQOs, and total expected closed-won so a cheap channel cannot hide an expensive one. Take this table to the budget review next to CAC payback (actual customers, gross margin, churn) and win rate by lead source (closed deals). Coverage of already-created pipeline is a different question, on the pipeline coverage check

  7. 7

    Run it with the copy-paste prompt on this page in Claude or ChatGPT, or with formulas in the template, and use the calculator on this page to test other spend, SQO, win-rate, and ACV mixes. Share the ranked table and the blended percent of ACV with finance; this is a staffing of dollars to opportunities, not a bookings forecast

  8. 8

    Rerun each quarter on the same definitions and store spend, SQOs, win rate, and ACV by channel so a mix shift or a win-rate drop shows up before the next budget review

Template outline

The structure to recreate in your own workspace. Field names and thresholds are starting points.

Google Sheet: Cost per opportunity by channel FYxx Qx (RevOps pulls SQOs; finance owns spend)

Tab inputs: period start and end

Tab channels (one row per channel):
  channel, spend, sqos, win_rate_pct, acv
  kept = unique channel AND all fields are numbers AND sqos > 0 AND acv > 0 AND win rate in (0, 100]

Tab costs:
  cost_per_sqo = spend / sqos
  deals = sqos x (win_rate_pct / 100)
  cost_per_deal = spend / deals
  pct_of_acv = cost_per_deal / acv
  rank = highest pct_of_acv first

Tab blended:
  spend = SUM(spend)
  sqos = SUM(sqos)
  deals = SUM(deals)
  cost_per_sqo = spend / sqos
  cost_per_deal = spend / deals
  blended_acv = SUMPRODUCT(deals, acv) / deals
  pct_of_acv = cost_per_deal / blended_acv

Worked example (example data, fictional): period 2026-Q3
  5 rows read, 3 kept (Paid search, Outbound, Partner). Left out: Paid search listed twice; BAD-1 SQOs 0.
  Paid search: $60,000 / 40 SQOs = $1,500 per SQO; 40 x 25% = 10 deals; $60,000 / 10 = $6,000 per deal; $6,000 / $30,000 = 20% of ACV.
  Outbound: $80,000 / 20 = $4,000 per SQO; 20 x 20% = 4 deals; $80,000 / 4 = $20,000 per deal; $20,000 / $40,000 = 50% of ACV.
  Partner: $20,000 / 20 = $1,000 per SQO; 20 x 40% = 8 deals; $20,000 / 8 = $2,500 per deal; $2,500 / $25,000 = 10% of ACV.
  Rank: Outbound 50%, Paid search 20%, Partner 10%. Highest to inspect before cutting: Outbound. Lowest to inspect before scaling: Partner.
  Blended: $160,000 spend, 80 SQOs, 22 expected deals, $2,000 per SQO, $7,273 per deal, 24.2% of $30,000 weighted ACV.

Calculator on this page, prefilled: the three kept channels above. Every money line matches.

Slack to #finance-revenue before the budget review:
"Cost per opportunity {{period}}: highest share of ACV {{highest}} at {{pct}}%; lowest {{lowest}} at {{pct}}%.
 Blended {{cost_per_sqo}} per SQO, {{cost_per_deal}} per expected closed-won ({{deals}} deals).
 Expected closed-won is SQOs times win rate, not deals already won. Sheet: {{sheet_url}}"

Tab history: quarter, channel, spend, sqos, win_rate_pct, acv, cost_per_sqo, cost_per_deal, pct_of_acv

Cost, time saved, and break-even

Tool cost here is your share of an LLM plan, which depends on your vendor, so it is an input. Every number below is an example input; replace each with your own figure. Hours saved are estimates, not measured results.

Inputs (all assumptions)

Replace each value with your own figure.

  • THours a quarter to pull spend, SQOs, win rate, and ACV by channel and size the table by hand6AssumptionTime the next quarterly channel cost review.
  • VHours a quarter with the prompt or template (export, review the data check and the results)0.8AssumptionTime the first two quarterly runs.
  • RLoaded hourly cost of the RevOps or FP&A analyst$75AssumptionSalary plus benefits, divided by working hours.
  • KMonthly tool cost for the LLM plan$20AssumptionYour share of the Claude or ChatGPT plan, from current vendor pricing and your invoices; the CRM, Google Sheets, and Slack are usually already paid for.

Formulas

Time saved per quarter (estimate)T - V
6 - 0.8 = 5.2 hours
Time saved per week (estimate)(T - V) / 13
5.2 / 13 = 0.4 hours
Value of time saved per quarter (estimate)(T - V) x R
5.2 x $75 = $390
Tool cost per quarterK x 3
$20 x 3 = $60
Break-even hours per quarter (estimate)K x 3 / R
$60 / $75 = 0.8 hours, so the run covers its tool cost once it saves 48 minutes a quarter
Paid search cost per SQO (fictional example data)spend / SQOs
$60,000 / 40 = $1,500
Paid search cost per closed-won (fictional example data)spend / (SQOs x win rate)
$60,000 / (40 x 0.25) = $6,000, which is 20% of $30,000 ACV
  • The time math counts analyst time only and is an estimate. Moving budget between channels may be worth far more or far less than that, depending on how each channel responds to spend, which past cost per opportunity does not tell you, so it is not added here.
  • Expected closed-won is not a forecast of bookings. Recheck each quarter on the same four inputs.
  • Rerun the time math after the first two quarters with your real review time V.

Common questions

How do you calculate cost per opportunity by channel?
Cost per SQO = spend / SQOs. Expected closed-won = SQOs x win rate. Cost per closed-won = spend / expected closed-won. Cost as a percent of ACV = cost per closed-won / first-year ACV. In the fictional example Paid search spends $60,000 on 40 SQOs at 25% win and $30,000 ACV: $1,500 per SQO, 10 deals, $6,000 per deal, 20% of ACV.
Is cost per closed-won the same as CAC?
No. Closed-won here is SQOs times the stated win rate, an expected count, not the customers you already won. CAC payback uses actual new customers, fully loaded cost, gross margin, and churn. Use both tables: this one for the opportunity engine, that one for payback.
Which channel should we cut or scale?
This page ranks by cost as a share of ACV. It does not tell you to cut or scale. In the fictional example Outbound is 50% of ACV and Partner is 10%, so inspect Outbound first before cutting and Partner first before scaling, then check CAC payback and win rate by source before you move budget.
What if a channel has cheap SQOs and a low win rate?
Cost per SQO will look fine and cost per closed-won will not. In the fictional example Outbound is $4,000 per SQO but $20,000 per expected closed-won, 50% of ACV, because 20 SQOs at 20% win produce 4 deals.
How much time does it save?
With the example inputs, building the table by hand takes 6 hours a quarter and reviewing the prompt or template run takes 0.8, so 5.2 hours a quarter are saved, about 0.4 hours a week. That is an estimate, worth $390 a quarter at $75 an hour against an example $60 a quarter LLM plan share.

Keep going

View all Finance/FP&A

Need help implementing a playbook?

Our team builds custom Clay workflows and AI automations for revenue teams.

Get it built for you