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
- Open your project, then Links, then Import, and pick the source.
- Give it your links (how depends on the source, below).
- 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.
- 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
| Branch | In DL2App | Notes |
|---|---|---|
alias / link URL | Slug | The last part of the Branch link. |
$deeplink_path | App path | $ios_deeplink_path and $android_deeplink_path are used when it's missing. |
$desktop_url | Desktop URL | |
$ios_url | iOS URL (custom URL) | |
$android_url | Android URL (custom URL) | |
$fallback_url | Fallback URL | |
$og_title, $og_description, $og_image_url | Social preview title, description and image | |
$marketing_title | Name | |
~campaign | utm_campaign | |
~channel | utm_source | |
~feature | utm_medium | |
~tags | Tags | |
$exp_date | Expiry | |
Your own keys | Link data | Everything without a $, ~ or + prefix is passed to your app unchanged. |
Other $ and ~ keys | Not carried over | Listed 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
- Add the DL2App hosts to your associated domains and intent filters.
- Replace the Branch session callback (
initSession/subscribe) with oneDL2.onLinklistener. - Where you read Branch parameters such as
$deeplink_pathand your own keys, readlink.pathandlink.data. - Replace
logEventcalls you want to keep withDL2.track(name, …). - 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.