Skip to content

Common Events

A comprehensive guide to tracking meaningful events across different types of applications.

Universal Events

These events apply to almost every application:

User Lifecycle

javascript
// Account management
LoopKit.track('user_signup', {
  method: 'email' | 'google' | 'github' | 'sso',
  source: 'homepage' | 'pricing' | 'blog' | 'referral',
  referrer: document.referrer,
  utm_campaign: 'summer_sale',
});

LoopKit.track('user_login', {
  method: 'email' | 'google' | 'sso',
  session_duration: 1800, // seconds from last session
  device_type: 'desktop' | 'mobile' | 'tablet',
});

LoopKit.track('user_logout', {
  session_duration: 3600, // seconds in this session
  pages_visited: 12,
  actions_taken: 8,
});
javascript
// Page/screen views
LoopKit.track('page_view', {
  page: '/dashboard' | '/settings' | '/billing',
  section: 'analytics' | 'user_management' | 'reports',
  time_on_previous_page: 45, // seconds
  referrer_page: '/home',
});

// Feature discovery
LoopKit.track('feature_discovered', {
  feature: 'api_integration',
  discovery_method: 'navigation' | 'tooltip' | 'search' | 'onboarding',
  time_to_discover: 1200, // seconds since signup
});

// Help & support
LoopKit.track('help_accessed', {
  help_type: 'documentation' | 'chat' | 'video' | 'faq',
  section: 'getting_started' | 'api' | 'billing',
  search_query: 'how to export data',
});

Onboarding & Activation

javascript
// Onboarding flow
LoopKit.track('onboarding_started', {
  flow_version: 'v2.1',
  entry_point: 'post_signup' | 'dashboard_prompt',
});

LoopKit.track('onboarding_step_completed', {
  step: 'profile_setup' | 'data_import' | 'team_invite',
  step_number: 2,
  time_spent: 180, // seconds on this step
  total_steps: 5,
});

LoopKit.track('onboarding_completed', {
  completion_time: 900, // total seconds
  steps_completed: 5,
  steps_skipped: 1,
  completion_rate: 0.83,
});

// Activation moments
LoopKit.track('first_value_moment', {
  action: 'first_report_generated' | 'first_integration_setup',
  time_since_signup: 3600, // seconds
  value_metric: 'data_points_analyzed',
  value_amount: 1250,
});

SaaS Application Events

Subscription & Billing

javascript
// Trial management
LoopKit.track('trial_started', {
  plan: 'pro' | 'enterprise',
  trial_length: 14, // days
  source: 'pricing_page' | 'feature_gate',
  discount_applied: false,
});

LoopKit.track('trial_converted', {
  plan: 'pro',
  days_into_trial: 7,
  features_used: ['reports', 'api', 'integrations'],
  conversion_trigger: 'feature_limit' | 'trial_ending' | 'manual',
});

// Subscription changes
LoopKit.track('subscription_upgraded', {
  from_plan: 'pro',
  to_plan: 'enterprise',
  upgrade_reason: 'usage_limit' | 'feature_request' | 'team_growth',
  price_difference: 50, // monthly
  effective_date: '2025-02-01',
});

LoopKit.track('subscription_cancelled', {
  plan: 'pro',
  cancellation_reason: 'cost' | 'missing_features' | 'competitor' | 'not_using',
  subscription_age: 120, // days
  last_login: 7, // days ago
});

// Payment events
LoopKit.track('payment_completed', {
  amount: 99.0,
  currency: 'USD',
  plan: 'enterprise',
  payment_method: 'card' | 'bank_transfer' | 'paypal',
  billing_cycle: 'monthly' | 'annual',
});

Feature Usage

javascript
// Core feature tracking
LoopKit.track('report_generated', {
  report_type: 'analytics' | 'user_activity' | 'billing',
  data_range: '7d' | '30d' | '90d' | 'custom',
  data_points: 5000,
  generation_time: 2.5, // seconds
  export_format: 'pdf' | 'csv' | 'excel',
});

LoopKit.track('integration_setup', {
  integration_type: 'slack' | 'zapier' | 'api' | 'webhook',
  setup_method: 'guided' | 'manual',
  time_to_complete: 300, // seconds
  success: true,
});

LoopKit.track('data_exported', {
  export_type: 'users' | 'events' | 'reports',
  format: 'csv' | 'json' | 'excel',
  record_count: 10000,
  file_size: 2.5, // MB
  destination: 'download' | 'email' | 'storage',
});

// Collaboration features
LoopKit.track('team_member_invited', {
  role: 'admin' | 'member' | 'viewer',
  invitation_method: 'email' | 'link',
  team_size_before: 5,
  inviter_role: 'admin',
});

LoopKit.track('content_shared', {
  content_type: 'dashboard' | 'report' | 'chart',
  share_method: 'link' | 'email' | 'slack',
  recipients: 3,
  permissions: 'view' | 'edit' | 'comment',
});

E-commerce Events

Shopping Behavior

javascript
// Product interaction
LoopKit.track('product_viewed', {
  product_id: 'SKU-123',
  product_name: 'Wireless Headphones',
  category: 'Electronics > Audio',
  price: 199.99,
  currency: 'USD',
  source: 'search' | 'category' | 'recommendation' | 'direct',
});

LoopKit.track('product_added_to_cart', {
  product_id: 'SKU-123',
  quantity: 2,
  price: 199.99,
  cart_total: 399.98,
  cart_item_count: 3,
});

