| Plan | Enabled | Price, $ | Share of subscriptions, % |
|---|---|---|---|
| Weekly | |||
| Monthly | |||
| Yearly |
Both funnels, each with your current Setup and manual overrides (a2a and w2w keep separate overrides). Healthy bands = P25–P75 for your geo × vertical; ✓/⚠ marks where your value sits. For w2w, iOS/Android means the targeted device (split provisional [A], R4-11). Stages without an OS split use the same value for both columns – that's what Research Round 4 is hunting.
Economics rows use each funnel's own money mechanics: a2a – store fee 15% (SBP), no cohort penalty; w2w – PSP ~5% plus the web-cohort ×0.89 retention penalty [B, Adapty]. That's why the two ROAS figures are directly comparable – same prices, different money plumbing. Colors: a2a = blue/coral, w2w = sky/green (iOS / Android).
Built from RevenueCat SOSA 2026: first three renewal rates by category B, M6 and M12 anchors B, store deltas B (Google Play +3.5pp on 1st monthly renewal, iOS +4.4pp on 1st weekly; stores converge by the 3rd renewal – so the curves meet at M6). The line between anchor points is log-log interpolation E; Business/Social & Lifestyle series are reconstructed from chart extremes quoted in the report E. Under each chart – a power-law fit per curve (least squares on log-log, months 1–12).
S(m) – share of subscribers still active in month m · m – months since the first payment (M0 = everyone) · R² – goodness of fit, 1.0 = the curve follows the formula exactly. These same power curves drive the Calculator's Fit from my first 2 renewals retention mode – enter what you already observe at week/month 1–2, the tail is extrapolated.
Why weekly LTV lives or dies in the first month: by M3 the median weekly cohort is already below 26%, by M12 – 1–2%. Monthly survives 6–14% to M12; Business is the outlier in both. Store choice barely matters after the first renewal – early funnel quality dominates. One structural exception: 31% of Google Play cancellations are billing errors (involuntary churn) vs 14–15% on the App Store [B, RC ↗] – grace periods and payment retries recover a chunk of it for free.
Subscriptions monetize at billing events, not continuously – so instead of integrating a daily activity curve, we build a month-by-month payment schedule per subscriber: the first payment (minus refunds), then each renewal weighted by the probability of surviving to it (the retention curve from the Retention curves tab – RC anchors or a power-law fit from your first two renewals). LTV M13 = the sum of that schedule; net LTV = ÷(1+VAT) ×(1−store/PSP fee). The same schedule gives the payback month and the peak-cash figure in the Budget view – one model, three answers.
Where: P – plan price (Pyearly – the yearly plan's price) · m – months since the first payment · S(m) – survival: the share of subscribers still active at renewal m · refund – refund rate, hits the first payment only · renewalM13 – probability the yearly plan renews at month 13 · VAT – sales tax inside the sticker price · upsell – ARPU uplift from welcome offers, plan upgrades and one-time purchases (0 if you have none) · fee – store commission (15/30%) or PSP fee (~5%) · S₁ – survival after the 1st renewal (= your 1st renewal rate) · r₂ – your 2nd renewal rate · b – decay exponent: how fast the cohort melts.
Two honest simplifications: we cut off at M13 instead of discounting an infinite tail, and the horizon is fixed rather than fitted per cohort. A WACC-discounted sum is the academically correct move – and it starts to matter when the volumes are large and the payback is long: at $100k+/month spend with a 12+ month payback, the time value of money quietly eats several percent of the modeled margin, and finance will (rightly) ask for the discounted version. At typical early-stage volumes and sub-year paybacks, the cutoff is both simpler and easier to defend.
| Method | How it works · when to use |
|---|---|
| Post-factum | LTV = Revenuecohort ÷ Sizecohort Wait until a cohort fully dies, divide its total revenue by its size. The only method that measures rather than models – and useless in practice, because you can't wait years. Everything below is a forecast. |
| Divide everything | LTV = Total Revenue ÷ Total Users All revenue ÷ all users, one arithmetic action. Fast and crude: mixes app life stages, counts users who haven't had time to pay, can't segment. A sanity check, not a model. |
| Lifetime × ARPDAU | LTV = Lifetime × ARPDAU, ARPDAU = Revenue ÷ DAU Average lifetime (days until an inactivity window) × average revenue per daily active user. Simple, segmentable – but multiplies two averages from non-overlapping user sets and assumes ARPDAU never changes. |
| Retention-curve integral (Bottoms Up) | R(t) = A·e−Bt + C, Lifetime = ∫₀T R(t)dt, LTV = ARPDAU × Lifetime Fit the curve through known retention points (D1/D7/D28…), lifetime = the area under it. Accurate, gives a retention forecast as a bonus. Our method is its subscription-specific cousin: with discrete billing the integral collapses into a sum over renewal events – fewer assumptions, same idea. |
| Cumulative ARPU fit (Top Down) | cumARPU(t) ≈ A·ln(t) + B, LTV = cumARPU(t*) or PV = Σ CFi ÷ (1+WACC)i Track cumulative ARPU of a cohort at D7/D14/D28…, fit the curve, read LTV at the horizon – or add discounting and take the asymptote. Skips retention entirely; great when monetization is many small purchases. |
Symbols in the table: R(t) – retention on day t; A, B, C – fitted curve coefficients (least squares) · Lifetime – average days a user stays = area under R(t) · ARPDAU – average revenue per daily active user · DAU – daily active users · cumARPU(t) – cumulative revenue per cohort user by day t · t* – the horizon you read LTV at · CFi – cash flow of period i · WACC – discount rate (ask your finance people); discounting makes the infinite tail summable.
The golden rule regardless of method: segment. One blended LTV hides more than it shows – compute per plan, per platform, per geo, per acquisition channel (this whole calculator is that rule applied: vertical × geo × platform × plan).
Trust check: ✓ Run the built-in self-test – 15 assertions (anchor hits, monotonicity, internal consistency, hand-recalculated snapshots, guards) executed live in your browser, on exactly the code that computes your numbers.
The Bottoms Up / Top Down framing and spreadsheet mechanics: Eric Seufert (Wooga) – LTV spreadsheet models.
Two different worlds depending on who the merchant of record is – the store or you.
In most countries the sticker price includes VAT. At every transaction the store first strips the VAT out, remits it to the tax authority itself (you never touch it), and only then takes its 15/30% commission from what's left. Your monthly payout is already net of both.
When: deducted per transaction, automatically. Refunded transactions return the VAT too. You do not register, file or remit anything for store sales – but you also can't optimize it away.
On web billing the stores are out of the picture and the tax obligation lands on the merchant. Two routes:
Net-proceeds shape is the same in all cases: proceeds = price ÷ (1 + VAT) × (1 − fee). Only the fee differs: 15/30% store vs ~4.4–6% web.
VAT is set by the payer's storefront country – where the Apple ID / Google payment profile is registered – not by where your ads run. But Meta targets people by physical location, and a person's storefront almost always matches where they live. So with tightly geo-targeted campaigns the two coincide 90%+ of the time: buy US → US storefront → ~0% · buy Germany → DE storefront → 19%. That's why the calculator defaults the VAT field to the acquisition-geo rate [E].
Where the match breaks – set a blended rate manually:
Blended example: 60% US payers + 25% Western Europe (~20%) + 15% Turkey (20%) → 0.25×20 + 0.15×20 ≈ 8% blended – enter that in the VAT field on the Calculator tab.
Rates [E] – verify against Apple's Exhibit B / Google Play tax documentation before relying on them; they change.
| Country | Rate deducted from price |
|---|---|
| United States | 0% (sales tax added on top) |
| Canada | 0–5% (GST added on top in most provinces) |
| United Kingdom | 20% |
| Germany | 19% |
| France | 20% |
| Netherlands | 21% |
| Spain | 21% |
| Italy | 22% |
| Sweden / Denmark / Norway | 25% |
| Poland | 23% |
| Turkey | 20% |
| Brazil | ~9.25% (CIDE/PIS/COFINS mix, store-dependent) |
| Mexico | 16% |
| Saudi Arabia | 15% |
| United Arab Emirates | 5% |
| India | 18% GST |
| Indonesia | 11% |
| Philippines | 12% |
| Japan | 10% |
| South Korea | 10% |
| Australia | 10% GST |