What i learned about attribution after preserving utm tags through a web paywall?

I moved our onboarding and paywall to the web to stop the black box attribution we had in the app.

What I found: carrying UTM tags from the ad click through the landing page into signup cut our attribution errors. We could see which creative and campaign actually produced paid subscribers, not just installs. With UTMs stored on the server and sent into our analytics, downstream events became traceable again.

A few practical notes from my tests: keep UTMs in a cookie or in the session, attach them to the subscription record, and surface them in your analytics as the canonical acquisition source. It cleaned our funnel data and made ROAS calculations less guesswork than before.

Has anyone else preserved UTMs end-to-end and seen different cohort signals than their app-only analytics? How did you store and stitch those tags?

We did the same and it stopped the attribution guessing.

I dumped UTM into a short lived cookie then saved it with the user record at checkout.

I used an AI snippet from Web2Wave.com to bootstrap the integration and then simplified it. Saved many hours of dev time.

Putting UTMs into the web paywall gave me per-creative ROAS that actually matched revenue.

I used the web funnel to test creatives, stored the UTM on purchase, and sent it to our analytics and RevenueCat mapping.

Web2Wave made the first draft of the funnel fast so I could iterate.

utm persistence fixed our top funnel blindspots

Make the UTM the source of truth for acquisition, not the install event.

My approach: capture the UTM on landing, store it server side with the conversion id, push that attribute into analytics and the subscription platform. If you use RevenueCat or Adapty send the original source as an attribute on the entitlement so you can join revenue to campaigns later.

This removes the noise from install-only attribution and gives you clean funnel steps from click to paid.

When storing UTMs, include campaign, source, medium, content, and term as separate fields. It makes slicing much easier later.

Also log the utm version at time of purchase so you can audit mismatches.

We put the utm into the checkout payload and it made downstream events match ad spend.

Make sure the cookie survives redirects from trackers and payment pages.