Deep linking

For mobile teams routing paid funnel visitors into an iOS or Android app. You'll have a working plan for each major deep-linking provider. You need a Deep Link Button on the funnel's success page and a destination URL or universal link.

What Zellify provides#

Zellify ships two deep-linking components:

  • Deep Link Button — the standard component. Builds a URL from your destination + opt-in built-in parameters (app_user_id, email, fbp/fbc, Stripe customer ID, etc.) and forwards selected params from the funnel landing URL. Use this with Branch, Adjust, plain universal links, or any provider that accepts a query-string contract.
  • AppsFlyer Deep Link Button — a dedicated AppsFlyer variant that loads the OneLink Smart Script and routes through generateOneLinkURL(). Use this if you're on AppsFlyer.

Both are React components in the funnel builder; you drop them on the success page.

Provider compatibility#

AppsFlyer (first-class)#

Use the dedicated AppsFlyer Deep Link Button. It loads the OneLink Smart Script automatically and handles the pid / c / afCustom plumbing for you, including the keys: [] defense against ad-network URL pollution.

If you'd rather not load the Smart Script, the standard Deep Link Button also works with OneLink — just paste the OneLink URL as the destination and enable whichever built-in params you need. You won't get Smart Script's redirect optimisations and you'll need to manage pid / c yourself on the URL.

Adjust#

Use the standard Deep Link Button with an Adjust tracker URL as the destination. Enable App User ID so each click carries the funnel session identity. If you use Adjust's deep_link param, encode it on the destination URL up front:

Code
https://go.example.com/link?deep_link=myapp%3A%2F%2Fonboarding

Adjust's deferred deep linking handles the case where the app is not installed. When the app launches post-install, read the deep link from Adjust's SDK and parse the app_user_id query param off the deep-link URL.

Branch#

Use the standard Deep Link Button with a Branch link as the destination. Branch's $deeplink_path and $canonical_url go on the destination URL; enable App User ID so the user identity rides along:

Code
https://example.app.link/onboarding?%24deeplink_path=onboarding

Inside the app, read Branch's params on session init.

Point the standard Deep Link Button at your domain's universal link (iOS) or App Link (Android). Enable any built-in parameters your app reads from the URL.

App Store / Play Store badges#

Switch the Deep Link Button to App Store Buttons mode for the standard Apple + Google Play badges. Each badge has its own Link field — point them at your store URLs (or store-specific OneLinks if you're on AppsFlyer). Built-in parameter injection runs on both badges.

Other providers#

Any provider that accepts query-string params works with the standard Deep Link Button. Configure the destination URL with the provider's link format and enable the built-in parameters your app needs.

Zellify does not call attribution SDKs server-side: Zellify does not call Adjust, Branch, or other attribution APIs from its backend. The SDKs run inside your app and do attribution, deferred routing, and their own measurement. The AppsFlyer integration runs in the browser via the Smart Script — the SDK still runs in your app for install attribution.
Deep Link Button
Standard component reference.
AppsFlyer Deep Link Button
OneLink Smart Script integration.
Mobile app with RevenueCat
Recipe using the button.
Mobile app with custom backend
Same button, own backend.