What Is Deep Linking?

No icon

Partner Post - Branch Metrics - Enterprise-grade links. Always free.

Posted: August 19, 2015


Sam Purtill is an entrepreneur, programmer, connector, and evangelist for Branch Metrics. Branch is a free & open source mobile SDK for deep linking used by thousands of apps for organic & paid growth. Previously, Sam co-founded ClassOwl, an edtech startup he sold to Branch in 2015. Prior to ClassOwl, he studied philosophy at Stanford, worked at Peter Thiel’s venture capital firm, Founders Fund, co-founded a digital agency, Okapi Studio, and took two gap years after high school to be a founding engineer at Quid.

Deep linking has become a standard practice in successful mobile apps in the last year. Still, these links are complex and integrating them into an app can be challenging. This post provides an overview of deep links and shows how Branch neatly solves all the problems these links pose.

Before we get any further – why do you even need something as complex as deep linking? Here are three compelling reasons:

  1. Deep links provide a better experience for your users
  2. Deep links significantly increase conversion to sign-up on average
  3. Deep links double one-month retention for many of our partners

In short, if you care about user experience, growth, or user retention, deep links should be in your lexicon.

What is a deep link?

Deep links are similar to web links. On the web, you can get to Twitter by typing twitter.com in your browser, or clicking a link to twitter.com. Within apps, you can register a URI scheme that can be used to open your app, and when someone clicks a link that starts with that URI scheme, your app will open. A URI scheme is analogous to a domain name.

Let’s create an app called Branchsta. After registering the URI scheme branchsta://, the app is ready to deep link. If a link beginning with branchsta:// is clicked, it will open the Branchsta app – as long as the user has the Branchsta app.

Just like with the web, there are instances where you want to link people to pages inside an app like a product page, a sign-up page, or a user’s profile. This is possible by adding additional data to the URI scheme, such as branchsta://user/sam/.

branchsta://user/sam/ is a deep link.

By way of further example, here’s a comparison of web links to deep links:

web links to deep lins

This web link and deep link analogy has worked so far, however…

Deep links aren’t as simple as web links

Imagine clicking a link to twitter.com and being prompted to download the entire Twitter website to your computer, waiting three minutes for it to download, then opening it. This would never happen on the web because we use browsers, and every web link leads you to another page that can be downloaded and rendered seamlessly in the browser.

But this happens all the time with deep links in the mobile app ecosystem.

Consider the following example:

If someone clicks branchsta://users/sam/ but doesn’t have Branchsta downloaded on their phone, nothing happens. The user suffers in deep link purgatory and you’ve missed an opportunity to engage them! To solve this, you need to create a separate link that uses javascript to check if the user has Branchsta, and if not, sends them to the appropriate app store.

But solving that is akin to cutting the head of the Hydra: three more problems emerge whenever you think you’ve solved the last issue. First, you need to write javascript for every type of browser (desktop, mobile, Android, iOS, Chrome, Safari, IE, IE 6, etc.). Then, you need to keep this code up to date as standards evolve. After that, you’ll have to write a mess of code to save the user’s intent (i.e. what content they’re trying to get to) as most platforms eliminate this context as soon as the user arrives at the app store. Solve these problems and three more problems are bound to arise leading to weeks of debugging.

These problems takes time, energy, effort, and knowledge just to understand, let alone solve. Take our word for it, you don’t want to deal with this.

But let’s assume you’ve spent a month and solved all the problems above. A user successfully downloads Branchsta and opens it for the first time. The deep link that the app opens with is branchsta://users/sam/. Now we have to write code to interpret the context and get the user to the right page (i.e. Sam’s profile).

Unlike the web, mobile SDKs don’t have frameworks built in to parse URLs as easily as pulling the GET parameters out of a URL like you can with jQuery. This means that you’ll have to manually parse these URLs using string operations, which will create a bunch of spaghetti code in Android and iOS.

Another two weeks of development time. You soldier on. Now, you want to track metrics on all of these links, who’s coming from where, who’s referring who, etc. It’s time for some more brainstorming, development, and testing.

I’ll stop here. I think you get the picture. Creating a well tested and dynamic deferred deep linking system is not what you want to spend your time on. You should be creating beautiful apps, perfecting user experiences, and solving humanity’s greatest challenges.

Passing Context Through Install Infographic


You shouldn’t need to worry about deep links because they should just simply open to the right page inside your apps.

Branch has solved every problem with deep links and the SDK takes less than 30 minutes to integrate with your app.

Deep links are simple with Branch

There were a few key features that we felt are important when it came to building a link that works for apps:

1. No data passing pathing and parameters; just dictionaries of keys and values

Link paths are not a good representation of how developers store data in native mobile apps. A dictionary filled with keys and values is much more valuable.

2. Automatic URI parsing.

No one wants to write a flexible string parser to cut out the data from a deep link URI path. Branch just returns the deep link data in a nice format when you call a method on their library.

3. Simplified deep link routing.

Don’t want to worry about navigation controllers and back button stacks? Neither do we. You can register an Activity or View Controller to be displayed only when deep link data is detected.

4. Branch is your website.

You shouldn’t have to build a website with all of these deep link protocol metatags appended to it. Branch gives you a hosted http link, automatically configured to support all standards. If you already have a great website, Branch links are also an effective addition.

5. Redirects that work.

Regular Onboarding and Personalised Onboarding Difference


Lastly, you want a clickable link that will redirect to your app when installed and fallback to a mobile site or app store when not. We support every browser on every operating system, ensuring your users are never left hanging.

The bottom line is that Branch takes all the pain out of setting up app links and delivers a link that works. This allows you to implement deep linked ads, Deepviews, personalized onboarding flows, content sharing, smart banners, and any other features you can think of!

Implementing deep links leaves your users satisfied because their experience makes sense and as a result, they will keep coming back.

You can find out more about deep linking over at the Branch Metrics blog.