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,
});
Navigation & Engagement
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
- Learn about AI insight examples →
- Review event tracking best practices →
- Explore the complete data flow →
- See platform-specific integration guides →
Need help tracking events for your specific use case? Join our Discord for personalized guidance.