Where our ROAS leaks
Each step from impression to revenue, against the benchmarks, and the fixes that reach 2–3×
Every ad dollar returns 8–61 cents on the first charge. Three leaks cause most of it: the price we ask at checkout, the checkout itself, and the price of English web traffic. The app route and the Taiwan web route can reach 2–3× in the first year. The English web route can not without a much cheaper click.
Verdict
- Price at checkout. After web prices tripled on 27 Oct, English paywall viewers who opened checkout fell from 29% to 4.5%. Sales fell from 2 to 0.
- The checkout itself. On the web, 18–27% of the people who open checkout pay. Operators see 40–65%. In the app, 82% cancel Apple's payment sheet.
- English web traffic. CA/GB/AU web clicks cost $87 per thousand impressions. The same countries cost $13.66 on the app campaign.
We also judged ROAS too harshly and too kindly at the same time. Too harshly, because a monthly subscriber keeps paying. The median Health & Fitness monthly plan renews 57% of the time. If later months keep 75% (our assumption), her first year is worth about 3 first charges.
Too kindly, because the "incl. free trials" column assumed every free week pays. The median is 38%.
The app route leaks in two places of its own. The App Store page loses 70–90% of taps. The plan screen and Apple's sheet then lose 95% of paywall viewers. Sections 5 and 6 cover the app.
1. How ROAS breaks down
ROAS = 1,000 × CTR × link-through × purchase rate × revenue per payer ÷ CPM. A step that is 2× below its benchmark halves ROAS, so the gaps multiply.
| Step | Benchmark or target | Web, CA/GB/AU | Web, Taiwan | App, CA/GB/AU | App, Taiwan |
|---|---|---|---|---|---|
| CPM | ≤ $35 | $87 | $29 | $13.66 | $4.72 |
| Link CTR | 1–1.5% good, target 2.5% | 4.0% | 5.4% | 3.2% | 2.7% |
| Link-through to onboarding | – | 88% | 93% | 30% | 9.9% |
| First question done | about 50% | 40% | 16% | 80% | 93% |
| Paywall → opened checkout | 25–45% | 19% | 12% | 35% | 21% |
| Opened checkout → paid or free week | 40–65% | 20% | 27% | 18% | 15% |
| Arrival → free week or paid | 6.9% median (app) | – | – | 3.6% | 2.5% |
| Free week → paid | 37.7% median, 51.4% top quarter | – | – | pending 5–6 Nov | pending |
| Arrival → paid | 2–3% | 1.0% | 0.8% | – | – |
| Revenue per payer, first charge | – | $20 | $44 | $21 (monthly) | $18 (monthly) |
| ROAS, first charge | – | 0.08× | 0.61× | 0.20–0.27× expected | 0.17–0.19× expected |
The app's expected ROAS applies the 38–51% trial conversion to its pending free weeks. Web Taiwan's first-question rate undercounts, because a third of its landers skip the quiz.
2. The price change
| Paywall → opened checkout, old prices | Same, after prices tripled | Sales, old → tripled | |
|---|---|---|---|
| English web | 29% (9 of 31) | 4.5% (1 of 22) | 2 → 0 |
| Taiwan web | 15% (7 of 46) | 8% (4 of 49) | 2 → 1, cancelled |
Before the change, the Taiwan web ads spent $77 and took $87 on the first charge: 1.1×. After it, they spent $66 and took nothing.
- The samples are small. Each cell rests on 1–9 checkout openers, so read the direction, not the exact size.
- Our purchase-rate rule still applies. Decide the price on paid sales per visitor, not on checkout opens alone.
3. What to fix, in order
| # | Fix | Step it moves | Lift if it works | Evidence | Effort |
|---|---|---|---|---|---|
| 1 | Bring web prices back toward the old level, or test 1.5× against 3× | Paywall → checkout, checkout → paid | 2–6× more checkout opens, back to old-price rates | Section 2 | Low: the old Stripe prices still exist |
| 2 | Move English spend from web ads to the app campaign | CPM, cost per arrival | Cost per arrival $2.48 → $1.42 | Section 1 | Low |
| 3 | Find out why people leave checkout, then fix it. Log the pay press and payment method. Put Apple Pay and Google Pay first. Show the total before the sheet | Checkout → paid | 1.5–2× | 23 of 35 web openers left with no reason logged | Medium |
| 4 | Find out why the app's plan screen loses 64–72%, then fix that. It already preselects the free week and shows the Day 5 reminder and the price. Watch the replays of those who left before changing it | Arrival → free week | 1.9× if free-week starts reach the 6.9% median | 47 tapped "Get my plan", 17 opened Apple's sheet, 3 bought (English) | Low to look; medium to fix |
| 5 | Turn more free weeks into payers: a reminder before day 7, the first workout done in week 1 | Free week → paid | 1.3× (38% → 50%) | Benchmark; ours reads on 5–6 Nov | Medium |
| 6 | Improve the App Store page: screenshots that match the ad, a page per ad set, more ratings | Link-through | 1.5× (30% → 45%); Taiwan has more room at 9.9% | 70–90% of app taps never open the app | Medium |
| 7 | Sell more 12-week plans: preselect it, or show it first | Revenue per payer | 1.1–1.5× | App 12-week costs about 3× the monthly | Low |
| 8 | Let Meta optimize the app campaign for payers: fill the SKAdNetwork schema in Events Manager | All steps, through who Meta shows ads to | Unknown; installs are not payers | The schema is still empty | Low |
4. Paths to 2–3× in the first year
App, CA/GB/AU. Year-one revenue counts renewals: the 57% median first renewal, then 75% a month (our assumption).
| Step | Cost per arrival | Arrival → paid | Year-one ROAS |
|---|---|---|---|
| Today, with 38% of free weeks paying | $1.42 | 1.4% | 0.64× |
| + App Store page: link-through 30% → 45% | $0.95 | 1.4% | 0.97× |
| + Free-week starts 3.6% → 6.9% | $0.95 | 2.6% | 1.85× |
| + Free week → paid 38% → 50% | $0.95 | 3.5% | 2.44× |
| + A third of payers take the 12-week plan | $0.95 | 3.5% | 2.57× |
Web, Taiwan. 12-week plans; year one adds about 30% for renewals.
| Step | Arrival → paid | Year-one ROAS |
|---|---|---|
| Old prices, 26–27 Oct | 1.4% | 1.1× first charge, 1.4× year one |
| + Checkout close 18% → 35% | 2.7% | 2.70× |
| + Paywall → checkout 15% → 20% | 3.6% | 3.60× |
Web, CA/GB/AU. Even every fix together reaches about 1.9×.
| Step | Cost per arrival | Arrival → paid | Year-one ROAS |
|---|---|---|---|
| Today | $2.48 | 1.0% | 0.26× |
| + Old-price checkout rate | $2.48 | 3.0% | 0.77× |
| + CPM $87 → $35 | $1.00 | 3.0% | 1.91× |
Taiwan web at the old price, and English on the app. Keep English web small until a fix brings its CPM near $35.
5. The app funnel, step by step
New app users from the 48-hour app test, 29–31 Oct. Each row is people who reached that step.
| Step | App, CA/GB/AU | App, Taiwan | Where it leaks |
|---|---|---|---|
| Tapped the ad | 277 | 807 | – |
| Opened the app | 84 (30% of taps) | 80 (9.9%) | The App Store step loses 70–90% |
| Answered the first question | 67 (80%) | 74 (93%) | English loses 20% on screen 1 |
| Finished onboarding, about 28 screens | 48 (72% of starters) | 62 (84%) | About 1% a screen after screen 1 |
| Saw the paywall | 48 | 62 | – |
| Tapped "Get my plan" | 47 | 54 | Almost everyone |
| Pressed the free-week button on the plan screen | 17 (36%) | 15 (28%) | The biggest leak after the App Store |
| Confirmed in Apple's sheet | 3 (18%) | 2 (13%) | 11 cancelled, 2 payments failed (English) |
| Free-week users who finished a first workout | 0 of 3 | 0 of 1 | A warning for 5–6 Nov |
| Paid by 4 Nov | 0 (free weeks end 5–6 Nov) | 1 monthly plan | – |
From paywall to a sale started, the English app converts 6.3% (3 of 48). The English web converted 6.5% (2 of 31) before prices tripled. The app wins earlier: traffic costs a sixth as much, and 57% of its arrivals reach the paywall against 27% on the web.
- The plan screen is the decision. "Get my plan" is a pass-through; the plan screen with the prices loses 64–72%. It already preselects the free week and shows the Day 5 reminder, so the cause is not yet known. Every free-week sale also needs Apple's sheet, and 82–87% cancel there.
- The free-week users have not started training. Two of the four opened a workout and none finished one. A first workout in week 1 is the strongest lever we have on 5–6 Nov.
- App prices are low. The app sells the old price level: the monthly plan is NT$490 (about $15) in Taiwan and £14.99 in Britain. The 12-week plan costs about 3 times the monthly.
Apple's cut. Apple keeps 15% if FiftyStrong is in the App Store Small Business Program, and 30% in a subscription's first year if not. App Store Connect's price list shows proceeds at the 30% rate, so check the enrolment. Stripe keeps about 4% on the web. Tax is left out of both.
| Year-one ROAS after the store's cut | App, CA/GB/AU, keeps 85% | App, CA/GB/AU, keeps 70% | Web, Taiwan, keeps 96% |
|---|---|---|---|
| Today | 0.54× | 0.45× | 1.33× at the old price |
| + the first fix in section 4 | 0.82× | 0.68× | 2.59× |
| + all fixes in section 4 | 2.18× | 1.80× | 3.46× |
6. How to fix the app route
| # | Fix | Step it moves | Lift if it works | Evidence |
|---|---|---|---|---|
| 1 | Find out why people leave the plan screen. It already has the free week preselected, the Day 5 reminder, and the price after the trial. Watch the iOS session replays of the 64–72% who left, then test one change, such as the free-week card alone | Plan screen → free-week press | 36% → 50% is 1.4× | 64–72% leave; replay is on for every app user |
| 2 | Find out why people cancel Apple's sheet. Log the purchase result for each cancel, so a second thought shows apart from a failed payment. The plan screen already states the price, so the sheet holds no new information | Apple's sheet → confirmed | 18% → 25–35% is 1.4–1.9× | 82–87% cancel the sheet; 2 payments failed |
| 3 | Get a first workout done in the free week: start one right after she buys, then a nudge on day 2 | Free week → paid | 38% → 50%, 1.3× | 0 of 4 free-week users finished one |
| 4 | Fix the App Store page, Taiwan first: screenshots that match the ads, a custom page per ad set, more ratings | Tap → app opened | Taiwan 9.9% → 20% is 2×; English 30% → 45% is 1.5× | 386 Taiwan store visits gave 80 opens |
| 5 | Fill the SKAdNetwork schema with the free-week start, then optimize the campaign for it | Who Meta shows the ad to | Unknown; buys payers instead of installers | Meta now optimizes for installs only |
| 6 | Lead with the 12-week plan | Revenue per payer | 1.1–1.5× | 12-week costs about 3× the monthly |
| 7 | Soften screen 1 for English: a short welcome before the goal question | Opened → first question | 80% → 90%, 1.1× | Taiwan keeps 93% on the same screen |
| 8 | Run a week, not 48 hours: about 50 installs per ad set, $25–35 a day | Meta's learning | Needed to read any of the above | Neither ad set reached 50 installs |
Start with what costs nothing: watch the plan-screen replays and log why people cancel Apple's sheet. Fixes 1–3 then need an app release and App Review. Fixes 4, 5 and 8 need no build. Re-run the test for a week after the release and read it on paid sales, not installs.
7. What to measure next
- The app's free weeks on 5–6 Nov. They decide whether section 4's 38% assumption is too low or too high.
- Year-one value, not first charge. Read ROAS at day 7, 30 and 90 for each run, so renewals count.
- Why checkout fails. The web logs no pay press since the order sheet. Without it, fix 3 is a guess.
- App Store page conversion by country, from App Store Connect, to aim fix 6 at Taiwan or English.
- Runs long enough to learn. Two-day bursts never give Meta the about 50 results a week it needs.
Sources
- RevenueCat, State of Subscription Apps 2026: Health & Fitness trial conversion 37.7% median, 51.4% top quarter; download to trial 6.9% median. https://www.revenuecat.com/state-of-subscription-apps
- RevenueCat, renewal rates by category (2026): Health & Fitness monthly first renewal 57% median (46–68%). https://www.revenuecat.com/blog/growth/average-subscription-renewal-rates-by-app-category
- Operator benchmarks for CPM, checkout and lander → paid: the Meta ads playbook (21 Oct), from X and YouTube.
- Our data:
.claude/ads/checkpoint-2026-11-04/,.claude/ad-benchmarks/,.claude/roas-research/.