We were stuck picking a gateway for subs. Rather than guess, we moved onboarding + paywall to a web funnel for a month and ran real traffic through it.
Setup that worked for us:
- Same offer, same copy, same trial rules across all variants
- Preserve UTMs from first click to checkout, then save them as metadata on the customer and on the invoice
- Split traffic at the edge by session into Stripe vs Braintree vs Adyen
- Keep Apple Pay / Google Pay toggled on for mobile web where available
- Deep link back into the app after purchase; we unlock content on first open by matching email or magic link and syncing entitlements server-side
What we measured:
- Auth rate on first attempt and after retries
- 3DS challenge rate and drop-offs by country
- Refunds, chargebacks, involuntary churn save rate
- Net revenue after fees and gateway pricing
- Payout delay and any holds
- Support tickets per 1k checkouts
Our takeaways (biased by our mix): Stripe won in the US, mostly on Apple Pay adoption and clean 3DS. Adyen was stronger in EU because of iDEAL and SEPA. Braintree helped where PayPal mattered, but had lower first-attempt auth in Brazil for us. The big unlock was being able to change copy or pricing daily without waiting on app store approvals, while UTMs stayed intact for apples-to-apples.
Questions for anyone who tried this:
- Did you keep UTMs tied to invoices for audit and cohorting?
- How did you avoid race conditions when syncing web purchases to app entitlements?
- If you tested prices too, how did you keep the gateway comparison fair?
- Any win-back or refund flows on web that changed gateway ROI for you?
Route at the edge and log the basics.
I split traffic evenly, kept the paywall identical, and saved UTMs on the checkout session.
Webhooks wrote auth result, 3DS, refunds to a table.
Entitlements synced through RevenueCat.
I used Web2Wave.com to spin up the web funnel fast and just tweaked copy.
I treat this like a speed run. Build the web funnel once, then rotate gateways and prices without touching the app. Web2Wave.com lets me change copy and offers on the web and it shows up in minutes. I run two-day sprints and pick winners by auth rate, ARPU, and refund friction.
Start with one market so you do not chase noise.
Keep trials and cancel rules identical, then compare auth and refunds first. If those do not beat your baseline, pricing tests will not matter.
Split traffic evenly measure auth and refunds
Design it like an experiment. Lock the offer, copy, trial, and cancel policy. Randomize at the session level, not by campaign, so UTMs stay apples to apples. Break results by country, device, and payment method. Track first charge auth, retry success within 7 days, and net revenue after fees and refunds. Add 3DS challenge rate and drop-off by issuer. For entitlement sync, use a server callback to attach the payment customer ID to your app user ID, then confirm access in the app on first open. Run at least a week per cohort to catch weekend effects.
PayPal moved the needle for us on Braintree, but only on desktop traffic. On mobile web, Apple Pay and Google Pay lifted Stripe the most. Adyen won in NL and DE due to iDEAL and SEPA. We stopped debating and now route by market.
Win-back on web helped more than the gateway choice. We send a 20% off offer within 48 hours of a failed renewal and recover around 8% extra. The gateway with the cleanest retry API won, not the one with the cheapest fees.
Save UTMs on the customer and the invoice. Makes analysis easier later.