LTV:CAC Ratio

The LTV:CAC ratio compares what a customer is worth over their lifetime with what it cost to acquire them. It answers one question: for every dollar spent acquiring a customer, how many dollars of lifetime value come back?

\[ \text{LTV:CAC} = \frac{\text{customer lifetime value}}{\text{customer acquisition cost}} \]

The numerator is normally a contribution LTV measured before acquisition cost, such as net LTV, and the ratio is only as meaningful as the cost boundary behind that number. The denominator can be blended, paid or fully loaded CAC depending on the question. In this example the only cost taken out of revenue is a 70% margin, so the cost boundary is the cost of serving the customer that this margin captures. With \$50 ARPU, 5% monthly churn, that 70% margin and a \$200 blended CAC: gross LTV \$1,000, net LTV \$700, ratio 3.5. For every dollar spent acquiring, \$3.50 of contribution comes back.

The example also uses one illustrative set of rule-of-thumb bands; sources draw the thresholds differently. Here a ratio below 1 is labeled losing money, 1 to 3 barely breaking even, 3 to 5 healthy, and above 5 under-investing. These labels are reference categories, not conclusions about a business. A ratio below 1 means expected value under the chosen cost boundary is less than CAC; a higher ratio still needs evidence about excluded costs, cash timing, and incremental growth opportunities.

What the ratio leaves out

Equal ratios, different payback

The base case first. Expected life is 1 / churn, gross LTV is ARPU times life, and net LTV applies the margin.

import numpy as np

arpu, churn, margin, cac = 50.0, 0.05, 0.70, 200.0
life = 1 / churn
gross = arpu * life
net = gross * margin
print(f"life {life:,.0f} months, gross LTV {gross:,.2f}, net LTV {net:,.2f}, ratio {net / cac:,.2f}")
life 20 months, gross LTV 1,000.00, net LTV 700.00, ratio 3.50

Now compare three businesses that all land on that 3.50 with different ARPU, churn and CAC. For each, payback is CAC divided by the constant monthly contribution (ARPU times margin), and the cash trough is the lowest cumulative cash position over 240 months.

cases = (("fast churn, 5.0%", 50.0, 0.05, 0.70, 200.0),
         ("middle, 2.5%", 200.0, 0.025, 0.70, 1_600.0),
         ("slow churn, 1.25%", 12.5, 0.0125, 0.70, 200.0))
for name, a, c, m, k in cases:
    nl = a * (1 / c) * m
    monthly = a * m
    cum = np.cumsum(np.full(240, monthly)) - k
    print(f"{name:<18} ARPU {a:>6.2f} churn {c:.4f} CAC {k:>8,.2f}  ratio {nl / k:.2f}  "
          f"payback {k / monthly:>4.1f} months  cash trough {cum.min():>9,.2f}")
fast churn, 5.0%   ARPU  50.00 churn 0.0500 CAC   200.00  ratio 3.50  payback  5.7 months  cash trough   -165.00
middle, 2.5%       ARPU 200.00 churn 0.0250 CAC 1,600.00  ratio 3.50  payback 11.4 months  cash trough -1,460.00
slow churn, 1.25%  ARPU  12.50 churn 0.0125 CAC   200.00  ratio 3.50  payback 22.9 months  cash trough   -191.25

The ratio is 3.50 in all three, but cash comes back after 5.7, 11.4 and 22.9 months. With undiscounted LTV = contribution/churn, the simple payback shortcut equals 1/(ratio × churn), which is where those three figures come from. The cash-trough calculation also assumes continued active payments. Actual cohort recovery requires cumulative survival-weighted contribution and payment timing, so these columns alone cannot establish working-capital needs or self-funded growth.

Discounting hits slow recovery hardest

The ratio also ignores that a dollar arriving in year two is worth less than one arriving now. Take a 1% monthly discount rate, a guaranteed first contribution at month one, and retention-weighted month-end payments after that. With retention \( r = 1 – \text{churn} \) and monthly contribution \( x \), the discounted LTV is \( x / (1 + 0.01 – r) \); setting the discount rate to zero returns the undiscounted \( x / \text{churn} \).

for name, a, c, m, k in cases:
    r = 1 - c
    nl = a * m / c
    disc = a * m / (1 + 0.01 - r)
    print(f"{name:<18} undiscounted {nl / k:.2f}  discounted {disc / k:.2f}  falls by {1 - disc / nl:.0%}")
fast churn, 5.0%   undiscounted 3.50  discounted 2.92  falls by 17%
middle, 2.5%       undiscounted 3.50  discounted 2.50  falls by 29%
slow churn, 1.25%  undiscounted 3.50  discounted 1.94  falls by 44%

At 1% monthly discount the fast-churn ratio falls about 17% and the slow-churn ratio about 44%, because a slow-churn customer’s value sits further in the future. Changing when the first payment occurs would be a separate modeling change.

The denominator is a choice

The same \$700 net LTV can be divided by CAC under four definitions: media spend only, all paid-channel costs, blended, and fully loaded. The code applies the rule-of-thumb bands to each.

for name, k in (("media spend only", 125.0), ("all paid-channel costs", 190.0),
                ("blended", 200.0), ("fully loaded", 325.0)):
    r = net / k
    band = ("under-investing" if r > 5 else "healthy" if r >= 3
            else "barely breaking even" if r >= 1 else "losing money")
    print(f"{name:<24} CAC {k:>7,.2f}  ratio {r:.2f}  {band}")
media spend only         CAC  125.00  ratio 5.60  under-investing
all paid-channel costs   CAC  190.00  ratio 3.68  healthy
blended                  CAC  200.00  ratio 3.50  healthy
fully loaded             CAC  325.00  ratio 2.15  barely breaking even

The same \$700 net LTV gives a ratio of 5.60 against media spend alone and 2.15 against a fully loaded CAC. By these bands, that is the same company in the same quarter reading as “under-investing in growth” and as “barely breaking even”. The bands only mean something once both halves are defined, and neither half has a single standard definition. Ratios are comparable when the LTV definition and cost boundary, the CAC definition, the customer cohort, the horizon and the assumptions match. Within one company over time that holds only while those definitions stay fixed, and across companies it holds only if they have been aligned deliberately.

Using it well

It is the core unit-economics KPI for subscription, SaaS and direct-to-consumer businesses, and investors use it to gauge whether growth is scalable. None of the above argues against that; it argues for a small amount of accompanying detail.

Four things travel with the number. Which LTV — gross or net, discounted or not. Which CAC — the four definitions above move the same net LTV from a ratio of 5.60 to 2.15, a factor of about 2.6. The payback period, because the ratio is silent about cash. And the churn rate the lifetime came from, together with the survival and payment assumptions needed to compute recovery.

A high ratio can motivate testing additional acquisition spending, but it does not establish under-investment or a short actual cohort payback. Check incremental acquisition costs, capacity, contribution timing and the uncertainty of lifetime estimates before increasing the budget.

References


Discover more from Insightful Data Lab

Subscribe to get the latest posts sent to your email.

Similar Posts

Questions, corrections, or additional insights?

This site uses Akismet to reduce spam. Learn how your comment data is processed.