Integrations

App Deep Links

Connect your own iOS/Android app to a U2L domain: links open in the app when installed, and can send everyone else to your store page.

App deep links turn every short link on your domain into a door into your mobile app. Available on the Advanced plan and above, on a verified custom domain or a U2L subdomain.

Three things can happen when someone taps a link on an app-connected domain:

VisitorWhat happens
Has your app installedThe OS opens the link directly in your app (Apple Universal Links / Android App Links) - U2L is never even contacted
On mobile, app not installed, link has App Store Fallback onRedirected to your App Store / Play Store page; the Play URL carries the original link in the install referrer
Everyone else (desktop, fallback off)Normal web redirect - nothing changes

U2L publishes the two association files the operating systems verify - https://yourdomain.com/.well-known/apple-app-site-association and https://yourdomain.com/.well-known/assetlinks.json - automatically from your configuration. You never host or edit them; changes go live within about 5 minutes of saving.

Step 1 - Connect your app in the dashboard

Open Custom domains (or Subdomains) → your verified domain → Mobile app, and fill in what applies:

FieldWhere to find it
iOS Team IDApple Developer → Membership (10 characters, e.g. ABCDE12345)
iOS Bundle IDXcode target or App Store Connect (e.g. com.yourco.app)
App Store URLYour app’s https://apps.apple.com/... page - required for the iPhone store fallback
Android package namee.g. com.yourco.app
SHA-256 fingerprint(s)Play Console → Setup → App signing (use the app signing certificate), or keytool -list -v -keystore your.keystore
Play Store URLOptional - derived from the package name when empty

Add the Play App Signing fingerprint, not just your upload key - Google re-signs production builds. You can enter up to 5 fingerprints (debug + upload + app signing).

Step 2 - Prepare your app

iOS - add the Associated Domains capability to your app target:

applinks:yourdomain.com

Then handle incoming links (SwiftUI example):

.onOpenURL { url in
    // url.path is "/abc123" — resolve it via the U2L API or your own mapping
}

Android - add a verified intent filter for the domain:

<intent-filter android:autoVerify="true">
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE" />
    <data android:scheme="https" android:host="yourdomain.com" />
</intent-filter>

Your app receives the full URL (https://yourdomain.com/abc123). Look up what the slug points to with the API:

curl https://u2l.ai/api/v1/links/yourdomain.com/abc123 \
  -H "Authorization: Bearer u2l_live_your_api_key"

The response includes destination, title, and every option set on the link - route the user inside your app from there.

Create links from App Links in the dashboard sidebar (or via the API with appFallback: "store"). Pick the app domain, paste the destination web URL, done - the routing (app → store → web) is built in. Regular links on the same domain keep behaving like normal web links.

On Android the Play Store URL carries the original link:

&referrer=u2l_link%3Dyourdomain.com%2Fabc123

Read it after install with the Install Referrer library and open the content the visitor originally tapped. iOS has no referrer equivalent - the App Store opens without link context (deferred deep linking requires an in-app SDK, which U2L intentionally does not inject).

Verify it works

# Both should return JSON (404 means no app config saved for that host)
curl https://yourdomain.com/.well-known/apple-app-site-association
curl https://yourdomain.com/.well-known/assetlinks.json
  • Android: adb shell pm verify-app-links --re-verify com.yourco.app, then check with adb shell pm get-app-links com.yourco.app - the domain should show verified.
  • iOS: reinstall the app after the association file is live (iOS fetches it at install time through Apple’s CDN, which can cache for a few hours). Long-press a link → “Open in app” appearing confirms the association.
  • Tapping a link typed directly into the browser address bar never opens the app - that is OS behavior, not a configuration problem. Test by tapping links inside Notes, Messages, or another app.

Good to know

  • Association is per domain: the whole domain maps to one app, so use a dedicated domain or subdomain (e.g. go.yourco.com or yourco.u2l.ai) for app links.
  • Configuring an app never changes existing links - only links with App Store Fallback switched on behave differently, and only for mobile visitors without the app.
  • Store fallback composes with retargeting pixels: the pixel page fires first, then continues to the store.
  • Clearing both platforms in the Mobile app dialog removes the configuration and the association files.