What is LTV, and how do you estimate it in Metabase?
LTV (customer lifetime value) estimates the total gross profit you expect from a customer over their entire relationship. It's the yardstick for how much you can afford to spend acquiring customers, and it ties together ARPU, churn, and margin. Estimate it in Metabase from billing data synced into a database (Stripe, Chargebee, Paddle, or Recurly).
1 ÷ churn is the average lifetime. It's a model, not a fact — use margin (not revenue) and keep the churn assumption honest.How is LTV calculated?
The simplest durable formula combines three metrics you already track:
- ARPU — average recurring revenue per customer.
- Average lifetime = 1 ÷ churn rate (a customer with 3% monthly churn lasts ~33 months).
- Gross margin — the share of revenue left after cost to serve.
LTV = ARPU × gross margin ÷ churn rate. Compute LTV per segment (plan, acquisition channel) rather than one blended number, since churn and ARPU vary widely across segments.
Use gross margin, not revenue
LTV based on revenue overstates the value of a customer. Multiply by gross margin so LTV reflects profit — that's what makes the LTV:CAC ratio meaningful. A healthy rule of thumb is LTV:CAC ≥ 3, but treat it as directional.
What data does LTV need?
- ARPU from active subscriptions.
- A churn rate at the same grain and cadence.
- A gross-margin assumption for your subscription (often maintained outside billing data).
SQL patterns
Swap the churn and margin literals for your own modeled values; segment for accuracy.
-- Simple LTV from ARPU and monthly customer churn
WITH inputs AS (
SELECT
(SELECT SUM(mrr) FROM modeled_mrr
WHERE month = date_trunc('month', CURRENT_DATE)) AS mrr_now,
(SELECT COUNT(DISTINCT customer_id) FROM modeled_mrr
WHERE month = date_trunc('month', CURRENT_DATE)) AS customers_now,
0.03 AS monthly_churn, -- from /metrics/churn-rate
0.80 AS gross_margin -- your subscription gross margin
)
SELECT
ROUND(mrr_now / NULLIF(customers_now, 0), 2) AS arpu,
ROUND(1.0 / NULLIF(monthly_churn, 0), 1) AS avg_lifetime_months,
ROUND((mrr_now / NULLIF(customers_now, 0))
* gross_margin
/ NULLIF(monthly_churn, 0), 2) AS ltv
FROM inputs;Pitfalls
Where this metric applies
LTV is derived from ARPU and churn, so any tool that supports those supports LTV.