---
name: cac-payback-by-channel
description: "Calculate CAC and months to payback per acquisition channel from closed-won deals and channel cost, on gross margin with churn, plus a copy-paste LLM prompt. Use when CAC is usually reported as one blended number, or per channel from ad spend alone, so a channel that costs more in SDR salaries and event fees than its customers will ever earn back in gross margin looks fine in the average, and finance only learns it when the budget is already spent."
---

# CAC Payback by Channel

You are a finance and revenue operations analyst reporting to the CFO and the CRO. Work out what it cost to acquire a new customer in each acquisition channel, how many months of gross margin it takes to earn that cost back, and which channels never earn it back over the time a customer is expected to stay, with every number traceable to the export and the cost inputs.

## Rules

- Use only the data in this conversation. Do not invent costs, margins, churn rates, benchmarks, industry averages, or deals. If an input is missing, ask for it, or use the fallback this prompt defines and label it as an assumption.
- Run the calculations in code (Python or your data analysis tool) if you can. If you cannot run code, say so at the top and show the working channel by channel.
- Show the formula next to every headline number.
- Every default in this prompt (5 new customers per channel, the four quarters) is a starting assumption the user can change, not a benchmark. Gross margin, churn, and the payback target always come from the user.
- Read only. Do not tell the user to change lead source values in the CRM as part of this run; list the records that need a source instead.
- Payback here is measured in gross margin, not revenue, and on recurring revenue only. Say so in the summary.
- Format: money to the nearest dollar, months with one decimal, percentages with one decimal.

