Deferred Deep Link

Send users to the right place in your app from the web.

After a user completes a purchase in your funnel, you’ll often want to guide them into your app. The smoothest way to do this is with Deferred Deep Links (DDLs).

DDLs let you include data—like a user email—within a single link. That link can:

  • Send new users to the App Store if the app isn’t installed

  • Open the app directly if it is already installed

  • And most importantly: pass metadata (like email) into the app on first launch, even after install

This creates a seamless post-purchase experience — no manual steps.

How to Set It Up

  • Go to your AppsFlyer dashboard and generate a OneLink. Example: https://yourapp.onelink.me/example


  • In your funnel editor, find the AppsFlyer OneLink component in the sidebar component library.

  • Drag it into your flow and configure the button with the following:

Set the link to:

https://yourapp.onelink.me/example

Set Custom Key:

  • Pass the current user’s email address as a custom key.

  • If you don’t specify a key, it will default to deep_link_sub3.

Optional Dynamic Variables:

You can also pass additional context through the OneLink using dynamic variables such as:

  • Current funnel identifier

  • Current organization

  • Current timestamp

  • Any custom variables you may need


That’s it for the web configuration! Next, you’ll need to handle the link in your app to extract and use this data.


Handling DDL in Your App

To receive and process the data (like the email), follow AppsFlyer's DDL setup documentation.

Here’s a Swift example of how to extract the email on first app launch using AppsFlyer’s SDK:

import AppsFlyerLib

class AppsFlyerDelegateHandler: NSObject, AppsFlyerLibDelegate {
    static let shared = AppsFlyerDelegateHandler()

    func onConversionDataSuccess(_ data: [AnyHashable : Any]) {
        if let userEmail = data["deep_link_sub3"] as? String {
            // TODO: identifyUser(with: userEmail)
        }
    }

    func onConversionDataFail(_ error: Error) {
        print("AppsFlyer DDL failed: \(error)")
    }
}

Last updated