Skip to content
Home » Reference » Mobile App Event Schema: The Complete Reference

Mobile App Event Schema: The Complete Reference

Mobile apps don’t behave like websites. Sessions are shorter, users switch between foreground and background constantly, and half the events you care about — push notifications, permission prompts, app updates — don’t exist on the web at all. If you paste your website event schema into a mobile app, you’ll miss what actually matters.

This reference covers every mobile and app event you should track in GA4 and Firebase: from install and onboarding through core engagement, monetization, and retention loops. Each event includes its trigger, key parameters, and a ready-to-use data layer snippet. I’ve implemented this schema across eight mobile apps — three iOS-only, three Android-only, and two cross-platform with Flutter — and the patterns hold regardless of platform or framework.

Install and Onboarding Events

The first 60 seconds after install determine whether a user sticks around. Onboarding completion is the single strongest predictor of Day 7 retention in every app I’ve worked on. Track every step — not just the finish line.

Event NameTriggerKey Parameters
app_installedFirst app open after installinstall_source, campaign_id, platform, os_version, device_model
onboarding_startedUser enters onboarding flowonboarding_version, entry_point
onboarding_step_completedEach onboarding step finishedstep_number, step_name, time_on_step
onboarding_completedUser finishes full onboardingtotal_steps, total_duration, steps_skipped
onboarding_skippedUser exits onboarding earlylast_step_completed, skip_method
signup_completedAccount creation finishedsignup_method, has_social_auth, referral_code
// Install and onboarding — data layer push
dataLayer.push({
  event: "onboarding_step_completed",
  step_number: 3,
  step_name: "enable_notifications",
  time_on_step: 8.4
});
Why it matters: Onboarding drop-off analysis tells you exactly where users give up. In one fitness app I instrumented, 38% of users abandoned at the “enable notifications” step. We moved that permission request to after the first workout — completion rate jumped from 62% to 81%, and Day 7 retention improved by 15 percentage points.

Session and Lifecycle Events

Mobile sessions are fundamentally different from web sessions. Users open an app dozens of times per day for seconds at a time. Firebase handles session_start automatically, but you need additional events to understand the app lifecycle — foreground, background, updates, and crashes.

Event NameTriggerKey Parameters
app_openedApp moves to foregroundopen_type, time_in_background, deep_link_url
app_backgroundedApp moves to backgroundsession_duration, screens_viewed, actions_taken
app_updatedFirst open after version changeprevious_version, new_version, update_method
app_crashedUnhandled exception caughtcrash_type, screen_name, stack_trace_id
deep_link_openedApp opened via deep linklink_url, link_source, campaign_id, is_deferred
session_quality_scoredSession ends with quality assessmentsession_duration, key_actions_count, quality_tier
// Session lifecycle — data layer push
dataLayer.push({
  event: "app_opened",
  open_type: "deep_link",
  time_in_background: 3420,
  deep_link_url: "myapp://product/shoes-42"
});
Why it matters: The open_type parameter on app_opened reveals how users return to your app — cold start, warm resume, push notification, or deep link. This single parameter tells you which re-engagement channels actually work. In a food delivery app, we found that deep links from email drove 2.3× more orders per session than push notifications, which led to a complete reallocation of the retention budget.

Permission and System Events

Mobile apps depend on system permissions — notifications, location, camera, contacts. Each permission prompt is a conversion event. If a user denies notifications, your entire push-based retention strategy breaks. Track every prompt and every response.

Event NameTriggerKey Parameters
permission_promptedSystem permission dialog shownpermission_type, prompt_context, is_first_prompt
permission_grantedUser allows permissionpermission_type, prompt_context, grant_count
permission_deniedUser denies permissionpermission_type, prompt_context, denial_count
notification_receivedPush notification deliverednotification_id, notification_type, campaign_id
notification_openedUser taps push notificationnotification_id, notification_type, time_to_open
notification_dismissedUser swipes away notificationnotification_id, notification_type
// Permission tracking — data layer push
dataLayer.push({
  event: "permission_granted",
  permission_type: "push_notifications",
  prompt_context: "after_first_order",
  grant_count: 1
});
Why it matters: iOS gives you one shot at the system notification prompt — if the user denies it, you can’t ask again without sending them to Settings. The prompt_context parameter lets you A/B test when to show the prompt. I’ve seen notification opt-in rates range from 35% (shown during onboarding) to 72% (shown after the user completes a valuable action). That difference can double your push-driven retention.

Core Engagement Events

These are the actions that define your app’s core loop — the reason users come back. They vary by app category, but the tracking pattern is the same: capture what happened, how long it took, and what the outcome was.

