v2.4 — Universal Link support now GA

Deep links that
actually work.

Create, manage, and analyze deep links that route users to the exact in-app location — across iOS, Android, and web. No broken flows. No lost conversions.

Link builder
https://sftlnk.io/3xK9m
Start building →View docs ↗
Analytics

Full visibility.
Real-time data.

Every click tracked. Every conversion attributed. See exactly how your deep links perform across platforms and campaigns.

Last 7 days
📈+24%
18,600
Total Clicks
📈+31%
1,143
Conversions
📈+18%
11,204
Unique Users
📈+2.1%
6.2%
Avg. CTR
Capabilities

Everything a deep link
should do.

Instant Routing

Route users to the exact in-app location — no landing pages, no friction. Sub-10ms resolution across 190+ countries.

📊

Precision Analytics

Track clicks, conversions, platform splits, and attribution across every campaign in real time.

🛡️

Deferred Deep Linking

Links survive app installs. Users land exactly where you sent them — even after download and first launch.

🌐

Universal Links

iOS Universal Links and Android App Links configured automatically. No manual entitlement juggling.

🔀

Smart Fallbacks

Define custom fallback paths per platform. Desktop, mobile web, and store redirects handled gracefully.

💻

Developer-First API

RESTful API with SDK support for iOS, Android, React Native, and Flutter. Full OpenAPI spec included.

Developer API

Integrate in minutes.
Not days.

One API call resolves your deep link and routes users to the exact screen — on iOS, Android, Flutter, and Web. Full SDK support included.

View Integration Guide ↗
deep_link_service.dart
// Map SCREEN_KEYS to Flutter routes
static const Map<String, String> screenMap = {
  'DOCTOR_PROFILE': '/doctor-profile',
  'APPOINTMENT_LIST': '/appointments',
  // add more screen keys...
}

// Resolve link by token
static Future<void> resolveByToken(String token) async {
  final response = await http.get(
    Uri.parse('$baseUrl/api/links/token/$token'));
  final data = jsonDecode(response.body);
  if (data['found'] == true) {
    final route = screenMap[data['screen']];
    Navigator.pushNamed(context, route!);
  }
}
Pricing

Simple, honest pricing.

Loading plans...

Ship better links.
Lose fewer users.

Start with a free account and upgrade when you need more. No credit card required.

Get started