Customer lifetime value (LTV, also called CLV) is the revenue expected from a customer across the whole relationship. A simple model divides average revenue per user by the customer churn rate for the same period, which is the same as multiplying that revenue by 1 divided by the churn rate. The churn rate has to be a fraction, not a percent already scaled by 100, and the formula is undefined when churn is zero. This version is revenue, not profit: it ignores gross margin, discounts, and expansion.
Formula
Simple revenue LTV = ARPU / customer churn rate. Expected lifetime in periods = 1 / customer churn rate, so LTV = ARPU * expected lifetime. Use a monthly ARPU with a monthly churn fraction, or a yearly ARPU with a yearly churn fraction. Mixing a monthly ARPU with an annual churn fraction stretches the lifetime by about twelve.
| Input | Rule |
|---|---|
| ARPU | Same period as the churn rate, and the same user definition |
| Customer churn rate | A fraction such as 0.04 for 4%. Zero churn makes the formula undefined |
| Gross margin | Left out of this simple revenue LTV. A profit LTV multiplies by margin |
| Expansion | Left out. Net revenue churn is a different model |
Worked example
Every figure in this example is hypothetical. It is not the public demo and not a customer account. Monthly ARPU is $30 and monthly customer churn is 4%, written as 0.04.
- Expected lifetime = 1 / 0.04 = 25 months.
- LTV = 30 / 0.04 = $750.
- The same ARPU with the hypothetical gross revenue churn of 7% (0.07) would be 30 / 0.07 = $428.57. That is a different model, because it uses revenue churn instead of customer churn.
- Dividing by 4 instead of 0.04 produces $7.50, which is the percent-versus-fraction mistake, not a lifetime value.
How to compute it from Stripe
- The simple model needs an ARPU you have already defined and a churn rate from a starting snapshot. Stripe does not return either field.
- A historical LTV sums net revenue per customer (paid invoices minus refunds) for a cohort and divides by customers acquired in that cohort. That needs invoice history across the cohort, not only the latest charge window.
- Paginate invoices or charges, keep the customer id, and decide whether annual prepayments are recognized immediately or spread over the term. The choice changes early-cohort LTV.
- Do not treat the latest unit_amount as lifetime value. A price is not a sum of payments already collected, and it is not a forecast.
What Data Lighthouse shows
The signed-in overview cards are Revenue (7, 14, or 30 days), Avg daily revenue, Monthly recurring revenue, Annual recurring revenue, Revenue per visitor, Visitor conversion rate, and Visitors online. The overview does not compute customer lifetime value. You can compute it yourself from Stripe with ARPU divided by the customer churn fraction, once you have both inputs from a starting snapshot.
The Revenue card sums charge.amount for every charge with status succeeded in the selected window, following Stripe auto-pagination, then converts minor units for the dashboard currency. The sum is gross cash collected in that window. It does not subtract amount_refunded. Charges in another currency are left out, because the dashboard assumes one currency. Average daily revenue is that total divided by the number of days. The percent change compares the window with the previous window of the same length. A 7-, 14-, or 30-day charge total is cash collected in that window, which is a different number from lifetime revenue. The public demo does not call Stripe or Postgres. Revenue, visitors, monthly recurring revenue, and annual recurring revenue are a seeded sample. ARR in the sample is the sample MRR times 12. Each day's visitors are seeded on their own, separate from that day's revenue, and the chart subtitle labels the series as sample data. Checkout for the $59 template license uses Polar after GitHub sign-in. Stripe is the optional revenue source inside the dashboard you host, through STRIPE_SECRET_KEY. If that key is missing, the revenue API returns an error and the overview says it could not load Stripe revenue.
Questions
What is customer lifetime value?
Customer lifetime value (LTV, also called CLV) is the revenue expected from a customer across the relationship. A simple model is ARPU divided by the customer churn rate for the same period. The churn input is a fraction, and the formula is undefined when churn is zero. This version is revenue, not profit.
What is a simple LTV formula?
LTV = ARPU / customer churn rate, with both inputs on the same period and churn as a fraction. Hypothetical monthly ARPU of $30 and monthly customer churn of 0.04 gives LTV = 30 / 0.04 = $750, which is 25 months of that ARPU. Using 4 instead of 0.04 does not produce lifetime value.
Does Data Lighthouse calculate LTV?
The overview does not compute customer lifetime value. You can compute it yourself from Stripe with ARPU divided by the customer churn fraction, once you have both inputs from a starting snapshot.
Related reading
- Next.js Stripe analytics dashboard template
- Public live demo
- Template checkout
- Average revenue per user (ARPU)
- Churn rate
- Monthly recurring revenue (MRR)