Back to Blog
Marketing
7 min read
January 8, 2024

Marketing Campaigns with Deep Linking: From Click to Conversion

Maximize your marketing ROI with deep linking campaigns that provide seamless user experiences and detailed attribution tracking. Learn how to create, track, and optimize marketing campaigns that drive real results.

Overview & Benefits

Why Use Deep Linking for Marketing Campaigns?

Traditional marketing campaigns often lose users in the transition from ad click to app install. Deep linking bridges this gap, providing seamless experiences that maintain context and drive higher conversion rates. With proper attribution tracking, you can measure the true ROI of your marketing efforts.

Key Benefits

  • • Complete attribution tracking
  • • Seamless user experiences
  • • Higher conversion rates
  • • Real-time campaign analytics
  • • A/B testing capabilities
  • • Cross-platform consistency

Campaign Types

  • • Social media advertising
  • • Email marketing campaigns
  • • Influencer partnerships
  • • Content marketing
  • • Retargeting campaigns
  • • Event-based promotions

Campaign Types

1. Social Media Campaigns

Create targeted campaigns for Facebook, Instagram, Twitter, TikTok, and other social platforms:

Facebook/Instagram Ads

  • • Use UTM parameters for tracking
  • • Create custom landing experiences
  • • A/B test different creative assets
  • • Track conversion events

TikTok/YouTube Shorts

  • • Leverage trending hashtags
  • • Create engaging video content
  • • Use influencer partnerships
  • • Track viral coefficient

2. Email Marketing Campaigns

Design email campaigns that drive app installs and engagement:

Newsletter Campaigns

  • • Personalized deep links
  • • Segment-based targeting
  • • Automated drip campaigns
  • • Performance tracking

Transactional Emails

  • • Welcome series
  • • Abandoned cart recovery
  • • Feature announcements
  • • Re-engagement campaigns

3. Influencer Partnerships

Collaborate with influencers to reach new audiences:

Micro-Influencers

  • • Higher engagement rates
  • • Authentic content creation
  • • Cost-effective partnerships
  • • Niche audience targeting

Macro-Influencers

  • • Large reach potential
  • • Brand awareness building
  • • Professional content quality
  • • Cross-platform presence

Implementation

1. Campaign Link Generation

Create campaign-specific links with detailed tracking parameters:

javascript
app.post('/api/create-campaign-link', async (req, res) => {
  try {
    const { 
      campaignName, 
      targetUrl, 
      source, 
      medium, 
      content, 
      term,
      metadata = {} 
    } = req.body;
    
    // 1. Generate unique campaign slug
    const campaignSlug = generateCampaignSlug(campaignName);
    
    // 2. Create campaign link with UTM parameters
    const campaignLink = await createCampaignLink({
      slug: campaignSlug,
      target: targetUrl,
      metadata: {
        campaign: campaignName,
        source: source,
        medium: medium,
        content: content,
        term: term,
        ...metadata
      }
    });
    
    // 3. Store campaign in database
    await storeCampaign({
      name: campaignName,
      slug: campaignSlug,
      link: campaignLink,
      source: source,
      medium: medium,
      status: 'active',
      created_at: new Date()
    });
    
    res.json({
      success: true,
      campaignLink: campaignLink,
      campaignId: campaignSlug,
      trackingUrl: `${campaignLink}?utm_source=${source}&utm_medium=${medium}&utm_campaign=${campaignName}`
    });
    
  } catch (error) {
    console.error('Campaign creation error:', error);
    res.status(500).json({ error: 'Failed to create campaign' });
  }
});

async function createCampaignLink({ slug, target, metadata }) {
  try {
    const response = await redirectly.post('/links', {
      slug: slug,
      target: target,
      metadata: metadata
    });
    
    return response.data.url;
  } catch (error) {
    console.error('Failed to create campaign link:', error);
    throw new Error('Failed to create campaign link');
  }
}

