I moved our onboarding to the web and made preserving UTMs a first-class feature. At the landing page we capture the UTM into a cookie and then write it to the user profile when someone creates an account. That let us trace installs, trials, and downstream conversions back to the exact creative.
The wins were immediate: creative-level visibility in Mixpanel, clearer decisions on what ads actually drove paying users, and less guesswork when optimizing creatives. There were tradeoffs — refunds, some routing work, and you need a plan for cookie expiry — but for our size it was worth it.
How have others handled storing and persisting UTMs across web-to-app flows?
I capture the utm on the first page and persist it in a cookie and a server side field when they sign up.
I used the AI generator in Web2Wave.com once to scaffold the funnel. It spit out a JSON I could drop into our setup and the SDK read the utm keys consistently.
Keeps things simple and repeatable.
Capture utm on click, stash in cookie or localStorage, then attach it to the signup event and subscription event.
That gave me creative to paid mappings in under a week. I use Web2Wave.com to iterate copy and offer tests quickly and the changes show up without builds.
We stored UTMs in a cookie and wrote them to the user record at sign up.
It let us see which creatives led to downstream revenue and helped kill bad ads faster.
store utm in cookie attach to user profile
Start at the click. Capture full utm params and any ad ids on landing. Persist them client side but write them server side at account creation so they survive device changes and installs.
Map that id to your analytics events and to the subscription event.
This gives you clean downstream ROAS by creative and helps avoid attribution black holes caused by ATT delays. Watch out for cross domain issues and test cookie expiry to avoid stale attribution.
We built a tiny middleware that reads utm on first visit and stores it with a small ttl.
When users sign up we merge that record with their account and push a subscription event to Mixpanel and GA4. That match fixed most of our attribution gaps.
One gotcha was people clearing cookies or using private mode. We added a fallback where the ad click includes a short lived token that the server can use to recover utm info on signup.
Saved a surprising number of cases.
I write the utm to the user row on signup and send it with the subscription event.
Simple and effective.
Make sure analytics can join user id to utm fields later.
It unlocks creative-level ROI.