LTV (Customer Lifetime Value)
LTV (Customer Lifetime Value): The gross profit expected from a customer over their lifetime. Also known as CLV (Customer Lifetime Value) or CLTV.
Also known as: LTV, CLV, CLTV
Formula
LTV = (ARPA × Gross Margin) / Revenue Churn RateLTV-O = (ARPA × Contribution Margin) / Revenue Churn RateLTV-M = (ARPA × Gross Margin) / Revenue Churn RateLTV-M − LTV-O = Variable Service Costs per Customer × Customer Lifetime Computable definition
The canonical formula in the GASP formula grammar. The MCP server compiles it to SQL over the datasets listed below.
metric.arpa * metric.gross_margin / metric.revenue_churn_rate Unit: currency
- Operating form (O) (see the dual-lens forms)
metric.arpa * metric.gross_margin.O / metric.revenue_churn_rate- Market form (M) (see the dual-lens forms)
metric.arpa * metric.gross_margin / metric.revenue_churn_rate
Notes: LTV-M equals this formula. LTV-O uses contribution margin (gross_margin.forms.O) in place of gross margin.
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_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(((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 ltv 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 (Customer Lifetime Value)" }) or generate_query({ "metric": "LTV (Customer Lifetime Value)", "adapter": "<your adapter JSON>" }).
What It Tells You
The upper bound of what you should spend to acquire a customer.
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 (LTV-O)
LTV-O uses contribution margin: revenue minus every variable cost, including implementation, onboarding, support and customer success. It is the profit a customer contributes over their lifetime.
- CEL Source:
- `Revenue_Event`, `Cost_Event`
- ATL Inclusion:
- All variable `cost_function` values per customer
LTV-O = (ARPA × Contribution Margin) / Revenue Churn Rate What it tells you: The realistic lifetime profit from a customer after all variable delivery costs. The number to use for pricing and unit economics decisions.
Market Form: Gross Margin LTV (LTV-M)
LTV-M uses SaaS gross margin, revenue minus COGS only. This is the formula already defined above and matches investor benchmarks (the 3:1 LTV:CAC threshold uses this form).
- CEL Source:
- `Revenue_Event`, `Cost_Event`
- ATL Inclusion:
- `cost_function` = `infrastructure` only (COGS)
LTV-M = (ARPA × Gross Margin) / Revenue Churn Rate What it tells you: The investor-comparable lifetime value. The number used in LTV:CAC ratios reported to the board and in fundraising materials.
Bridge
LTV-M − LTV-O = Variable Service Costs per Customer × Customer Lifetime The delta (LTV-M − LTV-O) is the **Contribution Leakage.** Large leakage means the business model depends on services that erode unit economics. It points to services that could be productised or onboarding that could be self-serve. The canonical LTV formula in investor contexts uses gross margin (LTV-M). This is what a16z, Bessemer and SaaS Capital reference. Contribution margin LTV (LTV-O) is recommended by growth equity investors for deeper unit economics analysis. ---
Related Metrics
Connected in the GASP relationship graph.
Upstream: what drives this
- ARPA component of LTV (Core)
- Gross Margin component of LTV (Core)
- Revenue Churn Rate component of LTV (Core)
Downstream: what this drives
- LTV component of LTV:CAC Ratio (Core)
- LTV measures Customer (Entity)
- LTV measures Subscription (Entity)