SYS / OPERATIONALVER / 1.0.0UPTIME / 99.998%REGION / GLOBAL

Route every
tap. Attribute
every install.

SmartLink is the link layer for modern apps. Deep links, deferred deep links, and attribution -- engineered for product teams who refuse to lose users between web and app. One SDK. Every platform. Zero dropped sessions.

trail link • routing engine
[ live ]
$smartlink resolve "trl.lk/launch"
// resolving routes...
→ device:Android 14 · Pixel
→ install:trueDETECTED
→ route:"/events/music-fest-42"
→ campaign:"summer-launch-ig"
→ latency:118ms
→ status:200 OKOPENED
$
universal linksandroid app linksdeferred routingattributionfingerprint matchingqr · og · webhooksflutter sdkuniversal linksandroid app linksdeferred routingattributionfingerprint matchingqr · og · webhooksflutter sdk
118ms
Median resolve
99.99%
Routing accuracy
6hr
Fingerprint TTL
60pt
Match threshold

Three steps. No edge cases left behind.

STEP_01 / generate

Create a trail link.

A single URL holding your destination, fallback, campaign, and parameters. Generate by hand, by API, or in bulk via CSV.

trl.lk/launch► ok
STEP_02 / route

Open anywhere, intelligently.

Tap on iOS opens the app. Android with no install? Send to store, then route post-install. Desktop? Web fallback.

iOSANDROIDWEB
STEP_03 / attribute

Know exactly what worked.

Every install, click, conversion tied to its origin. Slice by campaign, channel, creative -- stream events to your warehouse.

Everything Branch & AppsFlyer do -- without the bloat.

DEFERRED_DEEP_LINKS #01

Survive the install gap.

A user clicks a link, hits the App Store, installs your app, opens it -- and lands exactly where the link pointed. We hold their context across the install boundary so attribution doesn't break and onboarding doesn't reset.

click → store → install → open → /event/87
UNIVERSAL_COVERAGE #02

One link. Every platform.

Apple Universal Links, Android App Links, custom URI schemes, and a graceful web fallback for everything else. We handle manifest files, AASA configs, and edge cases so your team ships once.

► iOS► Android► Web► macOS► Windows
ATTRIBUTION #03

Multi-touch, in real time.

Every click attributed to a campaign, channel, and creative. Stream events into BigQuery, Snowflake, or your webhook of choice.

FINGERPRINT #04

Subnet IP matching.

No cookies, no ad IDs. Match users across web-to-app with IP subnet, screen resolution, timezone, and locale signals. CGNAT-aware.

CAMPAIGNS #05

Track every channel.

Group links into campaigns. Track attribution across email, social, SMS, and paid channels with real-time conversion data.

email · 42%social · 35%sms · 23%
DEVELOPER_DX #06

SDKs that don't fight you.

Flutter SDK with separated callbacks for direct and deferred deep links. Five lines to install, one method to handle a route. Open source, semver discipline, no surprise breaking changes.

[flutter][swift][kotlin][react-native][js / ts]
ANALYTICS #07

Real-time conversions.

Track clicks, installs, conversions, and match scores. Know exactly which links drive results with live dashboard.

Five lines to install.
One method to route.

Drop-in Flutter SDK with separated callbacks for direct and deferred deep links. Open source, no vendor lock-in.

→ Browse SDK reference
01final sdk = SmartLinkSdk();
02
03// initialize with separated callbacks
04await sdk.initialize({
05  apiKey: 'sk_live_...',
06  onDeepLink: (data) {
07    // direct deep link (app installed)
08    navigate(data.path);
09  },
10  onDeferredDeepLink: (data) {
11    // deferred (post-install match)
12    navigate(data.path);
13  },
14});
01import { smartlink } from '@smartlink/sdk'
02
03// create a link with deferred routing
04const link = await smartlink.create({
05  destination: '/events/music-fest-42',
06  fallback:    'https://allevents.in',
07  campaign:    'summer-launch-ig',
08  defer:       true,
09})
10
11console.log(link.url) // → trl.lk/8aB3z
01import io.smartlink.sdk.TrailLink
02
03// in your Application onCreate
04TrailLink.init(this, "sk_live_...")
05
06TrailLink.onRoute { route ->
07  navController.navigate(route.path)
08  analytics.track("link_opened", route.params)
09}
01import TrailLink
02
03// in your AppDelegate or SceneDelegate
04TrailLink.shared.handle(url) { route in
05  guard let path = route.path else { return }
06  router.navigate(
07    to: path,
08    params: route.params
09  )}
10}

Pay for links routed.
Not for seats.

// usd · billed automatically
[ hobby ]
Personal projects, side experiments, weekend hacks.
$0/mo
Free forever
Start free →
includes
  • 10K routed links / month
  • Universal & App Links
  • Web fallbacks
  • 1 SDK platform
  • Basic attribution (7-day)
  • Community support
  • API access
  • Deferred deep links
  • Fraud shield
[ scale ]
High-volume apps with serious attribution needs.
$499/mo
Billed monthly · cancel anytime
Start scaling →
everything in pro, plus
  • 2M routed links / month
  • Fraud shield (ML-driven)
  • Full API access + rate-limit boost
  • Custom subdomains + SSL
  • Multi-touch attribution
  • Real-time event streaming
  • Priority support · 4h SLA
  • 99.95% uptime SLA
[ enterprise ]
Custom infra for fintech, gaming, and global retail.
Custom
Annual contracts · MSA
Talk to sales →
everything in scale, plus
  • Unlimited routed links
  • Dedicated infrastructure
  • Full API access + unlimited rate
  • SOC 2 Type II + HIPAA
  • On-prem / VPC deployment
  • Custom data residency
  • Dedicated CSM
  • 99.99% uptime SLA
  • White-label options
10k links free, every month, foreverNo credit card to startCancel anytime, proratedGDPR + CCPA compliant

Common questions.

What counts as a "routed link"?+
Each successful resolution of a SmartLink URL by an end user counts as one routed link. Generating links via API, dashboard previews, and bot traffic flagged by our fraud shield don't count.
Can I switch tiers mid-month?+
Yes. Upgrades take effect immediately and are prorated. Downgrades take effect at the next billing cycle, and any unused credit rolls forward.
What happens if I exceed my plan limit?+
We'll never block your links. You'll be notified at 80% usage, and overage is billed at $0.5 per 1k links above your plan -- no surprise bills, capped at 2x your monthly subscription.
Do you support migration from Branch or AppsFlyer?+
Yes -- we provide migration scripts, parallel-run support, and dedicated engineers for Pro+ tiers. Most teams migrate in under a week with zero attribution gaps.
Is there a free trial for paid plans?+
Pro and Scale come with a 14-day free trial -- full feature access, no credit card required. Enterprise trials are scoped during the sales conversation.

Ship a smarter link
today.

10,000 routes free, every month, forever. No card. No sales call. No SDK lock-in.