function generateCampaignSlug(campaignName) {
  const timestamp = Date.now();
  const cleanName = campaignName.toLowerCase()
    .replace(/[^a-z0-9]/g, '-')
    .replace(/-+/g, '-')
    .replace(/^-|-$/g, '');
  
  return `${cleanName}-${timestamp}`;
}

2. Flutter Campaign Tracking

Track campaign performance in your Flutter app:

dart
class CampaignTrackingService {
  static final FlutterRedirectly _redirectly = FlutterRedirectly();
  
  static Future<void> initialize() async {
    await _redirectly.initialize(RedirectlyConfig(
      apiKey: 'YOUR_API_KEY',
      baseUrl: 'https://redirectly.app',
      enableDebugLogging: true,
    ));
    
    // Listen for campaign link clicks
    _redirectly.onLinkClick.listen(_handleCampaignClick);
    
    // Listen for app installs from campaigns
    _redirectly.onAppInstalled.listen(_handleCampaignInstall);
  }
  
  static void _handleCampaignClick(LinkClickEvent event) {
    if (event.error != null) return;
    
    final uri = Uri.parse(event.originalUrl);
    final campaignData = _extractCampaignData(uri);
    
    if (campaignData != null) {
      // Store campaign attribution
      _storeCampaignAttribution(campaignData);
      
      // Track campaign click
      _trackCampaignEvent('click', campaignData);
    }
  }
  
  static void _handleCampaignInstall(AppInstallEvent event) {
    if (event.matched && event.link != null) {
      final campaignData = _extractCampaignDataFromLink(event.link!);
      
      if (campaignData != null) {
        // Track successful campaign conversion
        _trackCampaignEvent('install', campaignData);
        
        // Show campaign-specific onboarding
        _showCampaignOnboarding(campaignData);
      }
    }
  }
  
  static Map<String, String>? _extractCampaignData(Uri uri) {
    final utmSource = uri.queryParameters['utm_source'];
    final utmMedium = uri.queryParameters['utm_medium'];
    final utmCampaign = uri.queryParameters['utm_campaign'];
    final utmContent = uri.queryParameters['utm_content'];
    final utmTerm = uri.queryParameters['utm_term'];
    
    if (utmSource != null && utmMedium != null && utmCampaign != null) {
      return {
        'source': utmSource,
        'medium': utmMedium,
        'campaign': utmCampaign,
        'content': utmContent ?? '',
        'term': utmTerm ?? '',
        'timestamp': DateTime.now().toIso8601String(),
      };
    }
    
    return null;
  }
  
  static Future<void> _trackCampaignEvent(String eventType, Map<String, String> campaignData) async {
    try {
      await http.post(
        Uri.parse('${ApiConfig.baseUrl}/api/track-campaign-event'),
        headers: {'Content-Type': 'application/json'},
        body: jsonEncode({
          'eventType': eventType,
          'campaignData': campaignData,
          'deviceInfo': await _getDeviceInfo(),
        }),
      );
    } catch (e) {
      print('Campaign tracking error: $e');
    }
  }
  
  static void _showCampaignOnboarding(Map<String, String> campaignData) {
    // Show campaign-specific welcome message
    final campaignName = campaignData['campaign'] ?? 'Unknown Campaign';
    
    Get.snackbar(
      'Welcome!',
      'Thanks for joining from our $campaignName campaign!',
      backgroundColor: Colors.blue,
      colorText: Colors.white,
      duration: Duration(seconds: 5),
    );
    
    // Navigate to campaign-specific onboarding flow
    Get.toNamed('/onboarding', arguments: {
      'campaign': campaignData,
      'source': 'campaign'
    });
  }
}

Tracking & Analytics

Key Metrics to Track

Campaign Performance

  • • Click-through rates (CTR)
  • • Conversion rates (click to install)
  • • Cost per acquisition (CPA)
  • • Return on ad spend (ROAS)
  • • Lifetime value (LTV) by campaign
  • • Attribution window analysis

User Behavior

  • • Time to install after click
  • • First session engagement
  • • Retention rates by source
  • • Feature adoption rates
  • • In-app purchase conversion
  • • Churn rates by campaign

Analytics Dashboard

