AEO – app event optimization: Meta bids for an in-app event, here the trial start · MAI – mobile app install optimization · VO – value optimization, bids for purchase value · SBP – Apple's Small Business Program, 15% commission instead of 30% · M13 – the horizon: 12 months of payments plus the first annual renewal in month 13 · P25 / P75 – the 25th / 75th percentile of the benchmark panel; the median (P50) is the default · CPT – cost per trial start · CPA – cost per subscriber.
| Plan | On | Price, $ | 1st-period price, $ (intro offer – optional)1st price, $ | Share of subscriptions, %Share, % |
|---|---|---|---|---|
| Weekly | $ | $ | % | |
| Monthly | $ | $ | % | |
| Yearly | $ | $ | % |
Every number below is what the code uses today (constants in CONFIG, GEO, VERT, PLAT, MAI); the reasoning behind each choice lives in Design decisions; every source was re-checked against its live page on 4 Sep 2026. Scenario presets move conversion and retention fields P25 → P75 and the CPM the opposite way.
RevenueCat SOSA 2026 benchmark curves – the category median B and the two extremes E – against the dashed curve your current setup monetizes (benchmark × scenario, your typed anchors, or the early-stage fit). Store switch applies RC's 1st-renewal deltas; stores converge by the 3rd renewal.
Subscriptions monetize at billing events, not continuously – so instead of integrating a daily activity curve, the calculator builds a month-by-month payment schedule per subscriber and sums it to M13. One model, three answers: LTV, payback month and the peak cash it takes to fund 12 months of spend (the budget line under the results).
Two honest simplifications
| 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. |
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).
Consistency checks: the built-in self-test (button in the footer, or ?test=1) runs 35 assertions live in your browser – anchor hits, monotonicity, tab-to-tab consistency, hand-recalculated snapshots, guards – on exactly the code that computes your numbers. They prove the model is internally consistent, not that the benchmarks are right; for that, every field carries its source and confidence tag.
The Bottoms Up / Top Down framing and spreadsheet mechanics: Eric Seufert (Wooga) – LTV spreadsheet models.
What the calculator deducts by default – the rate of the acquisition geo, blended where a region mixes countries E; override it in the VAT/GST field whenever your payer mix differs.
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/GST field of the Calculator.
Standard VAT / GST on digital services as the stores deduct it from the sticker price. ✓ = the rate appears in Apple's or Google Play's own tax notices (checked Sep 2026); the rest are the countries' standard rates [E] – they change, so verify against Apple's Exhibit B / Google Play tax documentation before relying on them. Grouped the way the Geo selector is; one country per row.
| Americas | Rate |
|---|---|
| North America | |
| United States | 0% (sales tax added on top) |
| Canada | 0–5% (GST added on top in most provinces) |
| LatAm – Spanish-speaking | |
| Mexico | 16% ✓ |
| Argentina | not deducted by the stores ✓ – 21% VAT plus perception taxes are added on top by the card issuer |
| Colombia | 19% ✓ |
| Chile | 19% ✓ |
| Peru | 18% ✓ (since Feb 2025) |
| Brazil | |
| Brazil | ~9.25% withholding mix (CIDE/PIS/COFINS, store-dependent) + IOF 3.5% on Apple since Aug 2025 ✓ |
| Turkey · Gulf | Rate |
|---|---|
| Turkey | 20% |
| Saudi Arabia | 15% ✓ |
| United Arab Emirates | 5% ✓ |
| Qatar | 0% – no VAT; not a store-collected country |
| India · SEA · APAC | Rate |
|---|---|
| India | 18% GST |
| Pakistan | not deducted by the stores ✓; selling direct (w2w): provincial sales tax on services 13–16% [E] |
| Indonesia | 11% ✓ |
| Philippines | 12% ✓ (since Aug 2025) |
| Vietnam | 10% ✓ (since Aug 2025) |
| Thailand | 7% ✓ |
| Malaysia | 8% service tax ✓ |
| Singapore | 9% GST ✓ |
| Japan | 10% JCT ✓ (platform-collected since Apr 2025) |
| South Korea | 10% ✓ |
| Australia | 10% GST ✓ |
| New Zealand | 15% GST |
| Europe | Rate |
|---|---|
| United Kingdom | 20% |
| Ireland | 23% |
| Germany | 19% |
| Austria | 20% |
| Switzerland | 8.1% ✓ |
| France | 20% |
| Belgium | 21% |
| Netherlands | 21% |
| Spain | 21% |
| Portugal | 23% |
| Italy | 22% |
| Poland | 23% |
| Czechia | 21% |
| Romania | 21% ✓ (since Aug 2025) |
| Greece | 24% |
| Sweden | 25% |
| Denmark | 25% |
| Norway | 25% |
| Finland | 25.5% |
The companion document to this calculator: for every block – what is computed → formula → why → what was rejected → status. Every number in it is the one in this tool's code, and the dated decision log is at the end. The method notes under the results link straight into its sections. Open the full document →
Jump to: 0. Systems map · 1. Setup selectors · 2. App → App funnel · 3. Web → Web funnel · 4. LTV inputs · 5. Plans & prices
Every benchmarked field of the calculator starts from a public industry number; the moment you type your own value it is used as is – no seasonality, optimization-event, platform or paid-traffic factor is applied on top. This tab lists, for every input, the definition the model uses (so that a similar-looking metric does not get pasted in), the system and report it comes from, the granularity and history that make the number trustworthy, and the trap that most often breaks it.
Notation. The calculator has 35 numeric inputs in App → App mode; 24 of them carry a benchmark tag (B benchmark · E estimate · A assumption), the rest are your prices, plan shares, budget and target. Granularity – the cut at which the number has to be measured for the model to be honest: at least geo × platform (iOS / Android) × month; for retention – by plan and by cohort of the first payment. History – how many months of data it takes before the number is signal rather than noise.
| Layer | Systems · what it gives the calculator |
|---|---|
| Ads | Systems Meta Ads Manager (plus Google Ads / TikTok where used) Gives spend, impressions, CPM, link clicks, unique outbound clicks, landing page views – by campaign / country / OS / month; the optimization goal of each campaign (AEO / MAI / VO) |
| Attribution | Systems MMP – AppsFlyer / Adjust / Singular; SKAN postbacks on iOS Gives installs by campaign × geo × platform, click→install, organic installs, cohort reports "spend → trials → paid" |
| Stores | Systems App Store Connect (App Analytics + Financial Reports), Google Play Console (Store performance, Earnings) Gives impressions → product page views → downloads (store CVR) by country and source; proceeds after commission and tax by storefront; the commission tier (15 / 30%) |
| Subscriptions | Systems RevenueCat / Adapty / your own billing backend (+ App Store Server Notifications, Google RTDN) Gives trial starts, trial→paid, renewals by cycle, refunds, intro offers, MRR by cohort; a customer list with the first-payment date and plan |
| Product | Systems Amplitude / Mixpanel / Firebase / PostHog Gives events open → onboarding → registration → paywall_view → trial_start / purchase; for web→web – LP view, quiz start / finish, email, checkout |
| Web payments (w2w) | Systems Stripe / Paddle / Braintree Gives checkout sessions initiated vs paid, net proceeds, fees, refunds, disputes, VAT (Stripe Tax, or Paddle as merchant of record) |
| Data warehouse | Systems BigQuery / Snowflake / ClickHouse + ETL (RevenueCat → BQ, MMP raw data, Stripe → DWH) Gives the one place where spend, installs and payments meet in a single cohort; without it the join is a spreadsheet – fine once, not as a process |
| Finance | Systems Apple Financial Reports, Google Play Earnings, Stripe payouts, the books Gives net revenue, VAT by country, commission, exchange rates – the check that "revenue" in the subscription tool and on the bank account are the same number |
Without an MMP and a subscription analytics tool the cost side can still be computed from Ads Manager and the store reports, but everything after the install and the whole LTV stay on benchmarks. Without a warehouse the cohorts are assembled by hand – half a day per geo × platform.
| Selector | What to pick · where to find it · trap |
|---|---|
| Platform / device | Pick iOS, Android or Blended Where Ads Manager: split by OS; MMP: install shares Trap "Blended" only makes sense for a real mix; at 80%+ iOS, run iOS and Android separately |
| Vertical | Pick the store category Where App Store Connect / Play Console – the app's category Trap the store category can differ from how the product monetizes (a quiz-funnel H&F app is still H&F) |
| Benchmark base | Pick Hard-paywall / All apps Where product: is there a path to content without a paywall? Trap irrelevant once you type your own install→trial – the field is overwritten |
| Geo | Pick where you acquire users Where Ads Manager: spend by country over the last 3 months Trap one geo per run; a regional mix – run the largest regions separately |
| Scenario preset | Pick Reasonable Where not needed once your data is in – the preset only moves the remaining benchmarks |
| Optimization event | Pick AEO trial / MAI / Purchase Where Ads Manager: the optimization goal of the campaigns that carry ≥70% of spend Trap mixed optimization goals – run one branch per goal |
| Paywall trial | Pick with / no trial Where product: is there a trial on the main paywall? Trap some apps trial only on Android or only on the annual plan |
| Trial length | Pick 3 / 7 days Where App Store Connect / Play Console – intro offer settings |
| Seasonality | Pick the launch month Where the media plan Trap a typed CPM is used as is – seasonality and the optimization premium are not added; the selector matters only while the CPM is the benchmark |
| AI product | Pick yes / no Trap the Adapty modifiers apply to benchmarks only, never to typed values |
| Store commission | Pick 15 / 30 / PSP ~5% Where App Store Connect → Agreements (Small Business Program, $1M/year threshold); Play Console – 15% on the first $1M; Stripe / Paddle – your plan Trap the most common mistake: revenue in the subscription tool is gross while the company thinks net |
| Retention input | Pick Benchmark / Fit Where do you have 6–12-month cohorts? Trap fit mode is for apps younger than six months |
| Field | Definition in the model · primary source · granularity / history · trap |
|---|---|
| CPM – base | Definition cost per 1,000 impressions; the model adds seasonality and the optimization premium to the benchmark and takes a typed value as is Source Ads Manager: spend ÷ impressions × 1,000 Cut · history geo × OS × month; 3 months Trap type the CPM of the month and of the campaigns (optimization goal) you are modeling – nothing is layered on top |
| CTR – impression → click | Definition link clicks ÷ impressions Source Ads Manager: link CTR (not "CTR (all)") Cut · history geo × OS × month Trap "CTR (all)" counts likes and expands – 1.5–2× too high |
| Click → store page | Definition share of clicks that reach the store page Source MMP clicks (or App Store Connect impressions from the App Referrer source) ÷ Ads Manager unique outbound clicks Cut · history geo × OS Trap often >100% because the counters differ; the calculator caps at 100%. No data – leave 90% [A] |
| Store CVR (page → install) | Definition product page views → first-time downloads Source App Store Connect → App Analytics → Metrics: Product Page Views and Total Downloads by source type App Referrer / Web Referrer (paid traffic), CVR = downloads ÷ page views; Play Console → Store performance → Store listing acquisition report: visitors → acquisitions by UTM / channel Cut · history geo × OS × month; 3 months Trap App Store Connect's own "Conversion Rate" is impression-based – a different metric; the stores count differently (Apple – page view → download, Google – visitor → installer), never mix them |
| Paid-traffic factor | Definition multiplier on the store CVR for paid traffic Source not needed when the store CVR is taken from a paid source – enter 100 Trap keep 80% [A] only with a blended store CVR |
| Install → paywall view | Definition share of installs that see the paywall (composite of open + onboarding + registration) Source product analytics: users with a paywall_view event ÷ installs (MMP), same cohort Cut · history geo × OS × install week; 8+ weeks Trap MMP installs ≠ store installs (±10–20%); the denominator must come from the same system as the CPI |
| Paywall view → trial start | Definition trial starts ÷ unique paywall views Source RevenueCat / Adapty (trial starts) + analytics (paywall views) Cut · history by install cohort; 8+ weeks Trap if the subscription tool counts a trial start by transaction and analytics by tap, they disagree – reconcile on one week |
| Organic uplift | Definition extra organic installs, % of paid installs Source MMP: organic ÷ paid installs in the same geo × OS and period; better – a geo holdout or weeks with vs without spend Cut · history geo × OS × month; 3 months Trap brand and ASO installs are not "uplift"; in doubt, 0 – that is an honest paid-only ROAS |
| Trial share | Definition share of new subscriptions that start with a trial Source subscription tool: new subscriptions with vs without a trial Cut · history by plan; 3 months Trap not applied when the paywall has no trial |
| No-trial paywall factor | Definition direct purchases as a share of the trial-start rate Source needed only for the "trial vs no trial" comparison – a paywall A/B test (Superwall, Adapty) Trap without your own A/B, keep the 40% [E] benchmark |
| Field | Definition · source · trap |
|---|---|
| CPM (web) | Definition as above, for web campaigns Source Ads Manager: campaigns optimized for purchase / lead Trap US health quiz funnels run $40–100+; the $15 benchmark is far below |
| CTR (web) | Definition link clicks ÷ impressions Source Ads Manager |
| Click → LP view | Definition LP views ÷ unique outbound clicks Source GA4 / Mixpanel page_view on the LP ÷ Ads Manager unique outbound clicks Trap Meta's landing page views are sessions, its clicks are unique: >100% is normal – enter 100 |
| LP → quiz start | Definition quiz_start ÷ LP views Source quiz analytics (Amplitude or your own tracking) |
| Quiz start → finish | Definition quiz_complete ÷ quiz_start Source same |
| Finish → email submit | Definition emails captured ÷ quiz_complete Source analytics + the ESP (Klaviyo / Customer.io) – reconcile with new contacts Trap no email step – enter 100 |
| Paywall → initiated checkout | Definition checkout sessions ÷ paywall views Source Stripe Checkout sessions created ÷ paywall_view |
| Checkout completion | Definition paid ÷ initiated Source Stripe: sessions completed ÷ created (or Paddle) Trap dedupe test and repeated sessions of one user |
| Retention (monthly / yearly / weekly) | Definition as in section 4, on the web subscriptions Source Stripe Billing / RevenueCat Web / your billing Trap the ×0.89 web-cohort factor in the calculator is for benchmarks only; typed renewals are used as is |
| Field | Definition in the model · source · granularity / history · trap |
|---|---|
| Monthly retention M1 | Definition share of monthly subscribers who pay the 1st renewal Source RevenueCat → Charts → renewal rate by period; Adapty → Retention; or the warehouse from transaction data Cut · history by first-payment cohort × geo × OS; 3+ cohorts Trap measure from the first payment (after the trial), not from the trial start; exclude sandbox |
| Monthly retention M6 / M12 | Definition share still active at the 6th / 12th renewal Source same Cut · history cohorts aged 7 and 13 months Trap no such cohorts – keep the benchmark or switch to fit mode; do not extrapolate by hand |
| Yearly renewal at M13 | Definition share of annual subscribers who pay the 2nd year Source subscription tool renewals on the annual plan; App Store Connect → Subscriptions → retention Cut · history cohorts older than 13 months Trap an app younger than a year has no such number – it is a benchmark by definition |
| Weekly renewals #1 / #2 / #3+ | Definition weekly-plan renewals by cycle Source RevenueCat → renewal rate by period (weekly); the warehouse Cut · history 12+ weeks of cohorts |
| Weekly survival at week 26 | Definition share of weekly subscribers still paying at week 26 Source warehouse / customer list: cohorts aged 6+ months Trap without 6-month cohorts – the 10% [E] benchmark, the least certain number in weekly LTV |
| My 1st / 2nd monthly renewal (fit mode) | Definition the first two renewals of the monthly plan Source subscription tool – the first two or three cohorts Cut · history 2–3 months of data Trap a mode for young apps; a two-point power law is optimistic – the calculator says so |
| Trial → paid | Definition share of trials that convert to paid Source RevenueCat → trial conversion (by trial-start date, cancellations during the trial included); Adapty Cut · history by plan × geo × OS; 8+ weeks Trap take a cohort whose trials have already ended – open trials in the denominator understate it |
| Refund rate | Definition refunds of the first payment Source RevenueCat → refunds; App Store Connect → Sales and Trends (refunds); Play Console → Financial reports Cut · history 3 months Trap renewals are rarely refunded – this field is about the first payment only |
| Upsells & offers | Definition extra ARPU on top of base subscriptions Source subscription tool / Stripe: one-time purchases, plan upgrades, welcome offers Cut · history 3 months Trap enter revenue you actually collect, not plans for it |
| VAT / GST | Definition tax inside the sticker price, by the payer's storefront Source Apple Financial Reports (proceeds by storefront, already net of tax and commission); Play Earnings (tax column); Stripe Tax Cut · history the storefront mix weighted by spend Trap the targeted country ≠ the payer's storefront (expats, store arbitrage) – take the real mix from the payouts |
| Field | Source · trap |
|---|---|
| Price weekly / monthly / yearly | Source App Store Connect → Subscriptions → price tier by storefront; Play Console; Stripe products Trap the price of the storefront you buy in, not the US default; enter the gross (sticker) price – the model removes VAT and the commission itself |
| 1st-period price (intro offer) | Source intro offer settings in the stores; Stripe coupons / trial price Trap quiz funnels almost always have one – without it the LTV of the first payment is overstated |
| Share of subscriptions | Source subscription tool: new subscriptions by product over 3 months (counts, not revenue) Trap the dashboards show revenue shares; the table wants subscription shares – annual plans always look bigger in revenue |
| Monthly ad budget | Source the media plan |
| Target ROAS | Source the company's financial model: how much net LTV per $1 of CPA the margin and the payback need Trap 1.3 is the tool's default; a company usually has its own number – or none, which is the first question to ask |
Every benchmarked field of the calculator shows which of these it is – B benchmark, E estimate, A assumption – until you overwrite it. The honest way to use the tool on your own data is to replace what you can measure and leave the tag on what you cannot.
Sources · public benchmarks only, collected July 2026 and re-verified against the live pages on 4 Sep 2026; the data itself is of mixed vintage (RC / Adapty / Lebesgue / Triple Whale / RocketShip 2026, AppTweak H1 2024, Bïrch 2021–23, Superwall 2022, TUNE 2017) – see the why? on each field and verify before big bets. Fields tagged A are documented assumptions pending research. No client data anywhere in this tool.
✓ Run the built-in self-test 35 assertions, live in your browser
RevenueCat SOSA 2026 · Adapty SOIS 2026 (paywall, trial, web and AI figures are from Adapty's paywall blog post below) · Adapty paywall data · Lebesgue CPM by country · ADCostly (TR) · Bïrch seasonality · Superads CTR · Triple Whale · AppTweak store CVR (2025 store averages) · Adjust – AppTweak H1 2024 category CVRs · Adapty – App Store conversion by category · SplitMetrics category CVR (via AppScreenshotStudio) · RC renewal rates by category · RC – the Android paywall gap · Interact quiz report · Superwall · Mobile Dev Memo (MAI/AEO) · Stripe – Apple Pay conversion lift · Stripe vs Paddle fees · RocketShip HQ – Meta app-install CPI/CPM 2026 · Meta location fees (Jul 2026) · Google Play – tax rates & VAT by country · Apple – price and tax updates.