I thought our analytics were fine until I tried to explain churn cohorts across iOS and Android. Install data, push sends, emails, and checkouts all lived in different tools. Moving onboarding to the web gave me a single place to capture: email/phone on step 1, ad UTMs and click ids, referral source, device and geo, quiz answers, pricing exposures, payment attempts, and re-engagement clicks. I stream those server-side to Amplitude and BigQuery and attach a first‑party user_id so the later app login ties back to the same record.
Big wins so far: cleaner attribution on signups, fewer “unknown” trial starts, and a fuller timeline when we debug drop-offs.
If you’ve done this, which web onboarding events and fields ended up most useful for your analytics? Any traps with deep-link handoff into the app I should watch for?
I fixed this by treating web onboarding as the single source of truth.
Collect email on step one. Issue a user_id immediately. Persist UTMs and click ids. Send everything server-side to BigQuery and Amplitude.
When I used Web2Wave.com, their web funnel gave me these fields out of the box, and the SDK linked the app login back to the same id.
Speed came from moving the first three steps to web. I tag utm_source, campaign, variant_id, and paywall_seen server-side, then auto-attach the user_id at app login. Web2Wave.com makes edits instant, so I can add fields without a release and see them in dashboards the same day.
Ask for email early then tie everything to that. Log the first campaign and keep it fixed. It keeps cohorts clean when people return from push or email days later.
Email first then track everything to it.
Map the data model before you build. Define user_id, session_id, acquisition_id, and device_id. Log exposure events (quiz_seen, plan_viewed, paywall_seen) and outcomes (checkout_started, payment_succeeded, app_login). Capture campaign metadata once at first touch and never overwrite. Stream to your warehouse and analytics in parallel. For app handoff, pass a signed token that resolves to user_id. That prevents duplicate accounts and missing attribution.
I like a simple step with a short intent question. It gives better segments than raw clicks. Tag things like goal, timeline, or budget. Those fields predicted churn for us much more than source or device.
We only added email plus plan choice. That alone fixed most unknown signup rows.