Web-to-App: How Not to Lose the Source Between the Ad on Your Site and the Install
The scenario that breaks attribution for everyone who has both a site and an app. Someone clicks an ad, lands on the site, gets sent from there to the store, and installs the app. Question: which campaign drove that install? The default answer from the systems: none, Organic. The source died on the way to the store.
And you keep paying for ads that “don't bring installs” according to the reports, when in fact they do — the attribution just breaks.
Exactly where it breaks
The store is a black hole for parameters. You can carry utm values around your site all you like, but the moment someone leaves for the App Store or Google Play and then opens the app, that link is severed. The app launches “from scratch” and has no idea where the user came from.
Deferred deep linking — what it solves
The magic is in the word deferred. A regular deep link takes you to a screen in an app that is already installed. A deferred one survives the install: the user clicks, installs the app, opens it — and the campaign parameters plus the intended screen make it to the first launch.
In other words, the source “survives” the trip to the store. Someone clicks an ad for a card, installs the app, and lands straight on the card application screen instead of an abstract onboarding flow. And you know which campaign made it happen.
Setting it up with OneLink
OneLink (or its equivalent at another MMP) is a single smart link. It detects the device and routes to iOS, Android or web. It carries utm values and custom parameters through the entire chain. One link in your ads instead of a zoo of URLs for each platform.
The setup is not the most trivial — you have to get the domains, subdomains and app associations right (iOS Universal Links are a pain of their own). But configure it once and the whole web-to-app chain is counted honestly.
Smart banners and QR codes
The entry points everyone forgets. A smart banner on the mobile site, a QR code on desktop — if they route through OneLink, the source is preserved. If they point at a bare store URL, you lose the attribution again. Check what your banners actually route through.
Verification
The SDK's debug mode will show you what actually reaches the first open. Look at onConversionDataSuccess — your parameters should be sitting in there. If it is empty, the deferred deep link isn't working and you are attributing blind.
The take: the web-to-app gap is the most underrated leak in projects that have an app. People polish their pixel and CAPI while half of their installs fall into Organic because of a broken deferred deep link. Fix that first, then optimize everything else.
SKAdNetwork and SKAN 4.0: Why Your iOS Attribution Lies, and What to Do About It
SKAN 4.0 without the fluff: conversion values, three postback windows, the lock window. How to set up iOS attribution for a fintech app.
Read →GA4 in BigQuery: App Funnel SQL Queries That Actually Work
Ready-made SQL for the GA4 BigQuery export: signup funnel, retention cohorts, first-touch attribution. Plus UNNEST event_params and why the GA4 UI lies.
Read →Server-side GTM on Stape: Custom Domain and First-Party Cookies, No Magic
Deploying server-side GTM on Stape. Why you need a custom domain via CNAME, how to stretch first-party cookies from 7 days to a year, what to send first.
Read →