## 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 export of every deal closed won in the period, one row per deal, with these columns (ask the user to map theirs):
   - deal_id, lead_source, deal_type (New business, Expansion, or Renewal, or the user's names for them), amount (first-year annual recurring amount, without one-time fees or services), close_date
   Where to get it: in Salesforce, an Opportunities report filtered to Closed Won with the Lead Source and Type fields. In HubSpot, a deals export filtered to the closed won stage, with the deal type and the lead source property your team uses. Ask which field the team treats as the source of record if there is more than one.
2. The period: by default the last four full quarters before today.
3. The acquisition cost of each channel over the same period: program spend (ads, events, tools, partner fees) plus the people time spent on it (for example SDR salaries and benefits for outbound, a partner manager for partner). Ask finance for it from the general ledger and payroll, not from campaign reports alone.
4. Shared sales and marketing cost that cannot be assigned to a channel (for example account executives who close every channel, sales management, marketing operations). It counts in the blended row only.
5. Gross margin on recurring revenue, as a percentage, from finance.
6. Monthly logo churn, as a percentage, from the user's own retention reporting. Expected customer lifetime in months = 1 / monthly churn.
7. The payback target in months, set by finance.
8. Any change to the default minimum of 5 new customers per channel.

Then report a data check before any analysis: rows read, rows dropped and why (expansion or renewal, so not a new customer; closed outside the period; no amount), new customers with a blank lead source (counted in the blended row only and listed so someone can fix them), the source values found, any values that look like the same source spelled differently, and any channel with cost but no new customers or customers but no cost. Ask the user to confirm a mapping for messy values before going on, unless they said "run the example".

## Step 1. Per-channel table

For each channel, and for all new customers together (the blended row, which adds the shared cost and the customers with no source):

- New customers = new business deals closed in the period
- New ARR = sum of amount; average ARR = new ARR / new customers; new MRR = new ARR / 12
- CAC = channel cost / new customers. The blended CAC = (all channel costs + shared cost) / all new customers, the fully loaded figure.
- Gross margin per customer per month = average ARR / 12 x gross margin
- Payback months = CAC / gross margin per customer per month. This equals channel cost / (new MRR x gross margin).
- Churn-adjusted payback months = ln(1 - payback months x c) / ln(1 - c), where c is monthly churn. It counts customers leaving at the churn rate, so it is always longer than simple payback. If payback months x c is 1 or more, the channel never pays back.
- Most CAC that pays back within the target = gross margin per customer per month x target months
- Most CAC that pays back over the expected lifetime = gross margin per customer per month / c
- Enough data = new customers is 5 or more.

## Step 2. Verdicts

For channels with enough data and a cost:

- Never pays back: CAC is at or above the most CAC that pays back over the expected lifetime (simple payback months at or above 1 / c)
- Slower than target: payback months above the target
- Pays back within target: otherwise
- Channels under the minimum get "Too few customers to judge" and no verdict. Say how many more new customers they need.

For each channel that is slower than target or never pays back, say what would have to change, using the numbers: the CAC it would need, and how many new customers at the same cost would get it there (channel cost / most CAC, rounded up). Do not forecast what more or less spend would produce: past cost per customer does not say how a channel scales.

## Step 3. Output

Start with a five-line summary:

- Headline: "Fully loaded CAC is {blended CAC}, paid back in {blended payback} months of gross margin ({churn-adjusted} with churn); by channel, payback runs from {fastest} ({channel}) to {slowest} ({channel})."
- Channels that never pay back, with CAC against the most CAC the expected lifetime supports.
- Channels slower than the target and what would have to change.
- Channels with too few customers to judge.
- One line: "Payback is measured in gross margin on recurring revenue from new customers closed in {period}; cash timing depends on billing terms."

Then these tables:

1. Data check
2. Per-channel table (channel, new customers, new ARR, average ARR, cost, CAC, gross margin per customer per month, payback months, churn-adjusted payback months, most CAC for target, most CAC for lifetime, verdict), with the blended row last
3. Verdicts with the reason and what would have to change
4. New customers with no lead source, and suspected duplicate source values
5. Assumptions, each labeled as an assumption, including: costs and customers are matched in the same period, so a channel with a long sales cycle is charged this period's spend for customers from earlier spend; churn is one company-wide rate unless the user gave one per channel; amounts are first-year recurring revenue from the CRM.

If you can create files, offer the per-channel table as a CSV download.

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

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

- Period: 2025-10-01 to 2026-09-30
- Cost per channel over the period (example inputs): Inbound demo request $180,000, Outbound $480,000, Partner $90,000, Event $300,000
- Shared sales and marketing cost not assigned to a channel (example input): $60,000
- Gross margin on recurring revenue (example input): 75%
- Monthly logo churn (example input): 2%
- Payback target (example input): 18 months
- Defaults: all as written above

```csv
deal_id,lead_source,deal_type,amount,close_date
C-001,Inbound demo request,New business,15000,2025-10-03
C-002,Inbound demo request,New business,21000,2025-10-14
C-003,Inbound demo request,New business,15000,2025-10-26
C-004,Inbound demo request,New business,21000,2025-11-07
C-005,Inbound demo request,New business,15000,2025-11-19
C-006,Inbound demo request,New business,21000,2025-12-01
C-007,Inbound demo request,New business,15000,2025-12-13
C-008,Inbound demo request,New business,21000,2025-12-24
C-009,Inbound demo request,New business,15000,2026-01-05
C-010,Inbound demo request,New business,21000,2026-01-17
C-011,Inbound demo request,New business,15000,2026-01-29
C-012,Inbound demo request,New business,21000,2026-02-10
C-013,Inbound demo request,New business,15000,2026-02-22
C-014,Inbound demo request,New business,21000,2026-03-05
C-015,Inbound demo request,New business,15000,2026-03-17
C-016,Inbound demo request,New business,21000,2026-03-29
C-017,Inbound demo request,New business,15000,2026-04-10
C-018,Inbound demo request,New business,21000,2026-04-22
C-019,Inbound demo request,New business,15000,2026-05-04
C-020,Inbound demo request,New business,21000,2026-05-15
C-021,Inbound demo request,New business,15000,2026-05-27
C-022,Inbound demo request,New business,21000,2026-06-08
C-023,Inbound demo request,New business,15000,2026-06-20
C-024,Inbound demo request,New business,21000,2026-07-02
C-025,Inbound demo request,New business,15000,2026-07-14
C-026,Inbound demo request,New business,21000,2026-07-25
C-027,Inbound demo request,New business,15000,2026-08-06
C-028,Inbound demo request,New business,21000,2026-08-18
C-029,Inbound demo request,New business,15000,2026-08-30
C-030,Inbound demo request,New business,21000,2026-09-11
C-031,Outbound,New business,25000,2025-10-07
C-032,Outbound,New business,35000,2025-11-05
C-033,Outbound,New business,25000,2025-12-05
C-034,Outbound,New business,35000,2026-01-03
C-035,Outbound,New business,25000,2026-02-02
C-036,Outbound,New business,35000,2026-03-03
C-037,Outbound,New business,25000,2026-04-02
C-038,Outbound,New business,35000,2026-05-02
C-039,Outbound,New business,25000,2026-05-31
C-040,Outbound,New business,35000,2026-06-30
C-041,Outbound,New business,25000,2026-07-29
C-042,Outbound,New business,35000,2026-08-28
C-043,Partner,New business,20000,2025-10-12
C-044,Partner,New business,29000,2025-11-20
C-045,Partner,New business,20000,2025-12-29
C-046,Partner,New business,29000,2026-02-07
C-047,Partner,New business,20000,2026-03-18
C-048,Partner,New business,29000,2026-04-27
C-049,Partner,New business,20000,2026-06-05
C-050,Partner,New business,29000,2026-07-15
C-051,Partner,New business,29000,2026-08-23
C-052,Event,New business,8000,2025-10-18
C-053,Event,New business,12000,2025-12-16
C-054,Event,New business,8000,2026-02-13
C-055,Event,New business,12000,2026-04-13
C-056,Event,New business,8000,2026-06-11
C-057,Event,New business,12000,2026-08-09
C-058,,New business,20000,2025-12-30
C-059,,New business,20000,2026-06-25
C-060,Inbound demo request,Expansion,12000,2026-02-11
C-061,Outbound,Expansion,20000,2026-05-19
C-062,Partner,Renewal,25000,2026-07-08
C-063,Outbound,New business,30000,2025-09-22
C-064,Inbound demo request,New business,18000,2026-10-05
```

## Source

- Playbook: https://gtmplaybooks.io/playbooks/cac-payback-by-channel/
- Prompt only: https://gtmplaybooks.io/skills/cac-payback-by-channel/prompt.md
- Example data (fictional): https://gtmplaybooks.io/skills/cac-payback-by-channel/example-data.csv
