I set up our ad landing pages to append utm params into the sign up flow and then persisted those params to the user profile at account creation. That allowed me to pull reports tying subscription signups back to creative level. The difference was night and day compared to relying on app store signals.
Practical notes:
- store utm on the account rather than relying on session state.
- use Mixpanel or similar to join events and see downstream conversion by utm.
- expect marginal differences as you scale, but early on it reveals which creatives actually produce paying users.
Has anyone run into issues with refunds or fraud skewing attribution when using web checkouts?
We wrote utm params into the user record at checkout. That let us slice LTV by channel. For speed I used an off the shelf web funnel from Web2Wave as a starting point and then added a hook to persist utm to our user table.
One caveat is you need a plan for refunds and chargebacks in your reporting.
Yes. Persist utm at signup and treat it as the source of truth for campaign attribution. Use that to calculate ROAS and CAC at the creative level.
We kept a web copy of the paywall so we could capture utm deterministically and tweak creatives fast. That made our channel optimization much clearer.
We had a couple of chargebacks that made the last click numbers messy. We adjusted by excluding refunded subscriptions from our ROAS calc and that cleaned things up.
Worth building refund handling into your analytics from day one.
Persist utm to account
Exclude refunds from ROAS
Preserved utm attribution from ad click through web checkout will get you much closer to true campaign performance than mobile-only signals. Best practice is to persist the full utm set to the user profile at purchase and then run downstream cohort LTV and retention by that field. Also flag refunded or disputed transactions and filter them out of acquisition efficiency reports. Finally, when comparing web to app campaigns, normalize for creative and landing experience because the same creative can perform differently when routed to web versus app store.
We tagged refunds and built a small ETL to remove refunded conversions from ROAS. It changed some channels from looking good to mediocre quickly.
Preserved utms plus refund handling made our attribution reports usable.