OMX Logo
Documentation
Analytics

Email Tracking

Track email delivery, opens, clicks, and conversions with comprehensive analytics and real-time monitoring capabilities.

Email Tracking & Analytics

Monitor your email performance with comprehensive tracking capabilities. Track deliverability, opens, clicks, conversions, and user engagement with real-time analytics and detailed reporting.

Email Delivery Tracking

Monitor email delivery status and identify delivery issues:

import { OMXClient } from '@omx-sdk/email';

const omx = new OMXClient({
  clientId: 'your_client_id',
  secretKey: 'your_secret_key'
});

// Send email with tracking enabled
const result = await omx.email.send({
  to: 'user@example.com',
  subject: 'Welcome to our platform',
  template: 'welcome_email',
  
  // Enable delivery tracking
  tracking: {
    delivery: true,
    opens: true,
    clicks: true,
    unsubscribes: true
  },
  
  // Custom tracking parameters
  metadata: {
    campaignId: 'welcome_campaign_2024',
    userSegment: 'new_users',
    source: 'signup_flow'
  }
});

// Get delivery status
const deliveryStatus = await omx.email.getDeliveryStatus(result.messageId);
console.log(deliveryStatus);
// {
//   messageId: 'msg_123456',
//   status: 'delivered',
//   timestamp: '2024-01-15T10:30:00Z',
//   recipient: 'user@example.com',
//   deliveryAttempts: 1,
//   latency: 2.3, // seconds
//   provider: 'gmail',
//   bounceReason: null
// }

// Track delivery events in real-time
const deliveryStream = omx.email.streamDeliveryEvents();

deliveryStream.on('delivered', (event) => {
  console.log(`Email ${event.messageId} delivered to ${event.recipient}`);
  updateDeliveryMetrics(event);
});

deliveryStream.on('bounced', (event) => {
  console.log(`Email bounced: ${event.bounceReason}`);
  handleBounce(event);
});

deliveryStream.on('complaint', (event) => {
  console.log(`Spam complaint from ${event.recipient}`);
  handleComplaint(event);
});

Open and Click Tracking

Track when recipients open emails and click on links:

// Email with advanced tracking
const trackedEmail = await omx.email.send({
  to: 'user@example.com',
  template: 'newsletter',
  
  tracking: {
    // Open tracking with detailed analytics
    opens: {
      enabled: true,
      trackLocation: true,
      trackDevice: true,
      trackReads: true, // Track read time
      pixelless: false // Use 1x1 pixel tracking
    },
    
    // Click tracking with link analytics
    clicks: {
      enabled: true,
      trackAllLinks: true,
      customDomains: ['track.yourapp.com'],
      
      // Custom tracking for specific links
      customLinks: {
        'cta_button': { goal: 'conversion', value: 50 },
        'product_link': { goal: 'product_view', category: 'electronics' }
      }
    },
    
    // UTM parameters for analytics integration
    utm: {
      source: 'email',
      medium: 'newsletter',
      campaign: 'january_2024',
      content: 'main_cta'
    }
  }
});

// Get open tracking data
const openData = await omx.email.getOpenTracking(result.messageId);
console.log(openData);
// {
//   messageId: 'msg_123456',
//   opens: [
//     {
//       timestamp: '2024-01-15T11:00:00Z',
//       userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X)...',
//       device: { type: 'mobile', os: 'iOS', browser: 'Mobile Safari' },
//       location: { country: 'US', city: 'New York', region: 'NY' },
//       readTime: 45, // seconds
//       isUnique: true
//     }
//   ],
//   uniqueOpens: 1,
//   totalOpens: 3,
//   openRate: 0.75,
//   avgReadTime: 32
// }

// Get click tracking data
const clickData = await omx.email.getClickTracking(result.messageId);
console.log(clickData);
// {
//   messageId: 'msg_123456',
//   clicks: [
//     {
//       timestamp: '2024-01-15T11:05:00Z',
//       url: 'https://yourapp.com/products/123',
//       linkId: 'product_link',
//       userAgent: 'Mozilla/5.0...',
//       device: { type: 'mobile', os: 'iOS' },
//       location: { country: 'US', city: 'New York' },
//       isUnique: true
//     }
//   ],
//   uniqueClicks: 1,
//   totalClicks: 2,
//   clickRate: 0.15,
//   clickToOpenRate: 0.20
// }

