Fit a retention curve from D1-D30, project LTV & ROAS to D720, and reverse-solve the early ROAS you need to break even. Zero dependencies, nothing leaves your browser.
| Day | Cum. active days | LTV | ROAS |
|---|
Retention fit. Anchor points D1/D3/D7/D14/D30 (plus an optional long-horizon point) are fit by least-squares regression.
Power-law: R(d) = A·d^b (log-log regression). Exponential: R(d) = A·e^(b·d) (semi-log).
Blended averages the two predicted curves. Day 0 (install day) retention = 1.0.
Active days. ActiveDays(N) = 1 + Σ R(d) for d = 1…N (sum of fitted daily retention, plus the install day).
LTV. LTV(N) = Σ ARPDAU(d)·R(d), where ARPDAU(d) = ARPDAU₀·(1+g)^(d/30) and g is the growth/30d input (0 = constant ARPDAU).
ROAS. ROAS(N) = LTV(N) / eCPI × 100%. Payback day = first day LTV ≥ eCPI.
Reverse solver. Required ROAS at day E to hit target T% by day H: T × LTV(E)/LTV(H). Required ARPDAU: ARPDAU₀ × (eCPI·T/100) / LTV(H). Max viable eCPI: LTV(H)·100/T.
Campaign projection. Projected ROAS at day Y from an observed ROAS at day X: ROAS_obs × LTV(Y)/LTV(X) (assumes the modeled curve shape matches the live cohort).
Caveat. Without a long-horizon anchor the fit is built on ≤30 days, so D360/D720 are pure extrapolation. Real long-tail retention usually flattens (power-law can under-count survivors) and ARPDAU drifts up. Add a real D60/D90/D180 point, use the growth input, and treat far-horizon numbers as a band, not a point.
Single-file, no dependencies, no data leaves the browser. Built for game producers & UA teams.