Skip to content
Documentation menu

Migrate

Migrating from Branch

Move deep links from Branch to DL2App: import a link export, see how Branch link data keys map, and swap the SDK.

DL2App covers the linking part of Branch: opening the app, store fallbacks, deferred deep linking, previews and first-party install and event reporting. It does not do ad-network attribution, SKAdNetwork postbacks or fraud suites. If you depend on those, keep a measurement tool for them.

How the import works

  1. Open your project, then Links, then Import, and pick the source.
  2. Give it your links (how depends on the source, below).
  3. Review. Every row says what will be created, and rows with problems say why. Nothing is created until you confirm, and existing links are never overwritten: a slug that is already used is either skipped or given a suffix, your choice.
  4. Import. Rejected rows can be downloaded as a CSV to fix and retry.

Imported links go through the same destination checks as links you create by hand, and count towards new-account limits.

For Branch, export your links to CSV from the Branch dashboard and upload the file. Link data can be in a JSON column, in columns named after the keys, or both.

How Branch link data maps

BranchIn DL2AppNotes
alias / link URLSlugThe last part of the Branch link.
$deeplink_pathApp path$ios_deeplink_path and $android_deeplink_path are used when it's missing.
$desktop_urlDesktop URL
$ios_urliOS URL (custom URL)
$android_urlAndroid URL (custom URL)
$fallback_urlFallback URL
$og_title, $og_description, $og_image_urlSocial preview title, description and image
$marketing_titleName
~campaignutm_campaign
~channelutm_source
~featureutm_medium
~tagsTags
$exp_dateExpiry
Your own keysLink dataEverything without a $, ~ or + prefix is passed to your app unchanged.
Other $ and ~ keysNot carried overListed per row in the check, so nothing disappears silently.

Addresses

Links on Branch’s app.link domain stay with Branch. Links on your own domain can keep their addresses: import first, add the domain as a custom domain, then repoint DNS.

In your app

  1. Add the DL2App hosts to your associated domains and intent filters.
  2. Replace the Branch session callback (initSession / subscribe) with one DL2.onLink listener.
  3. Where you read Branch parameters such as $deeplink_path and your own keys, read link.path and link.data.
  4. Replace logEvent calls you want to keep with DL2.track(name, …).
  5. Ship both SDKs together for one release if you need old Branch links to keep opening the app while users update.

Differences to expect

  • No per-conversion pricing and no sales call: prices are on the pricing page.
  • iOS deferred matching is opt-in for the clipboard and conservative otherwise; we do not quote a match rate. See deferred deep linking.
  • The website banner is one script tag with a dashboard page for its text, colours and target. It has no audience targeting and no A/B tests.
Migrating from Branch · Docs · DL2App