Cohort analysis by attribution source
Amplitude excels at behavioral analytics and user segmentation. By integrating Redirectly attribution with Amplitude, you can build cohorts of users acquired from specific campaigns, measure retention by attribution source, and understand the lifetime value of each marketing channel.
What you measure
- Install source: Which link drove each install
- Retention by cohort: D1, D7, D30 retention by campaign
- LTV by channel: Revenue per user by attribution source
- Feature adoption: Which users engage with which features
- Conversion funnels: Sign up → purchase by install source
Real use cases
- Instagram campaign drives 5,000 installs, 8% D7 retention
- TikTok campaign drives 2,000 installs, 18% D7 retention
- Facebook referral link drives 1,000 installs, 35% D7 retention
- Email re-engagement link drives high-value returning users
- → Optimize budget toward best-performing channels
Send attribution events to Amplitude
Initialize Amplitude in your app and send attribution events when you capture Redirectly deep links.
// lib/services/amplitude_service.dart
import 'package:amplitude_flutter/amplitude.dart'
import 'package:redirectly/redirectly.dart'
class AmplitudeService {
static final _instance = Amplitude.getInstance()
static Future<void> initialize(String apiKey) async {
await _instance.init(apiKey)
await _instance.trackingSessionEvents(true)
}
/// Track install with attribution data from Redirectly
static Future<void> trackInstallAttribution() async {
final link = await Redirectly.getInitialLink()
if (link != null) {
// Build event properties from Redirectly deep link
final eventProperties = {
'redirectly_link_id': link.id,
'redirectly_path': link.path,
'campaign': link.params['campaign'],
'source': link.params['source'],
'medium': link.params['medium'],
'content': link.params['content'],
}
// Track install attributed event
_instance.logEvent(
'Install Attributed',
eventProperties: eventProperties,
)
// Set user properties for cohort analysis
_instance.setUserProperties({
'install_link': link.id,
'install_campaign': link.params['campaign'],
'install_source': link.params['source'],
'install_timestamp': DateTime.now().toIso8601String(),
})
print('Tracked install attribution: ${link.id}')
}
}
/// Listen for deep link events during session
static void listenToDeepLinks() {
Redirectly.onDeepLink.listen((link) {
_instance.logEvent(
'Deep Link Opened',
eventProperties: {
'path': link.path,
'campaign': link.params['campaign'],
'source': link.params['source'],
'redirectly_link_id': link.id,
},
)
})
}
}
Call these methods in your app's main initialization to start tracking attribution:
// main.dart
import 'package:flutter/material.dart'
import 'services/amplitude_service.dart'
void main() async {
WidgetsFlutterBinding.ensureInitialized()
// Initialize Redirectly
await Redirectly.initialize(apiKey: 'your_redirectly_key')
// Initialize Amplitude
await AmplitudeService.initialize('your_amplitude_key')
// Track initial attribution
await AmplitudeService.trackInstallAttribution()
// Listen for future deep link events
AmplitudeService.listenToDeepLinks()
runApp(const MyApp())
}
Build cohorts with user properties
Set user properties in Amplitude so you can segment users by their install attribution source. This powers cohort analysis and retention tracking.
// Set detailed user properties for cohort building
Future<void> setAttributionProperties() async {
final link = await Redirectly.getInitialLink()
if (link != null) {
amplitude.setUserProperties({
// Campaign tracking
'install_campaign': link.params['campaign'],
'install_source': link.params['source'],
'install_medium': link.params['medium'],
// Time-based properties for lifecycle analysis
'install_date': DateTime.now().toIso8601String(),
'install_week': DateTime.now().week.toString(),
'install_month': DateTime.now().month.toString(),
// Custom parameters from your links
'referrer_id': link.params['referrer'],
'promo_code': link.params['promo'],
'cohort': link.params['cohort'],
// Analytics flags
'is_organic': link.params['source'] == 'organic',
'is_paid': link.params['source'] == 'paid',
'is_referral': link.params['source'] == 'referral',
})
}
}
// Now you can segment users:
// - All Instagram installs: install_source = "instagram"
// - Summer 2024 campaign: install_campaign = "summer_2024"
// - High-value cohort: referrer_id exists
// - Organic traffic: is_organic = true
Measure retention by attribution source
In Amplitude, use Retention Chart and Cohort Analysis to measure D1, D7, D30 retention for each traffic source.
Retention chart setup
In Amplitude, create a Retention chart with:
Cohort: Users who triggered "Install Attributed" event
Segmented by: install_source user property
Retention event: Any event (or specific events like "Session Start")
Time periods: D1, D7, D14, D30
Expected insights
You'll see retention curves like:
Instagram: 8% D1 → 5% D7 → 2% D30
TikTok: 18% D1 → 12% D7 → 6% D30
Facebook referral: 35% D1 → 28% D7 → 18% D30
Email re-engagement: 45% D1 → 38% D7 → 25% D30
Act on the data
Use these insights to optimize: reallocate budget toward highest-retention sources, improve onboarding for low-retention cohorts, or refocus campaigns on best-performing channels.
Attribution-aware funnel analysis
Track user conversion funnels and measure dropoff by installation source.
// Track funnel events with attribution context
class FunnelTracking {
static Future<void> trackSignup(String email) async {
final link = await Redirectly.getInitialLink()
amplitude.logEvent(
'User Signup',
eventProperties: {
'email': email,
'install_source': link?.params['source'],
'install_campaign': link?.params['campaign'],
},
)
}
static Future<void> trackPurchase(
String orderId,
double amount,
) async {
final link = await Redirectly.getInitialLink()
amplitude.logEvent(
'Purchase Completed',
eventProperties: {
'order_id': orderId,
'amount': amount,
'install_source': link?.params['source'],
'install_campaign': link?.params['campaign'],
},
)
}
static Future<void> trackFeatureUsage(String featureName) async {
final link = await Redirectly.getInitialLink()
amplitude.logEvent(
'Feature Used',
eventProperties: {
'feature': featureName,
'install_source': link?.params['source'],
},
)
}
}
// Amplitude funnel:
// Install → (50% from Instagram, 80% from TikTok)
// Signup → (40% from Instagram, 70% from TikTok)
// Purchase → (15% from Instagram, 45% from TikTok)
// → Clearly TikTok users are more valuable
Next steps
Understand your users better with Amplitude + Redirectly attribution: