LTV:CAC Ratio
LTV:CAC Ratio: The ratio of customer lifetime value to acquisition cost. Measures the return on investment from sales and marketing spend.
Formula
LTV:CAC = LTV / CACLTV:CAC-O = LTV-O / CAC-OLTV:CAC-M = LTV-M / CAC-MLTV:CAC-O = LTV:CAC-M × (LTV-O / LTV-M) × (CAC-M / CAC-O) Computable definition
The canonical formula in the GASP formula grammar. The MCP server compiles it to SQL over the datasets listed below.
metric.ltv / metric.cac Unit: ratio
- Operating form (O) (see the dual-lens forms)
metric.ltv.O / metric.cac.O- Market form (M) (see the dual-lens forms)
metric.ltv.M / metric.cac.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 |
mrr_change | revenue_event | 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((((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)))) AS DOUBLE PRECISION) / NULLIF(((CAST((((-(SELECT COALESCE(SUM(mrr_change), 0) FROM revenue_event WHERE event_date >= :period_start AND event_date <= :period_end AND event_type = 'churn'))) + ((-(SELECT COALESCE(SUM(mrr_change), 0) FROM revenue_event WHERE event_date >= :period_start AND event_date <= :period_end AND event_type = 'contraction')))) AS DOUBLE PRECISION) / NULLIF(((SELECT COALESCE(SUM(mrr), 0) FROM subscription WHERE snapshot_date = :period_start AND subscription_status = 'active')), 0))), 0))) AS DOUBLE PRECISION) / NULLIF(((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))), 0)) AS ltv_cac_ratio 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": "LTV:CAC Ratio" }) or generate_query({ "metric": "LTV:CAC Ratio", "adapter": "<your adapter JSON>" }).
Benchmarks
- Below 1:1: Losing money on every customer
- 1:1 to 2:1: Breaking even or marginal, concerning to investors
- 3:1 to 4:1: Industry standard, healthy sustainable growth (Median B2B SaaS: 3.2:1)
- 4:1 to 5:1: Strong business model
- Above 5:1: Under-investing in growth; could be growing faster
What It Tells You
Unit economics health. Are customers worth more than they cost to acquire?
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: Contribution LTV:CAC (LTV:CAC-O)
LTV:CAC-O divides Contribution LTV by Fully Loaded CAC. Both sides carry the cost of making a customer productive: the numerator loses the variable service costs over the lifetime and the denominator gains implementation and onboarding.
- CEL Source:
- `Revenue_Event`, `Cost_Event`
- ATL Inclusion:
- LTV-O margin costs (`infrastructure`, `support`, `success_engineering`, `implementation`, `onboarding`); CAC-O costs (`gtm`, `implementation`, `onboarding`)
LTV:CAC-O = LTV-O / CAC-O What it tells you: The return on acquisition spend after every variable cost of acquiring and serving a customer. The ratio to use for pricing, packaging and services investment decisions.
Market Form: Gross Margin LTV:CAC (LTV:CAC-M)
LTV:CAC-M divides Gross Margin LTV by GTM CAC. This is the ratio investors benchmark and the form the 3:1 threshold above assumes.
- CEL Source:
- `Revenue_Event`, `Cost_Event`
- ATL Inclusion:
- LTV-M margin costs (`infrastructure` only); CAC-M costs (`gtm` only)
LTV:CAC-M = LTV-M / CAC-M What it tells you: The investor-comparable unit economics ratio reported to the board and in fundraising materials.
Bridge
LTV:CAC-O = LTV:CAC-M × (LTV-O / LTV-M) × (CAC-M / CAC-O) The gap between LTV:CAC-M and LTV:CAC-O shows how much of the headline ratio depends on human delivery costs that S&M-based benchmarks leave out. A business at 3:1 on the market form and well under 2:1 on the operating form is buying growth with services effort. Report LTV:CAC-M for comparability and manage to LTV:CAC-O. ---
Related Metrics
Connected in the GASP relationship graph.
Upstream: what drives this
Downstream: what this drives
- LTV:CAC Ratio measures Customer (Entity)
- LTV:CAC Ratio measures Subscription (Entity)