Campaign Analytics

Analyze performance across email campaigns and segments:

// Get campaign analytics
const campaignAnalytics = await omx.email.getCampaignAnalytics('welcome_campaign_2024', {
  startDate: '2024-01-01',
  endDate: '2024-01-31',
  granularity: 'daily',
  
  // Metrics to include
  metrics: [
    'sent',
    'delivered',
    'bounced',
    'opened',
    'clicked',
    'unsubscribed',
    'complained',
    'conversions'
  ],
  
  // Breakdown by segments
  segmentBy: ['userSegment', 'device', 'location']
});

console.log(campaignAnalytics);
// {
//   campaign: 'welcome_campaign_2024',
//   period: { start: '2024-01-01', end: '2024-01-31' },
//   
//   summary: {
//     sent: 12500,
//     delivered: 12180,
//     deliveryRate: 0.974,
//     bounced: 320,
//     bounceRate: 0.026,
//     opened: 4876,
//     openRate: 0.40,
//     uniqueOpens: 4123,
//     uniqueOpenRate: 0.34,
//     clicked: 732,
//     clickRate: 0.06,
//     uniqueClicks: 651,
//     uniqueClickRate: 0.053,
//     clickToOpenRate: 0.15,
//     unsubscribed: 45,
//     unsubscribeRate: 0.004,
//     complained: 8,
//     complaintRate: 0.0007,
//     conversions: 89,
//     conversionRate: 0.007
//   },
//   
//   timeline: [
//     { date: '2024-01-01', sent: 450, opened: 180, clicked: 27 },
//     { date: '2024-01-02', sent: 520, opened: 208, clicked: 31 }
//   ],
//   
//   segments: {
//     userSegment: {
//       'new_users': { sent: 8000, openRate: 0.45, clickRate: 0.08 },
//       'existing_users': { sent: 4500, openRate: 0.32, clickRate: 0.04 }
//     },
//     device: {
//       'mobile': { opens: 2800, openRate: 0.42, avgReadTime: 28 },
//       'desktop': { opens: 1900, openRate: 0.38, avgReadTime: 45 }
//     }
//   }
// }

// Compare campaign performance
const comparison = await omx.email.compareCampaigns([
  'welcome_campaign_2024',
  'promotional_campaign_2024',
  'newsletter_campaign_2024'
], {
  metrics: ['openRate', 'clickRate', 'conversionRate'],
  timeRange: '30d'
});

// Get industry benchmarks
const benchmarks = await omx.email.getBenchmarks({
  industry: 'e-commerce',
  emailType: 'promotional',
  region: 'US'
});

console.log('Your performance vs benchmarks:', {
  yourOpenRate: campaignAnalytics.summary.openRate,
  benchmarkOpenRate: benchmarks.openRate,
  performance: campaignAnalytics.summary.openRate > benchmarks.openRate ? 'above' : 'below'
});

User Engagement Tracking

Track individual user engagement patterns and behavior:

// Get user engagement profile
const userEngagement = await omx.email.getUserEngagement('user@example.com', {
  timeRange: '90d',
  includeDetails: true
});

console.log(userEngagement);
// {
//   email: 'user@example.com',
//   engagementScore: 75, // 0-100 scale
//   
//   summary: {
//     emailsReceived: 45,
//     emailsOpened: 32,
//     emailsClicked: 12,
//     avgOpenTime: 18, // hours after send
//     avgReadTime: 34, // seconds
//     mostActiveDay: 'tuesday',
//     mostActiveTime: '10:00-11:00',
//     preferredDevice: 'mobile'
//   },
//   
//   preferences: {
//     frequency: 'weekly',
//     categories: ['product_updates', 'promotions'],
//     unsubscribedCategories: ['newsletters'],
//     timezone: 'America/New_York'
//   },
//   
//   recentActivity: [
//     {
//       messageId: 'msg_789',
//       campaign: 'welcome_series',
//       action: 'clicked',
//       timestamp: '2024-01-14T10:30:00Z',
//       link: 'product_page'
//     }
//   ]
// }

