Onboarding that knows where you came from: the first screen matches the ad's promise
'50% off your first order' shouldn't land on a generic welcome screen where the discount has to be found.
Updated Sep 3, 2026
Who runs this
- Mobile product teams
- Growth marketers
What it uses
- Deferred deep linking
- Per-link campaign and creative tagging
- Post-install events
Every campaign makes a specific promise — a discount, a feature, a use case — and the generic onboarding flow makes none of them. The person who tapped 'try the sleep tracker' gets the same four screens as the person who tapped 'split bills with friends'. Both learn what the app is. Neither gets what they came for.
What problem does this solve?
The first screen after install should match the ad. If the ad offered a code, the code should already be applied. If it promised a feature, onboarding should lead with that feature. That requires the app to know, at first open, what the user was promised — which is exactly what the payload carries across the install.
How do you set the links up?
The campaign link carries the promise in the payload: the promo code, the feature to lead with, the onboarding variant. The app reads it at first open and branches. The campaign tag stays on the link so the variant's performance attributes back to the campaign that used it.
{
"deepLinkPath": "/onboarding",
"customData": {"promo": "WELCOME50", "lead": "sleep-tracking", "cmp": "meta-sleep-q3"}
}What should branch on the payload?
| Payload says | Onboarding does |
|---|---|
| A promo code | Applies it silently and shows the discount already active on the first paywall |
| A feature | Leads with that feature's setup, and defers the rest |
| A referrer | Names the friend and skips the 'how did you hear about us' step |
| Nothing | The default flow, which is now only for genuinely organic installs |
Why not just show the code on a screen?
Because every step between the promise and the delivery loses people. A code the user has to type is a code some of them mistype and some of them never enter. Applying it from the payload means the discount is a fact by the time they see a price, not a task.
Which metric should you watch?
Onboarding completion by payload variant, then activation by variant. If the sleep-tracking lead-in completes at 70% and the default at 45%, that gap is the case for building more variants — and the campaign tag tells you which ads deserve one.
Related use cases
Web to app
Web to app: moving a mobile web visitor into the app without losing their place
They're mid-checkout, or mid-article, on mobile web. They'd convert better in the app. The handoff has to keep their context.
Launch day
Launch day: turning a waitlist into installs that land in the right onboarding
Pre-launch signups gave you an email. Launch day is when you find out which pre-launch channel gave you users.
Every one of these depends on the same two things: link context surviving an install, and an honest answer to which click produced it. The scoring model is published in full on our methodology page, and you can check any domain's association files with our free link validator.