Where our ROAS leaks

Each step from impression to revenue, against the benchmarks, and the fixes that reach 2–3×

date2026-11-04sourcesMeta, PostHog, Stripe and App Store data, Oct 14–31 · RevenueCat State of Subscription Apps 2026

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.

A

Verdict

Three leaks, in order of size
  1. 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.
  2. 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).
  3. 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.

B

1. How ROAS breaks down

CPM: cost to be seenCTR: who clicksLink-through: whoarrivesPurchase rate: whopaysRevenue per payer

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.

C

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
Taiwan at the old price already paid back

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.
D

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
E

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×
Where to put the next dollar

Taiwan web at the old price, and English on the app. Keep English web small until a fix brings its CPM near $35.

F

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 –
After the paywall, the app converts like the web did at the old price

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×
G

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
The app route can reach 2× after Apple's cut, but only with the plan screen fixed

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.

H

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.

People leave when the price appears, not because payment breaks

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.

  1. 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.
  2. 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".
  3. 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.
  4. 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
I

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.
J

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 in app/notes-batch1..4.md and web/text/.