CAC Payback Period
CAC Payback Period: The number of months required to recover the cost of acquiring a customer. Also called "Months to Recover CAC" or "Time to Recover CAC."
Also known as: CAC
Formula
CAC Payback = CAC / (ARPA × Gross Margin)CAC Payback-O = CAC-O / (ARPA × GM-O)CAC Payback-M = CAC-M / (ARPA × GM-M)CAC Payback-O = CAC Payback-M × (CAC-O / CAC-M) × (GM-M / GM-O) Computable definition
The canonical formula in the GASP formula grammar. The MCP server compiles it to SQL over the datasets listed below.
metric.cac / (metric.arpa * metric.gross_margin) Unit: months
- Operating form (O) (see the dual-lens forms)
metric.cac.O / (metric.arpa * metric.gross_margin.O)- Market form (M) (see the dual-lens forms)
metric.cac.M / (metric.arpa * metric.gross_margin.M)
Data requirements
Grain: Monthly aggregate · Frequency: Monthly · Aggregation: aggregate (month) · Staged: no · Main source: Billing.
| Field | Dataset | Type |
|---|---|---|
cost | cost_event | decimal |
cost_function | cost_event | string |
customer_id | customer | string |
customer_id | revenue_event | string |
customer_status | customer | string |
event_date | cost_event | date |
event_date | revenue_event | date |
event_type | revenue_event | string |
mrr | subscription | decimal |
period_start | financials | date |
revenue | financials | decimal |
snapshot_date | customer | date |
snapshot_date | subscription | date |
subscription_status | subscription | string |
Example SQL (Postgres)
SELECT (CAST(((CAST((SELECT COALESCE(SUM(cost), 0) FROM cost_event WHERE event_date >= :period_start AND event_date <= :period_end AND cost_function = 'gtm') AS DOUBLE PRECISION) / NULLIF(((SELECT COUNT(DISTINCT customer_id) FROM revenue_event WHERE event_date >= :period_start AND event_date <= :period_end AND event_type = 'new')), 0))) AS DOUBLE PRECISION) / NULLIF((((CAST(((SELECT COALESCE(SUM(mrr), 0) FROM subscription WHERE snapshot_date = :period_end AND subscription_status = 'active')) AS DOUBLE PRECISION) / NULLIF(((SELECT COUNT(DISTINCT customer_id) FROM customer WHERE snapshot_date = :period_end AND customer_status = 'active')), 0))) * ((CAST(((SELECT COALESCE(SUM(revenue), 0) FROM financials WHERE period_start >= :period_start AND period_start <= :period_end) - (SELECT COALESCE(SUM(cost), 0) FROM cost_event WHERE event_date >= :period_start AND event_date <= :period_end AND cost_function = 'infrastructure')) AS DOUBLE PRECISION) / NULLIF((SELECT COALESCE(SUM(revenue), 0) FROM financials WHERE period_start >= :period_start AND period_start <= :period_end), 0)))), 0)) AS cac_payback Access: recommended
sensitivity tier confidential,
access scope unscoped.
Guidance your policy engine enforces.
From an agent: with the GASP MCP server, call
lookup_metric({ "name": "CAC Payback Period" }) or generate_query({ "metric": "CAC Payback Period", "adapter": "<your adapter JSON>" }).
Benchmarks
- Under 12 months: Good, investor-friendly target (best-in-class)
- 12-18 months: Acceptable (Median 2024: 18-20 months)
- 18-24 months: Concerning for most segments
- Over 24 months: Requires attention
What It Tells You
How many months of gross profit a new customer takes to repay what it cost to win. Payback sets how much cash growth ties up, so it limits how fast a company can grow on its own money.
Dual-Lens: Operating / Market Forms
Both governed forms are computed from the same Commercial Event Ledger, with Attribution Taxonomy Layer tags deciding which events each form counts.
Operating Form: Fully Loaded CAC Payback (CAC Payback-O)
CAC Payback-O recovers Fully Loaded CAC from contribution margin. Implementation and onboarding cost raise the amount to recover and variable service costs lower the monthly margin that recovers it.
- CEL Source:
- `Revenue_Event`, `Cost_Event`
- ATL Inclusion:
- CAC-O costs (`gtm`, `implementation`, `onboarding`); GM-O costs (`infrastructure`, `support`, `success_engineering`, `implementation`, `onboarding`)
CAC Payback-O = CAC-O / (ARPA × GM-O) What it tells you: How long a customer really takes to pay back everything spent to win and activate it. The number for cash planning.
Market Form: GTM CAC Payback (CAC Payback-M)
CAC Payback-M recovers GTM CAC from SaaS gross margin. It matches the payback period Benchmarkit and KeyBanc report and the benchmarks above.
- CEL Source:
- `Revenue_Event`, `Cost_Event`
- ATL Inclusion:
- CAC-M costs (`gtm` only); GM-M costs (`infrastructure` only)
CAC Payback-M = CAC-M / (ARPA × GM-M) What it tells you: The investor-comparable payback period used in benchmarks and board reporting.
Bridge
CAC Payback-O = CAC Payback-M × (CAC-O / CAC-M) × (GM-M / GM-O) A payback that looks healthy on the market form and runs months longer on the operating form means activation and service costs are tying up cash the S&M view does not show. The ratio CAC-O / CAC-M isolates the acquisition side; GM-M / GM-O isolates the delivery side. ---
Related Metrics
Connected in the GASP relationship graph.
Upstream: what drives this
- ARPA component of CAC Payback Period (Core)
- CAC component of CAC Payback Period (Core)
- Gross Margin component of CAC Payback Period (Core)
Downstream: what this drives
- CAC Payback Period measures Customer (Entity)
- CAC Payback Period measures Subscription (Entity)