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. The replays show people leaving within seconds of seeing the price, not failed payments (section 7).
- 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 | Show the price and the renewal terms before checkout, so the order sheet holds no surprise. Prefer terms that do not renew, or say plainly that nothing is charged today | Checkout → paid | 1.5–2× | Web leavers read the order box for a median 16 s and closed it; few touched a way to pay (section 7) | Medium |
| 4 | Fix the app's plan screen: correct the FAQ prices, price the free week the same as "Start now", preselect monthly, add a close button | Arrival → free week | 1.9× if free-week starts reach the 6.9% median | 32 of 51 replays tapped back within seconds; the FAQ quotes US dollars in every country (section 7) | Low: one app release |
| 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 on the web only. In the app, 0 of 12 confirmed a 12-week sheet against 5 of 18 monthly, so lead with monthly there | Revenue per payer | 1.1–1.5× on the web | 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 (unproven: 0 of 12 so far, section 7) | $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%. The replays show people leaving within seconds of the price, made worse by a free week that costs more later and an FAQ in US dollars (section 7). 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 | Fix the plan screen: FAQ prices from the App Store, the free week at the "Start now" price, a close button, back without the loader | Plan screen → free-week press | 36% → 50% is 1.4× | 32 of 51 replays tapped back within seconds (section 7) |
| 2 | Make Apple's sheet quote a price she expects: monthly preselected, the same price after the free week. Give Ask to Buy and App Store errors a next step | Apple's sheet → confirmed | 18% → 25–35% is 1.4–1.9× | Cancellers closed it after a median 8 s; 0 of 12 confirmed a 12-week sheet |
| 3 | Get a first workout done in the free week: unlock day one's workout the moment she buys, then a nudge on day 2 | Free week → paid | 38% → 50%, 1.3× | 0 of 4 free-week users finished one; buyers land on a "PREVIEW ONLY" workout |
| 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 monthly plan, not the 12-week one | Apple's sheet → confirmed | Keeps the 5 of 18 monthly rate | 0 of 12 confirmed a 12-week sheet |
| 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 |
Fixes 1–3 and 6 fit in one app release and App Review; section 7 has the evidence. 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. Why people leave checkout
We watched the replays of 94 app users who reached the plan screen (29 Oct–3 Nov). We also read 40 web sittings that opened the order sheet (22–28 Oct). App replays are screenshots; web replays were read as text, so we see every tap and what the order box said.
On both routes most leavers look at the price and the renewal terms for a few seconds, touch nothing and leave. Only 3 of 51 payment attempts failed: 1 declined card on the web, 2 Apple errors in the app.
| App: plan screen | App: Apple's sheet | Web: order sheet | |
|---|---|---|---|
| Who | 67 left without pressing (51 usable recordings) | 22 cancelled | 29 left |
| How long they looked | 16 of 51 left within 6 s, many within 1 s | Median 8 s; buyers 17–49 s | Median 16 s; buyers 19–71 s |
| Touched the offer | About 4 of 51 touched a plan card or the promo link | All pressed the preselected free week | About 7 of 28 touched the card or wallet rows |
| How they left | 32 of 51 tapped back; 19 went on back through the quiz | 7 tapped back out after one look | 21 of 28 closed with the ×; 5 left the page |
| Failures | – | 2: a stuck "Opening the App Store…" and an Ask to Buy wait | 1 card declined |
Four faults make the price harder to accept. All are in the app unless marked.
- The FAQ quotes US-dollar prices in every country. It says "$59.99 every 12 weeks" in Taiwan, then the plan card says NT$1,990 (33× the number). Canada reads $19.99 and the card says $24.99; Britain reads "$" for "£". The app's copy holds fixed prices instead of reading them from the App Store. 3–5 Taiwan leavers read that answer just before the plan screen.
- The free week costs more later. In every country, the price after the free week is 14–41% above "Start now". Examples: CA$24.99 against CA$19.99 a month, £19.99 against £14.99, NT$690 against NT$490. The app preselects the free week, so Apple's sheet quotes the higher price. One buyer refused the free week in Apple's sheet and bought "Start now".
- There is no way out except back. Back from the paywall replays "Putting your plan together". Some people tap back up to 29 times to reach the welcome screen.
- The 12-week price loses in Apple's sheet. 0 of 12 confirmed a 12-week sheet; 5 of 18 confirmed a monthly one (Fisher p ≈ 0.07). This runs against "lead with the 12-week plan" in sections 3 and 6.
Three more things the replays showed:
- Buyers cannot train on day one. Every app buyer we could follow landed on Today with the first workout marked "PREVIEW ONLY" until the next day. Each one tapped it again and again. The web shows "Preview only" too. This fits "0 of 4 free-week users finished a first workout".
- On the web, the renewal terms decide. The free week that ends in one payment ("nothing renews") paid 4 of 11 sheet openers. The monthly free week ("cancel any time") paid 1 of 11. The samples are small, so treat it as a hint.
- A safety bug: the app accepted goals at BMI 15.4 and 16.7 and drew a "Thin" goal body.
| # | Fix | Where | Effort |
|---|---|---|---|
| 1 | Read the FAQ prices from the App Store, like the plan cards | App | Low: one function, then an app release |
| 2 | Price the free week the same as "Start now" after it ends, or drop "Start now" | App, App Store Connect prices | Low |
| 3 | Show the price and "nothing today, a reminder on day 5" on the paywall, before the plan screen | App and web | Medium |
| 4 | Preselect monthly in the app; keep 12 weeks as the second card | App | Low |
| 5 | Let the first workout start on the day she buys | Server rule, both routes | Low to medium |
| 6 | A close button on the paywall that keeps her plan, and back without the loader | App | Low |
| 7 | Say what to do on an Ask to Buy wait or an App Store error, and offer a retry | App | Low |
| 8 | Refuse goals below a healthy BMI | App and web quiz | Low |
8. 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.
- The fixes in section 7, one at a time, on free-week starts and paid sales per plan-screen viewer.
- 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/. - Checkout replays (section 7):
.claude/checkout-replays/:findings.md, per-session notes inapp/notes-batch1..4.mdandweb/text/.