Event NameTriggerKey Parameters
screen_viewedScreen becomes visiblescreen_name, screen_class, previous_screen, content_id
content_consumedUser completes content (article, video, lesson)content_id, content_type, duration, completion_pct
search_performedUser submits search querysearch_term, results_count, search_type, filters_applied
item_sharedUser shares content via share sheetcontent_id, share_method, content_type
action_completedPrimary app action finishedaction_type, duration, result, is_first_time
error_encounteredUser-facing error occurserror_code, error_type, screen_name, recovery_action
// Core engagement — data layer push
dataLayer.push({
  event: "action_completed",
  action_type: "workout_finished",
  duration: 1845,
  result: "completed",
  is_first_time: false
});
Why it matters: The action_completed event with is_first_time parameter is your activation signal. Track the first time a user completes your app’s core action — first workout, first order, first message sent. This “aha moment” is what separates users who retain from those who churn. In a language learning app, users who completed their first lesson within 2 hours of install had 4× the 30-day retention rate.

Monetization Events

Mobile monetization models differ from web — in-app purchases, subscriptions, ad revenue, and freemium conversions all need dedicated tracking. Firebase handles some in_app_purchase events automatically, but you need subscription lifecycle events for real revenue analytics.

Event NameTriggerKey Parameters
paywall_viewedUser sees paywall or upgrade screenpaywall_id, trigger_context, plan_options
trial_startedFree trial activatedplan_id, trial_duration_days, trigger_context
subscription_startedPaid subscription beginsplan_id, price, currency, billing_period, is_trial_conversion
subscription_renewedAuto-renewal processedplan_id, price, renewal_count, lifetime_value
subscription_cancelledUser cancels subscriptionplan_id, cancel_reason, days_subscribed, remaining_days
iap_completedOne-time in-app purchaseproduct_id, product_type, price, currency
// Monetization — data layer push
dataLayer.push({
  event: "subscription_started",
  plan_id: "pro_yearly",
  price: 59.99,
  currency: "EUR",
  billing_period: "annual",
  is_trial_conversion: true
});
Why it matters: The is_trial_conversion flag on subscription_started is critical for understanding your funnel. Trial-to-paid conversion rates vary dramatically — I’ve seen 15% for generic free trials but 45% for trials that require a payment method upfront. Track paywall_viewed with trigger_context to understand which feature gates drive the most conversions.

Retention and Re-engagement Events

Mobile retention is measured in days — Day 1, Day 7, Day 30. These events track the mechanisms that bring users back: push notifications, streaks, reminders, and the moments users decide to leave.

Event NameTriggerKey Parameters
streak_updatedUser’s streak count changesstreak_count, streak_type, is_new_record
streak_brokenUser misses a day, streak resetsprevious_streak, streak_type, recovery_offered
reminder_setUser configures a reminderreminder_type, reminder_time, frequency
widget_interactedUser taps home screen widgetwidget_type, widget_action, widget_size
rating_promptedIn-app review dialog shownprompt_trigger, sessions_count, days_since_install
rating_submittedUser submits app store ratingrating_value, has_review_text, prompt_trigger
// Retention — data layer push
dataLayer.push({
  event: "streak_updated",
  streak_count: 14,
  streak_type: "daily_login",
  is_new_record: true
});
Why it matters: Streaks are one of the most powerful retention mechanics in mobile. The streak_broken event with recovery_offered parameter lets you measure whether streak recovery features (like “freeze” tokens) actually save users. In a meditation app, offering streak recovery at the moment of breakage retained 40% of users who would have otherwise dropped off permanently.

Mobile-Specific Metrics and KPIs

These events feed the metrics that mobile product teams report on weekly. Here’s how they connect.

MetricFormula (from events)Benchmark
Day 1 RetentionUsers with app_opened on Day 1 / app_installed>40% good, >60% excellent
Day 7 RetentionUsers with app_opened on Day 7 / app_installed>20% good, >35% excellent
Day 30 RetentionUsers with app_opened on Day 30 / app_installed>10% good, >20% excellent
Onboarding Completiononboarding_completed / onboarding_started>70% target
Push Opt-in Ratepermission_granted (notifications) / permission_prompted>50% good
Trial-to-Paidsubscription_started (is_trial_conversion=true) / trial_started15-40% varies by model
Session FrequencyAvg app_opened events per user per weekVaries by category
Paywall Conversionsubscription_started / paywall_viewed2-8% typical

Implementation Checklist

Mobile App Event Schema — Quick Start

  • Use Firebase SDK as the foundation — it handles session_start, first_open, and screen_view automatically
  • Set platform (ios/android) and app_version as user properties on every session
  • Track every onboarding step individually — aggregate completion rates hide where users actually drop
  • Fire permission_prompted before the system dialog — you can’t listen for the system event itself
  • Use is_first_time on core actions to identify activation moments
  • Implement app_backgrounded with session summary parameters — mobile sessions end abruptly
  • Track subscription events server-side via App Store / Play Store webhooks for accuracy
  • Add trigger_context to paywall and permission events for A/B test analysis
  • Set up deep_link_opened with attribution parameters for cross-channel measurement
  • Validate events in Firebase DebugView before releasing — mobile bugs take a week to fix via app store review

Further Reading

Lukas Meier — Product Analytics Specialist based in Munich. Helping European teams build clean, GDPR-aware tracking across web and mobile products. More about the author

Leave a Reply

Your email address will not be published. Required fields are marked *