Deep Linking
Deferred deep linking that survives the install
Click a link, install the app, and land on the exact screen — promo code, product, profile, anything. LinkTrail bridges the App Store handoff and resolves the deep link on first open.
One link routes to the right store, survives the install, and opens the exact screen the user tapped for — with campaign credit and fraud checks built in. iOS, Android, React Native, Flutter.
You can alsoSee how it worksorGet a demo
Opens /promo/summer
SUMMER50 applied · right screen
Already installed? Opens straight to this screen.
Works withMeta AdsGoogle AdsTikTok AdsApple Search AdsBigQuery
Built for the modern iOS & Android stack
The platform
LinkTrail bundles deep linking, attribution, fraud protection, and analytics into one platform — so you don't stitch together five vendors to answer "where did this install come from?"
Deep Linking
Click a link, install the app, and land on the exact screen — promo code, product, profile, anything. LinkTrail bridges the App Store handoff and resolves the deep link on first open.
Smart Routing
Detect iOS, Android, and desktop in real time. Route to App Store, Play Store, mobile web, or a fallback page — all with the same shareable short link.
Attribution
A waterfall of Google Play Install Referrer, deferred click tokens, and optional consent-gated IP + platform matching — no advertising identifiers. First-touch, last-touch, or linear models, configurable per workspace.
Fraud
Every install is scored against velocity, device-signal, and SDK-spoofing heuristics. Suspicious installs are flagged before they ever poison your funnel.
Privacy
Register for AdAttributionKit and SKAN, push conversion values, ingest postbacks. ATT-aware, privacy-safe, store-policy-clean.
Analytics
Clicks, installs, attributed installs, and fraud signals — broken down by campaign, channel, platform, and link. Auto-refreshing, no waiting on cron jobs.
How it works
One link does the work of an ad redirector, app-store router, attribution engine, and deep-link resolver — without losing the user along the way.
Define a deep link path, custom payload, and per-platform fallbacks. Generate a short link or QR code in seconds.
Dashboard → Links → Create link
Domain links.yourapp.com
Deep link path /promo/summer
Fallback URL yourapp.com/promo
Campaign summer_launch
Channel instagram
Custom data { "code": "SUMMER50" }LinkTrail inspects the User-Agent, records the click with its campaign context, and redirects iOS to App Store, Android to Play, desktop to web — no extra logic on your side.
GET /l/abc123
↳ iPhone → apps.apple.com
↳ Pixel 8 → play.google.com
↳ Mac → linktrail.io/promoOur attribution waterfall runs the Play Install Referrer, deferred click tokens, and optional consent-gated probabilistic matching — no advertising identifiers. Every install carries the match type that produced it, and clean campaign credit.
matchType: "deterministic"
campaign: "summer_launch"
channel: "instagram"
attributed: trueOn first open, the SDK fires onLink with the path and custom payload. Skip the homepage. Convert users straight into the experience they tapped on.
LinkTrail.shared?.onLink { link, _ in
router.navigate(to: link.path)
// → /promo/summer · code SUMMER50
}4
SDKs
iOS, Android, React Native & Flutter — on GitHub.
7-day
Attribution window
Configurable per workspace. Every install records its match type.
Read the methodology →
1
Query per redirect
Host, link and plan resolved in a single indexed lookup.
$0
Free to start
Create an account, make a link, run a campaign — no sales call.
Built for every role on the team
For Growth marketers
For Mobile product teams
For Engineers
For Performance & paid
Developers
Drop the SDK in, configure with your API key, and listen for deferred deep links. LinkTrail handles the click match, the install attribution, and the in-app routing payload.
Links opening the browser instead of your app? Check your domain with our free validator — it reads the AASA and assetlinks.json for any domain. No signup.
import LinkTrailSDK
// 1. Configure once at launch — the install is tracked automatically.
try LinkTrail.configure(apiKey: "lt_live_…")
// 2. One hook — fires for deferred (first-launch) AND re-engagement links.
LinkTrail.shared?.onLink { link, source in
router.route(
to: link.path, // "/promo/summer"
customData: link.customData // ["code": "SUMMER50"]
)
}
// 3. Forward incoming Universal Links to the SDK (SwiftUI).
.onOpenURL { LinkTrail.shared?.handleDeepLink($0) }import io.linktrail.LinkTrail
// 1. Configure in Application.onCreate() — the install is tracked automatically.
LinkTrail.configure(context = this, apiKey = "lt_live_…")
// 2. One hook — fires for deferred (first-launch) AND re-engagement links.
LinkTrail.shared?.onLink { link, source ->
router.route(link.path, link.customData)
// path: "/promo/summer" · customData: { code: "SUMMER50" }
}
// 3. Forward incoming links from your Activity.
LinkTrail.shared?.handleDeepLink(intent.data)import LinkTrail from 'linktrail-react-native';
// 1. Configure at launch — the install is tracked automatically.
await LinkTrail.configure('lt_live_…');
// 2. One listener — deferred (first-launch) AND re-engagement links.
LinkTrail.onLink((link, source) => {
router.navigate(link.path, link.customData);
});
// 3. Report failures — incoming links are forwarded automatically.
LinkTrail.onError((e) => console.warn('[LinkTrail]', e.code));import 'package:linktrail_flutter/linktrail_flutter.dart';
// 1. One stream — fires for deferred (first-launch) AND re-engagement links.
LinkTrail.onLink.listen((event) {
router.route(event.link.path, event.link.customData);
// path: "/promo/summer" · customData: { code: "SUMMER50" }
});
// 2. Configure at launch — the install is tracked automatically.
await LinkTrail.configure(apiKey: 'lt_live_…');
// 3. That's it — incoming links are captured automatically.Attribution & fraud
LinkTrail starts with the most accurate signal available — the Play Install Referrer or a deferred click token — and only falls back to consent-gated probabilistic matching when nothing else applies, and only if you switch that on. No advertising identifiers, ever. Every install is recorded with the match type that produced it, so you know exactly what you're looking at.
Play Install Referrer
Exact token · Android
Deferred click token
Exact token · iOS + Android
Probabilistic match
IP + platform · inside your click window
Organic
No match · unattributed
Fraud check · install #4821
No rules fired
fraud: false · fraudReasons: []
Click injection
Install lands under 10s after its click
Click floodingAdvanced
Click→install gap past 75% of your click window, 24h floor
IP velocityAdvanced
20+ installs from one IP within 60 minutes
Device repeatAdvanced
5+ installs from one device ID within 24 hours
Geo mismatchAdvanced
Click country ≠ install country, when both are known
An install that trips a rule is flagged in your reporting with the rules that fired — ctit_too_short, not a number to interpret. "This install arrived 1.2s after its click" is an argument you can put to an ad network. What to do about a flagged install stays your call.
Click injection is checked on every install. The rules marked Advanced are part of advanced fraud prevention — see plans.
Integrations
Capture the click ids your ad networks stamp on every link, import their cost exports, and land raw clicks, installs and events in your own warehouse. Spend comes from the CSV the network exports — LinkTrail doesn't connect to your ad accounts.How the ad network integrations work
Meta Ads
Cost import + fbclid capture
Google Ads
Cost import + gclid & Play Install Referrer
TikTok Ads
Cost import + ttclid capture
BigQuery
Raw event export via an S3 stage
Pricing
Start in the sandbox for free. Scale to millions of MAU on the same platform — no replatform, no surprise overages.
Free
free forever
5,000 MAU
25K clicks/mo · 100 links
Starter
per month
25,000 MAU
150K clicks/mo · 1,000 links
Growth
per month
100,000 MAU
750K clicks/mo · unlimited links
Scale
annual contract
500K+ MAU (custom)
Unlimited clicks & links
Need more than 500K MAU or a custom contract? Talk to sales.
From the LinkTrail blog

