---
title: "Deep links"
slug: "deep-links"
description: "Explains how to create, manage, and use deep links in Insider One campaigns, covering supported link types, dynamic attributes, app routing, and best practices."
tags: ["deep links", "url schema", "add deep link", "external url", "internal url", "json", "key value"]
updated: 2026-07-14T11:53:52Z
published: 2026-07-14T11:53:52Z
canonical: "academy.insiderone.com/deep-links"
---

> ## Documentation Index
> Fetch the complete documentation index at: https://academy.insiderone.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Deep links

Deep linking is the use of a hyperlink/URL to navigate to a specific, generally searchable or indexed piece of web content on a website or within an application.

Your title goes hereDeep links are unique to each app and should be built by the app owners.

Deep links work like URLs on websites, but rather than redirect to a page, users are redirected to a screen in the application. Deep links can also pass some values to the application (user ID, promotional code, tracking event). Not all deep links need to have action behind them that is seen by a user.

Deep links can be used in any campaign type, but not all options are currently available in all every campaign type.

In **Components** > **Deep links,** you can save often-used deep links for future use. You can click the **Add Existing Deep Link** button to select an existing deep link. You can also delete deep links here.

You can add your deep links to your campaigns on the **Create your message** step.![](https://cdn.document360.io/c6df4583-da94-4cb2-bb8a-be0cbdd11109/Images/Documentation/Screenshot%20at%20Mar%2006%2017-11-50.png)

Check the **Enable** **Deep Link** box and select the deep link type you want to add.

You can have more than one deep link attached to a campaign. The first link on the list will be opened first, followed by each subsequent link moving down the list.

## Deep link types

You can use 5 different deep links in campaigns:

### Key-Value Pair

This can be a key-value pair understood by the app (e.g., open the device's settings). You define both the key name and the value yourself, so you are not limited to a fixed template; you can send whichever key your app is already built to read. When the user taps the notification, the app receives the key/value pair and routes the user to the matching screen; this routing is preserved regardless of which custom key you choose.

![](https://cdn.document360.io/c6df4583-da94-4cb2-bb8a-be0cbdd11109/Images/Documentation/Screenshot%20at%20Apr%2007%2017-11-21.png)

### URL Scheme

This works similar to the URLs, but uses its own applications schema (e.g. Facebook’s will start with FB://).

![](https://cdn.document360.io/c6df4583-da94-4cb2-bb8a-be0cbdd11109/Images/Documentation/Screenshot%20at%20Apr%2007%2017-17-51.png)

### Internal URL

This URL will be opened in a web-view inside of the application. You do not need to add a key because one will be added automatically. This URL needs to have the HTTPS protocol.

![](https://cdn.document360.io/c6df4583-da94-4cb2-bb8a-be0cbdd11109/Images/Documentation/Screenshot%20at%20Apr%2007%2017-18-59.png)

### External URL

This URL will be opened by the device’s default web browser. This URL needs to have the HTTPS protocol.

![](https://cdn.document360.io/c6df4583-da94-4cb2-bb8a-be0cbdd11109/Images/Documentation/Screenshot%20at%20Apr%2007%2017-20-13.png)

### JSON

This can be a piece of JSON code that the application can understand and process. You can refer below for an example JSON code:

```json
{
  "id": "bcf83b59-6c39-43ff-9e1f-43a785e1234e",
  "title": "Your Title",
  "type": "OFFER",
  "variations": {
    "utm": {
      "source": "app_push",
      "campaign": "new_year_offer",
      "medium": "notification_click",
      "extra": "user_segment_premium"
    }
  }
}
```

The fields in this JSON are yours to define. The example above (id, title, type, variations) is only a sample, not a required schema. You can structure the object however your app expects, and Insider One delivers it for the app to parse when the notification is tapped. You can also use the **+Add Dynamic Content** button to inject per-user values (e.g., last_visited_product) into the payload at send time.

> Deep links have no defined maximum length, but very long URLs may not behave consistently across all clients. For best results, keep them reasonably sized.

## How do deep links route users through the push payload?

When your campaign is sent as an [App Push](/docs/app-push), the deep link you attach is delivered to the mobile app as part of the notification's push payload, the structured data that travels alongside the title and message. The app reads this payload when the user taps the notification and uses it to route them to the right place:

- **Key-Value Pair** and **JSON** entries are passed to the app as payload data (e.g., screen=product_detail and category_id=42, or a single JSON object). Your app's code reads these values and decides which screen to open. The values do nothing on their own until your app interprets them. Key-value pairs or JSONs are not mandatory to be created. You can pass any data to your end as well.
- **URL Scheme** (e.g., myapp://product/42) is handled by the app's registered scheme handler.
- An **internal UR**L opens the destination in an in-app web view.
- An **external URL** opens the destination in the device's default browser.

Your title goes hereSince Key-Value Pair and JSON routing depends entirely on your app reading the payload, we recommend confirming the keys, values, and JSON structure with your mobile developers before you launch the campaign.

When you save a deep link, the panel validates it. JSON entries are checked for **valid** JSON syntax, and **duplicate** keys in the deep link list are **blocked**. Fix any flagged entry before you can save.

## What happens when a link can't route?

**Plain links** pasted into the message body do **not route** users. A URL typed directly into the push, in-app, or SMS message text is delivered as plain text, not a tappable hyperlink, and will **not redirect** the user. To send someone to a specific screen or page, always use the Deep Link mechanism described above.

No deep link or a key/value of false sends users to the app, depending on whether the app is open in the background. If a campaign has **no deep link** attached or the deep link key/value resolves to **false**, tapping the notification opens the app.

If the app is open in the background, the user is directed to the last page visited in the app. If the app is closed, they are directed to the homepage.

## Personalize the destination with attributes

You can insert a user attribute inside a deep link with the **+Add Dynamic Content** button so that a single campaign routes each user to a different, personalized destination.

For example, add the last_visited_product attribute to the deep link: each user who taps the notification is taken to the detail page of the product they most recently viewed. Because the attribute value differs per user, each user lands on a different screen. Your deep link schema must be compatible with this format.

## Deep links in email campaigns

Email does not use the same push-style custom payload as App Push. To open your mobile app from an email, use a **universal link** in your email's call-to-action, which resolves to your app when installed and to the web otherwise. See [Email Universal Link Setup](https://academy.insiderone.com/docs/email-universal-link-setup) to set up universal links.

## Custom payloads

Because both the Key-Value Pair and JSON payload types above are defined by you, your app is not locked into a fixed, one-size-fits-all message format. You choose the key names, the JSON fields, and the structure your app already expects, and Insider One delivers that payload for your app to read and act on. Deep-link routing to the target screen is preserved no matter which custom keys or fields you use.

In practice, this means you can:

- Reuse the exact payload keys your app already parses, without reworking them to fit a predefined template.
- Add per-user values at send time with the **+Add Dynamic Content** button (e.g., last_visited_product), so each notification carries user-specific data.
- Keep one deep-link setup working across campaigns, because the routing behavior does not change when the payload contents do.

Key-value pair example: **screen = product_detail product_id = 12345**

Below is a custom JSON example. Fields like last_visited_product are populated individually for each user upon sending. The keys in the example are marketer-defined ones.

```json
{
  "screen": "product_detail",
  "product_id": "12345",
  "campaign": "summer_sale",
  "last_visited_product": "SKU-8842"
}
```
