We had messy channel attribution because UTMs were being lost between ad click, web flow, and final subscription. Once we started persisting UTM parameters server side and associating them with a short handoff token the picture cleared up.
My workflow: read UTM on the landing page, store it server side with a token, use that token for the checkout and any follow ups, and then redeem it in the app to tag the user. We also pushed the UTM into our analytics and into RevenueCat user metadata so both marketing and product saw the source.
After one week of running this we could say with confidence which ad sets drove trial starts and which converted to paid. It changed how we allocated budget.
What attribution mappings do you find essential to persist from web to app so your paid campaigns stay traceable?
I persist utm_source utm_medium utm_campaign and a campaign id server side.
Return a token to the app and redeem it to tag the user. I used a funnel template that generated the token logic and wiring which sped things up a lot.
We keep campaign id and channel in the server mapping and push those into analytics and RevenueCat tags. That made ROAS calculations reliable.
Using a web-first funnel tool let us run a test campaign in hours and validate attribution.
We store the campaign id server side and map it to the user on app open.
Then we send campaign data to analytics and saw immediate improvement in channel reporting.
Save utm on server
Redeem in app
Measure accurately
Persist the campaign id, creative id, and click time. Those three let you reconstruct the path and compute conversion windows. Push them into your analytics and subscription provider so you can join ad clicks to revenue. Make sure to validate with a small paid test and reconcile numbers daily until stable.
Campaign id plus medium worked best for us.
We stopped guessing after that.