// Track engagement over time
const engagementTrend = await omx.email.getEngagementTrend('user@example.com', {
  timeRange: '6m',
  granularity: 'weekly'
});

// Segment users by engagement level
const engagementSegments = await omx.email.segmentByEngagement({
  criteria: {
    highly_engaged: { openRate: '> 0.6', clickRate: '> 0.1' },
    moderately_engaged: { openRate: '0.2-0.6', clickRate: '0.02-0.1' },
    low_engaged: { openRate: '< 0.2', clickRate: '< 0.02' },
    inactive: { lastOpen: '> 30d' }
  },
  timeRange: '90d'
});

console.log('Engagement segments:', engagementSegments);
// {
//   highly_engaged: { count: 1250, percentage: 25 },
//   moderately_engaged: { count: 2750, percentage: 55 },
//   low_engaged: { count: 800, percentage: 16 },
//   inactive: { count: 200, percentage: 4 }
// }

Conversion Tracking

Track email-driven conversions and revenue attribution:

// Set up conversion tracking
const conversionTracking = await omx.email.setupConversions({
  events: [
    {
      name: 'purchase',
      value: 'revenue',
      attributionWindow: '7d',
      trackingMethod: 'utm'
    },
    {
      name: 'signup',
      value: 50, // fixed value
      attributionWindow: '3d',
      trackingMethod: 'pixel'
    },
    {
      name: 'trial_start',
      value: 25,
      attributionWindow: '24h',
      trackingMethod: 'api'
    }
  ],
  
  // Conversion pixel
  pixel: {
    enabled: true,
    domains: ['yourapp.com', 'checkout.yourapp.com']
  }
});

// Track conversions via API
await omx.email.trackConversion({
  messageId: 'msg_123456',
  userId: 'user_789',
  event: 'purchase',
  value: 129.99,
  currency: 'USD',
  
  // Additional context
  metadata: {
    orderId: 'ORD-12345',
    products: ['product_a', 'product_b'],
    category: 'electronics'
  },
  
  timestamp: new Date().toISOString()
});

// Get conversion analytics
const conversionAnalytics = await omx.email.getConversionAnalytics({
  campaigns: ['welcome_campaign_2024'],
  events: ['purchase', 'signup'],
  timeRange: '30d',
  
  breakdown: {
    by: ['campaign', 'email_template', 'user_segment'],
    includeAttribution: true
  }
});

console.log(conversionAnalytics);
// {
//   summary: {
//     totalConversions: 156,
//     totalRevenue: 18750.50,
//     conversionRate: 0.012,
//     revenuePerEmail: 1.50,
//     avgOrderValue: 120.20,
//     roas: 12.5 // Return on ad spend
//   },
//   
//   attribution: {
//     direct: { conversions: 89, revenue: 10680.30 },
//     assisted: { conversions: 67, revenue: 8070.20 }
//   },
//   
//   breakdown: {
//     by_campaign: [
//       {
//         campaign: 'welcome_campaign_2024',
//         conversions: 89,
//         revenue: 10750.30,
//         conversionRate: 0.015
//       }
//     ],
//     
//     by_template: [
//       {
//         template: 'welcome_email',
//         conversions: 45,
//         revenue: 5400.20,
//         conversionRate: 0.018
//       }
//     ]
//   }
// }

// Revenue attribution analysis
const attributionAnalysis = await omx.email.getAttributionAnalysis({
  timeRange: '90d',
  models: ['first_touch', 'last_touch', 'linear', 'time_decay'],
  includeAssisted: true
});

Real-time Monitoring

Monitor email performance in real-time with alerts and dashboards:

