Deep Linking
Deep linking is a powerful technique that enhances user engagement and improves campaign performance. It allows advertisers to direct users straight to specific pages or content within an app.
How Deep Linking Works
Installed App
If a user has already installed the advertised app, the deep link URL will seamlessly navigate them to the desired in-app destination — such as:
- A product page
- A specific level in a game
- A relevant content section
App Not Installed
If the user doesn't have the app installed, the deep link will utilize a fallback mechanism to guide them to the next best action defined by the advertiser — such as:
- Redirecting to the App Store / Google Play Store
- Opening an optimized mobile landing page
Identifying Eligible Supply
Impressions that support deep linking are flagged directly on imp.ext:
"imp": [
{
"ext": {
"deeplink": 1,
"fallback": 1
}
}
]
| Field | Type | Description |
|---|---|---|
deeplink | integer | 1 — the impression supports opening a deep link on click |
fallback | integer | 1 — the impression supports a fallback destination when the target app is missing |
Both fields are always sent together with the value 1. They are never sent as 0 — their absence means the impression is not deep-link eligible.
An impression is flagged when both of the following are true:
- it carries a
banner(including MRAID) orvideoobject — native-only impressions are not flagged; - the request comes from BidMachine SDK 3.2.0 or newer.
The flag applies to all delivery options described below.
These fields sit at the top level of imp.ext, alongside skadn, gpid and other impression extensions — they are not nested inside a deeplink object.
Delivery Options
1. Plain deep link URL
Pass the deep link directly in the creative's click-through — the VAST ClickThrough and CompanionClickThrough elements for video, or the standard click URL for display / MRAID creatives.
No allowlisting, registration or other additional steps are required. Both of the following are supported:
- Custom URI schemes — for example
temu://,shein://,shopee://,aliexpress://,creditkarma://,walmart://,tiktok://, and any other application scheme. - HTTP(S)-based deep links — services such as AppsFlyer OneLink, URLGenius and comparable providers.
Use one of the options below instead if you need explicit control over the fallback destination or over primary / fallback tracking.
2. deeplinker:// scheme
Encode the deep link fields as query parameters of a deeplinker://navigate URL, and place that URL in the VAST ClickThrough and, if an end card is included, the CompanionClickThrough elements. Display / MRAID creatives use the same URL as their click-through.
deeplinker://navigate?
primaryUrl=customapp%3A%2F%2Flink&
primaryTrackingUrl=http%3A%2F%2Fpx.url.com%2FtrackPrimaryClicked&
fallbackUrl=http%3A%2F%2Fwww.url.com&
fallbackTrackingUrl=http%3A%2F%2Fpx.url.com%2FtrackFallbackClicked
The protocol (deeplinker://) and host path (navigate) are mandatory, and all parameter values must be URL-encoded.
3. bid.ext fields
Pass the deep link as discrete fields on the bid extension, instead of encoding them into a URL:
"bid": [
{
"ext": {
"deeplink": "customapp://link",
"primary_tracking": "http://px.url.com/trackPrimaryClicked",
"fallback": "http://www.url.com",
"fallback_tracking": "http://px.url.com/trackFallbackClicked"
}
}
]
| Field | Required | Description |
|---|---|---|
deeplink | yes | Deep link to another application potentially installed on the user device |
primary_tracking | no | Upon successful opening of the deep link, a GET request is sent to this URL |
fallback | no | Link to a webpage if the desired app is not installed on the device |
fallback_tracking | no | Upon successful opening of the fallback URL, a GET request is sent to this URL |
deeplink is mandatory — if it is absent, the remaining three fields are ignored and no deep link is applied to the bid.
URLs in bid.ext are passed as-is and must not be URL-encoded.
deeplink and fallback appear on both sides of the transaction with different types:
- on
imp.ext(bid request) they are integer flags signalling eligibility; - on
bid.ext(bid response) they are URL strings carrying the destinations.
deeplinker:// Query Parameters
Used by the deeplinker://navigate scheme described above:
| Parameter | Description |
|---|---|
primaryUrl | Deep link to another application potentially installed on the user device |
primaryTrackingUrl | Upon successful opening of the primary URL, a GET request is sent to this URL |
fallbackUrl | Link to a webpage if the desired app is not installed on the device |
fallbackTrackingUrl | Upon successful opening of the fallback URL, a GET request is sent to this URL |
:::