Branch, AppsFlyer OneLink, Adjust, LinkTrail or plain Universal Links? What each does best, what it costs, what it gives up, and how to choose.

iOS has no install referrer, so deferred deep links need another way through the App Store. Associated Domains, the SDK, the click token, and testing.
Sep 27, 2026 · 4 min read

The link works and the SDK is set up, yet new installs open on the home screen. Five places a deferred deep link loses its payload, and how to find which.
Sep 27, 2026 · 5 min read

On Android, the Play Install Referrer carries a deferred deep link through the store. App Links, the SDK, consent, and testing it end to end.
Sep 27, 2026 · 4 min read
Deferred deep linking carries a link's destination through an app install. Someone taps a link without having your app, installs from the App Store or Play Store, and on first launch lands on the exact screen the link pointed to — with any custom payload intact. Universal Links and App Links alone cannot do this, because the stores don't pass context through.
Yes — LinkTrail never accesses the Apple IDFA, with or without App Tracking Transparency permission, and never reads the Google Advertising ID. Attribution runs on the Google Play Install Referrer, a deferred click token, and consent-gated probabilistic matching. Resetting an advertising identifier has no effect on it.
The iOS and Android SDKs are consent-gated by default. Until your app grants consent, deep links still route to the right screen, but no attribution is recorded and events are queued. Calling setConsent(true) after your consent prompt attributes the install and flushes the queue, without re-routing a user who already landed.
iOS (Swift Package Manager or CocoaPods, iOS 15+), Android (Maven Central, minSdk 26), React Native (a New Architecture TurboModule), and Flutter (a pub.dev plugin). The React Native and Flutter packages wrap the same native SDKs, so behaviour matches across all four.
On EU infrastructure by default — application, database, content delivery, and monitoring. Our full sub-processor list, with transfer notes, is published in Annex III of the Data Processing Agreement rather than available only on request. If you have specific data residency requirements, talk to us before you sign anything.
Yes. The Free plan covers 5,000 monthly active users, 25,000 clicks a month, and 100 links, at no cost and with no card required. Paid plans start at $19/month for Starter and $49/month for Growth. If you hit a plan limit we throttle the affected features rather than charging overage fees.
LinkTrail publishes flat pricing you can self-serve and integrate the same day, where those platforms quote by monthly tracked users through a sales process. We cover the same core — deferred deep linking, smart routing, and install attribution — with an SDK that never touches advertising identifiers and consent gating on by default. Our comparison pages cover each of them in detail, including where they're the better pick.
Ready when you are
Connect your iOS and Android apps in an afternoon. See attributed installs flow into the dashboard the same day.
60-second integration
# 1. Add the SDK (Swift Package Manager)
https://github.com/linktrail-io/ios-sdk.git
# 2. Configure
try LinkTrail.configure(apiKey: "lt_live_…")
# 3. Listen
LinkTrail.shared?.onLink { link, _ in
router.navigate(to: link.path)
}Available for iOS, Android, React Native, and Flutter.
We use cookies to run this site and — only with your permission — to measure how it's used and whether our ads work. See our cookie policy.