// Set up real-time monitoring
const monitor = await omx.email.createMonitor({
  name: 'Email Performance Monitor',
  
  // Metrics to monitor
  metrics: [
    { name: 'deliveryRate', threshold: { min: 0.95 } },
    { name: 'bounceRate', threshold: { max: 0.05 } },
    { name: 'complaintRate', threshold: { max: 0.001 } },
    { name: 'openRate', threshold: { min: 0.20 } },
    { name: 'clickRate', threshold: { min: 0.02 } }
  ],
  
  // Time windows for analysis
  windows: ['1h', '6h', '24h'],
  
  // Alert configuration
  alerts: {
    email: {
      recipients: ['admin@yourapp.com'],
      severity: ['critical', 'warning']
    },
    webhook: {
      url: 'https://yourapp.com/alerts/email',
      secret: 'alert_webhook_secret'
    },
    slack: {
      channel: '#email-alerts',
      webhook: process.env.SLACK_WEBHOOK_URL
    }
  }
});

// Real-time event stream
const eventStream = omx.email.createEventStream({
  events: ['delivered', 'opened', 'clicked', 'bounced', 'complained'],
  
  filters: {
    campaigns: ['welcome_campaign_2024'],
    timeWindow: '1h'
  }
});

eventStream.on('event', (event) => {
  // Update real-time dashboard
  updateDashboard(event);
  
  // Check for anomalies
  if (detectAnomaly(event)) {
    triggerAlert(event);
  }
});

// Get real-time metrics
const realtimeMetrics = await omx.email.getRealtimeMetrics({
  timeWindow: '1h',
  granularity: '5m'
});

console.log('Last hour metrics:', realtimeMetrics);
// {
//   timestamp: '2024-01-15T15:00:00Z',
//   sent: 1250,
//   delivered: 1205,
//   opened: 482,
//   clicked: 73,
//   bounced: 45,
//   complaints: 2,
//   
//   rates: {
//     delivery: 0.964,
//     open: 0.40,
//     click: 0.058,
//     bounce: 0.036,
//     complaint: 0.0016
//   },
//   
//   trends: {
//     delivery: 'stable',
//     open: 'increasing',
//     click: 'stable',
//     bounce: 'decreasing'
//   }
// }

// Anomaly detection
const anomalies = await omx.email.detectAnomalies({
  metrics: ['openRate', 'clickRate', 'bounceRate'],
  sensitivity: 'medium',
  timeRange: '7d'
});

if (anomalies.length > 0) {
  console.log('Detected anomalies:', anomalies);
  // [
  //   {
  //     metric: 'bounceRate',
  //     value: 0.087,
  //     expected: 0.025,
  //     severity: 'high',
  //     timestamp: '2024-01-15T14:30:00Z'
  //   }
  // ]
}

Advanced Analytics

Leverage advanced analytics features for deeper insights:

// Cohort analysis
const cohortAnalysis = await omx.email.getCohortAnalysis({
  cohortBy: 'signup_month',
  metric: 'engagement_score',
  timeRange: '12m',
  
  cohortDefinition: {
    period: 'month',
    size: 'auto'
  }
});

// Heat map analysis
const heatMap = await omx.email.getHeatMapAnalysis({
  dimension: 'send_time',
  metric: 'open_rate',
  granularity: 'hour',
  
  filters: {
    campaigns: ['newsletter'],
    userSegment: 'active_users',
    timeRange: '30d'
  }
});

// Funnel analysis
const funnelAnalysis = await omx.email.getFunnelAnalysis({
  steps: [
    { name: 'sent', event: 'email_sent' },
    { name: 'delivered', event: 'email_delivered' },
    { name: 'opened', event: 'email_opened' },
    { name: 'clicked', event: 'email_clicked' },
    { name: 'converted', event: 'purchase' }
  ],
  
  breakdown: {
    by: ['campaign', 'user_segment', 'device'],
    timeRange: '30d'
  }
});

console.log('Funnel conversion rates:', funnelAnalysis.conversionRates);
// {
//   'sent_to_delivered': 0.974,
//   'delivered_to_opened': 0.412,
//   'opened_to_clicked': 0.145,
//   'clicked_to_converted': 0.089
// }

// Predictive analytics
const predictions = await omx.email.getPredictions({
  model: 'engagement_prediction',
  
  predictions: [
    { type: 'open_probability', userId: 'user_123' },
    { type: 'click_probability', userId: 'user_123' },
    { type: 'unsubscribe_risk', userId: 'user_123' },
    { type: 'lifetime_value', userId: 'user_123' }
  ],
  
  features: {
    includeHistorical: true,
    includeBehavioral: true,
    includeDemographic: true
  }
});

