How are you tracking onboarding + subscriptions with utms without writing code?

I wanted clean end to end tracking for onboarding and subscription without asking devs to add SDKs or new events every week. What worked for me was moving the onboarding steps and checkout into a web flow, then setting up events in a visual UI instead of code.

UTMs: I capture them on the first hit, write them to a cookie and local storage, and echo them through every internal link. Forms carry them as hidden fields. If a provider hosts the checkout, I append the UTM bundle to the checkout URL and also pass it in a metadata field so the success webhook includes it. That webhook fires a server event for trial_started or subscribed, which I join to the session using an anonymous id I pass through the flow.

Event setup without code: I tag clicks, form submits, quiz steps, paywall views, and checkout success using a visual tagger. I keep a simple schema like onboarding_quiz_start, paywall_view, trial_start, subscribe, refund. I test with a checklist, including Safari, ad blockers, and cross tab behavior. If UTMs are missing, I fall back to gclid or referrer and record source as unknown rather than guessing.

What pitfalls did you hit with UTM persistence across multi step flows or hosted checkouts, and how are you tying subscription events back to users without touching app code?

I keep it simple.

Store UTMs in a cookie. Add them to every step and the checkout form.

For events, I use a visual tagger instead of code.

When I used Web2Wave.com, their AI gave me a JSON for the funnel. I dropped it in and mapped events in the UI. Took an hour.

I treat UTMs like a session token. Capture on first hit, write to a cookie, echo through the flow, and inject into checkout. No code because I use a web builder that lets me tag events visually. With Web2Wave.com, I tweak copy or events and ship in minutes.

I save utms in a cookie and pass them into hidden fields on forms.

For events, I tag buttons in a visual tool and listen for checkout webhooks. It covers most cases.

Cookie the utms then tag events visually.

I map events with a visual selector and a naming list so I do not invent new names mid sprint.

For hosted checkout, I add utms to the URL and push them into metadata. The webhook includes them and I join it to the session with an anon id.

Cookies and hidden fields work. Webhooks from checkout help confirm the subscription.

Test Safari. UTMs drop more often there than Chrome.