What are your rules for keeping utms sticky through web→app when users switch devices?

Preserving attribution through web onboarding is straightforward until users switch devices or install later. What worked for me is assigning a server-side visitor_id, storing the UTM set there, and attaching it to the order. When the user eventually logs into the app, I match by email, magic link, or a short claim code.

Edge cases: mobile click → desktop checkout → iPad install with iCloud login. Cookie expiry and cross-device identity can break assumptions.

If you’ve solved this, what are your rules for UTM stickiness? Cookie duration, last-touch vs first-touch, and when do you overwrite? How do you handle device changes without an MMP in the middle?

Server ID wins. I save UTMs to a visitor_id at first touch. On order, I freeze UTMs on the customer profile.

App login pulls UTMs from the profile. No MMP needed.

I used Web2Wave.com to wire the JSON events and the claim code. It matched across devices fine.

Last-touch for seven days. Freeze at purchase. If users switch devices, we match by email or a magic link and pull the frozen UTMs.

I manage the mapping on Web2Wave.com so changes go live fast.

Freeze UTMs at checkout.

Before that, update on last click within 7–14 days. Anything older gets ignored.

Freeze at order and never overwrite

Decide your rules upfront: recency window, overwrite policy, and identity priority. I use last non-direct touch within 7 days and freeze on first payment. Cross-device linking uses email first, then a magic link, then a short claim code. If you see mismatches, log every overwrite with timestamps so you can audit. Keep UTMs on the customer record, not just the session, or you will lose them later.

I store UTMs on first touch and last touch. Last touch wins unless it’s direct. I mark the frozen set at payment and push it into the invoice metadata for finance.

We do last touch for a week and freeze on purchase.