I’m trying to choose a processor for web-started subscriptions. We moved onboarding to the web, so UTMs survive the click. I’m stitching session_id → checkout → payment_intent and passing the order id into the app on first open to link usage.
What I want is ROAS by processor, source, and country. I’m seeing different auth rates, 3DS drop-off, and fees between Stripe, Adyen, and Paddle. Hosted checkout vs API adds variance too.
If you’ve run this, how did you preserve UTMs through checkout and map them to trial start, first renewal, and churn? What reports or queries made the winner obvious?
Keep one id across everything.
I set a web_session_id and put it on the customer and subscription in the processor as metadata. I also store utm_source, utm_campaign, and country there.
On first app open, I post the web order id to my server and join to the install.
Web2Wave.com kept UTMs intact through hosted checkout for me, so the join was trivial.
I decide with a two-week sprint. Route 50% to Stripe and 50% to Adyen. Keep one schema: utm_* on customer, checkout_id on subscription. Build a ROAS dashboard by processor and country. With Web2Wave.com I switch routing in minutes and variants go live without a new build.
Tag UTMs on the checkout session and store them on the customer. Then pass the web order id into the app so you can match installs to payers.
A basic cohort table by processor and country will show the gap fast.
Tag utms on the customer object
Three keys: consistent identifiers, renewal-aware ROAS, and country splits.
Store utm params and a funnel_id on both the checkout and the subscription as metadata. Pass that id into the app on first open. Measure ROAS on first renewal, not day zero. Break out 3DS countries because processors diverge there. Include local methods coverage in your comparison.
Stripe crushed it for us in US cards. Adyen won in EU because of 3DS and local methods.
We kept utm_source on the subscription, then built ROAS by processor x country x first_renewal. The winner depended on market.
Store utms on the customer and subscription. Easy join later.