// Purchase funnel
LoopKit.track('checkout_started', {
  cart_total: 399.98,
  item_count: 3,
  shipping_method: 'standard' | 'express' | 'overnight',
  payment_method: 'card' | 'paypal' | 'apple_pay',
});

LoopKit.track('purchase_completed', {
  order_id: 'ORD-789',
  total_amount: 399.98,
  shipping_cost: 9.99,
  tax_amount: 32.0,
  payment_method: 'card',
  items: [{ product_id: 'SKU-123', quantity: 2, price: 199.99 }],
});

Customer Service

javascript
LoopKit.track('support_ticket_created', {
  ticket_type: 'bug_report' | 'feature_request' | 'billing' | 'general',
  priority: 'low' | 'medium' | 'high' | 'urgent',
  channel: 'email' | 'chat' | 'phone' | 'form',
  user_plan: 'free' | 'pro' | 'enterprise',
});

LoopKit.track('refund_requested', {
  order_id: 'ORD-789',
  refund_amount: 199.99,
  refund_reason: 'defective' | 'not_as_described' | 'changed_mind',
  days_since_purchase: 5,
});

Mobile Game Events

Player Progression

javascript
// Level progression
LoopKit.track('level_started', {
  level: 15,
  world: 'forest',
  difficulty: 'medium',
  player_level: 22,
  power_level: 1850,
});

LoopKit.track('level_completed', {
  level: 15,
  completion_time: 245, // seconds
  score: 95000,
  stars_earned: 3,
  deaths: 2,
  items_collected: 12,
});

LoopKit.track('achievement_unlocked', {
  achievement_id: 'speed_demon',
  achievement_type: 'progression' | 'challenge' | 'social',
  difficulty: 'rare',
  player_level: 22,
});

Monetization

javascript
// In-app purchases
LoopKit.track('iap_purchase_started', {
  item_id: 'coin_pack_large',
  item_type: 'currency' | 'powerup' | 'cosmetic' | 'subscription',
  price: 4.99,
  currency: 'USD',
  player_level: 22,
});

LoopKit.track('iap_purchase_completed', {
  item_id: 'coin_pack_large',
  transaction_id: 'TXN-456',
  revenue: 4.99,
  coins_purchased: 5000,
  reason: 'insufficient_coins' | 'impulse' | 'sale',
});

// Virtual economy
LoopKit.track('virtual_currency_spent', {
  currency_type: 'coins' | 'gems' | 'energy',
  amount: 500,
  item_purchased: 'health_potion',
  remaining_balance: 2300,
  spend_location: 'shop' | 'level' | 'upgrade',
});

Content Platform Events

Content Creation

javascript
// Publishing content
LoopKit.track('content_created', {
  content_type: 'blog_post' | 'video' | 'podcast' | 'course',
  content_length: 1200, // words or seconds
  category: 'technology',
  tags: ['javascript', 'tutorial', 'beginner'],
  publish_status: 'draft' | 'published' | 'scheduled',
});

LoopKit.track('content_published', {
  content_id: 'POST-123',
  title: 'Getting Started with React',
  word_count: 1200,
  estimated_read_time: 6, // minutes
  seo_score: 85,
});

// Content engagement
LoopKit.track('content_viewed', {
  content_id: 'POST-123',
  content_type: 'blog_post',
  view_duration: 180, // seconds
  scroll_depth: 0.75, // percentage
  source: 'google' | 'social' | 'direct' | 'email',
});

LoopKit.track('content_shared', {
  content_id: 'POST-123',
  platform: 'twitter' | 'linkedin' | 'facebook' | 'email',
  share_method: 'button' | 'copy_link' | 'native_share',
});

Error & Performance Events

Error Tracking

javascript
// Application errors
LoopKit.track('error_occurred', {
  error_type: 'javascript' | 'network' | 'validation' | 'auth',
  error_message: 'Failed to load user data',
  error_code: 'ERR_NETWORK_TIMEOUT',
  page: '/dashboard',
  user_action: 'load_dashboard',
  browser: 'Chrome 121',
});

// Performance monitoring
LoopKit.track('performance_metric', {
  metric_type: 'page_load' | 'api_response' | 'render_time',
  duration: 2.5, // seconds
  page: '/dashboard',
  connection_type: '4g' | 'wifi' | '3g',
  device_type: 'desktop' | 'mobile',
});

Event Naming Best Practices

Naming Conventions

javascript
// ✅ Good: Verb + Noun format
LoopKit.track('user_signup');
LoopKit.track('report_generated');
LoopKit.track('payment_completed');

// ❌ Avoid: Vague or inconsistent naming
LoopKit.track('click');
LoopKit.track('user_did_something');
LoopKit.track('finished_report');

Property Standards

javascript
// ✅ Good: Consistent property names
LoopKit.track('feature_used', {
  feature: 'api_integration', // Use snake_case
  user_plan: 'enterprise', // Consistent across events
  success: true, // Boolean values
  duration: 120, // Numeric values in consistent units
});

// ❌ Avoid: Inconsistent properties
LoopKit.track('feature_used', {
  featureName: 'api_integration', // Mixed casing
  plan: 'enterprise', // Different from user_plan elsewhere
  successful: 'yes', // String instead of boolean
  time: '2 minutes', // String instead of number
});

Next Steps


Need help tracking events for your specific use case? Join our Discord for personalized guidance.