// A/B test analysis
const abTestResults = await omx.email.getABTestResults('test_123', {
  metrics: ['open_rate', 'click_rate', 'conversion_rate'],
  confidenceLevel: 0.95,
  
  analysis: {
    includeSegmentation: true,
    includeStatisticalSignificance: true,
    includeEffectSize: true
  }
});

console.log('A/B Test Results:', abTestResults);
// {
//   testId: 'test_123',
//   status: 'completed',
//   winner: 'variant_b',
//   
//   results: {
//     control: {
//       participants: 1000,
//       openRate: 0.384,
//       clickRate: 0.056,
//       conversionRate: 0.012
//     },
//     variant_b: {
//       participants: 1000,
//       openRate: 0.421,
//       clickRate: 0.074,
//       conversionRate: 0.018
//     }
//   },
//   
//   significance: {
//     openRate: { pValue: 0.032, significant: true },
//     clickRate: { pValue: 0.018, significant: true },
//     conversionRate: { pValue: 0.089, significant: false }
//   },
//   
//   recommendation: 'Deploy variant B - shows 9.6% improvement in open rate'
// }

Data Export and Integration

Export tracking data and integrate with external analytics platforms:

// Export analytics data
const exportRequest = await omx.email.exportData({
  type: 'campaign_analytics',
  format: 'csv', // 'csv', 'json', 'excel'
  
  filters: {
    campaigns: ['welcome_campaign_2024'],
    dateRange: { start: '2024-01-01', end: '2024-01-31' }
  },
  
  fields: [
    'messageId',
    'recipient',
    'sentAt',
    'deliveredAt',
    'openedAt',
    'clickedAt',
    'conversions'
  ],
  
  delivery: {
    method: 'download', // 'download', 'email', 's3'
    email: 'analytics@yourapp.com'
  }
});

// Integration with Google Analytics
await omx.email.integrateGA4({
  measurementId: 'G-XXXXXXXXXX',
  apiSecret: 'api_secret_here',
  
  eventMapping: {
    'email_sent': 'email_campaign_sent',
    'email_opened': 'email_campaign_opened',
    'email_clicked': 'email_campaign_clicked'
  },
  
  customDimensions: {
    'campaign_name': 'custom_dimension_1',
    'user_segment': 'custom_dimension_2'
  }
});

// Integration with Mixpanel
await omx.email.integrateMixpanel({
  projectToken: 'mixpanel_token',
  
  eventTracking: {
    trackOpens: true,
    trackClicks: true,
    trackConversions: true,
    
    userProperties: ['email_engagement_score', 'preferred_send_time']
  }
});

// Custom webhook for real-time data streaming
await omx.email.setupDataWebhook({
  url: 'https://yourapp.com/email-data-webhook',
  events: ['delivered', 'opened', 'clicked', 'converted'],
  
  format: {
    type: 'json',
    batchSize: 100,
    batchTimeout: 30 // seconds
  },
  
  authentication: {
    type: 'hmac',
    secret: 'webhook_secret_key'
  }
});

// Real-time data streaming to your data warehouse
const dataStream = omx.email.createDataStream({
  destination: {
    type: 'bigquery',
    projectId: 'your-project',
    dataset: 'email_analytics',
    table: 'events'
  },
  
  schema: {
    messageId: 'STRING',
    event: 'STRING',
    timestamp: 'TIMESTAMP',
    userId: 'STRING',
    campaignId: 'STRING',
    metadata: 'JSON'
  }
});

Best Practices

  • Privacy Compliance: Respect user privacy and comply with GDPR/CCPA regulations
  • Data Retention: Implement appropriate data retention policies
  • Accurate Attribution: Use proper attribution windows for conversion tracking
  • Regular Monitoring: Set up alerts for key metrics and anomalies
  • Segmentation Analysis: Analyze performance across different user segments
  • Actionable Insights: Focus on metrics that drive business decisions

Next Steps