Create comprehensive campaign analytics:

javascript
app.get('/api/campaign-analytics', async (req, res) => {
  try {
    const { 
      campaignId, 
      timeRange = '30d', 
      source, 
      medium 
    } = req.query;
    
    const analytics = await getCampaignAnalytics({
      campaignId,
      timeRange,
      source,
      medium
    });
    
    res.json({
      success: true,
      analytics: {
        overview: analytics.overview,
        performance: analytics.performance,
        sources: analytics.sources,
        devices: analytics.devices,
        geographic: analytics.geographic,
        trends: analytics.trends
      }
    });
    
  } catch (error) {
    console.error('Campaign analytics error:', error);
    res.status(500).json({ error: 'Failed to fetch analytics' });
  }
});

async function getCampaignAnalytics({ campaignId, timeRange, source, medium }) {
  const startDate = getStartDate(timeRange);
  const filters = buildFilters({ campaignId, source, medium, startDate });
  
  const [
    clicks,
    installs,
    conversions,
    revenue,
    sources,
    devices,
    geographic
  ] = await Promise.all([
    getCampaignClicks(filters),
    getCampaignInstalls(filters),
    getCampaignConversions(filters),
    getCampaignRevenue(filters),
    getSourceBreakdown(filters),
    getDeviceBreakdown(filters),
    getGeographicBreakdown(filters)
  ]);
  
  return {
    overview: {
      totalClicks: clicks.total,
      totalInstalls: installs.total,
      conversionRate: clicks.total > 0 ? (installs.total / clicks.total) * 100 : 0,
      totalRevenue: revenue.total,
      roas: revenue.total / (clicks.total * 0.5), // Assuming $0.50 per click
      cpa: installs.total > 0 ? (clicks.total * 0.5) / installs.total : 0
    },
    performance: {
      dailyClicks: clicks.daily,
      dailyInstalls: installs.daily,
      dailyRevenue: revenue.daily
    },
    sources: sources,
    devices: devices,
    geographic: geographic,
    trends: {
      clickTrend: calculateTrend(clicks.daily),
      installTrend: calculateTrend(installs.daily),
      revenueTrend: calculateTrend(revenue.daily)
    }
  };
}

Optimization Strategies

A/B Testing

  • • Test different landing pages
  • • Experiment with UTM parameters
  • • Try various creative assets
  • • Test different call-to-actions
  • • Optimize for different audiences
  • • Measure statistical significance

Performance Optimization

  • • Optimize for high-converting sources
  • • Adjust bids based on LTV
  • • Retarget engaged users
  • • Scale successful campaigns
  • • Pause underperforming ads
  • • Optimize for mobile experience
Mobile-First Optimization
  • • Ensure fast loading times on mobile devices
  • • Optimize for thumb-friendly interactions
  • • Test on various screen sizes and devices
  • • Use mobile-specific ad formats and placements
  • • Implement progressive web app features for better engagement
  • • Track mobile-specific conversion funnels

Best Practices

Campaign Setup

  • • Use consistent UTM parameter naming
  • • Create clear campaign hierarchies
  • • Set up proper conversion tracking
  • • Implement proper attribution windows
  • • Use meaningful campaign names
  • • Document campaign objectives

Data Management

  • • Regular data quality audits
  • • Implement data retention policies
  • • Use proper data privacy controls
  • • Set up automated reporting
  • • Monitor for data anomalies
  • • Backup campaign data regularly
Pro Tips for Success
  • • Start with a small budget and scale successful campaigns
  • • Focus on quality over quantity - better to have fewer, high-converting campaigns
  • • Use deep linking to create personalized experiences for different campaign sources
  • • Regularly analyze and optimize your campaign performance
  • • Test different creative assets and messaging to find what resonates
  • • Leverage seasonal trends and events for campaign timing

🎯 Your Marketing Campaigns are Ready!

You now have a complete marketing campaign system with deep linking, comprehensive tracking, and optimization tools. This setup will help you maximize your marketing ROI and drive meaningful user acquisition.

Related Articles