Mobile app monitoring is more challenging than server monitoring for one fundamental reason: you don't control the environment. Your app runs on thousands of device models, OS versions, network conditions, and battery states — and crashes in production that never appeared in your test suite.
The stakes are higher too. A 1-star review from a crash affects every potential user who reads it. App store algorithms surface reliability ratings. One bad release that drops your crash-free session rate below 99% can set your rating back by weeks.
The Mobile Monitoring Stack
Mobile app monitoring covers four distinct areas:
- Crash reporting — automatic capture of exceptions and native crashes with device/OS context
- Performance monitoring — app startup time, screen rendering, network request latency
- API monitoring — health of backend services your app depends on
- User experience monitoring — ANRs, hangs, jank, battery/memory impact
Core Mobile Stability Metrics
| Metric | Platform | Target | Alert Threshold |
|---|---|---|---|
| Crash-free sessions | iOS + Android | > 99.5% | < 99.5% |
| ANR rate | Android only | < 0.47% (Play Store threshold) | > 0.5% |
| App startup time | iOS + Android | < 2 seconds (cold) | > 3 seconds |
| Screen render time | iOS + Android | < 16ms (60fps) | > 33ms (30fps drop) |
| Network error rate | iOS + Android | < 1% of requests | > 5% |
| Memory warnings (iOS) | iOS only | Minimize | Any spike |
Crash Reporting Tools
Firebase Crashlytics (Free)
Crashlytics is the default choice for most indie and small-team apps. It's free, integrates deeply with the Firebase ecosystem, and provides everything you need for basic crash monitoring: crash grouping by stack trace, device/OS breakdown, user counts, and crash-free metrics.
// iOS: Set up Crashlytics (Swift)
import FirebaseCrashlytics
// In AppDelegate / @main:
FirebaseApp.configure()
// Add custom keys for better crash context
Crashlytics.crashlytics().setCustomValue(user.id, forKey: "user_id")
Crashlytics.crashlytics().setCustomValue(user.subscriptionTier, forKey: "subscription_tier")
// Log non-fatal errors
Crashlytics.crashlytics().record(error: error)
// Manually test crash reporting (debug builds only)
// fatalError("Test crash")// Android: Set up Crashlytics (Kotlin)
// build.gradle (app):
// implementation("com.google.firebase:firebase-crashlytics")
// implementation("com.google.firebase:firebase-analytics")
// In Application class:
class MyApp : Application() {
override fun onCreate() {
super.onCreate()
FirebaseApp.initializeApp(this)
// Set custom keys
FirebaseCrashlytics.getInstance().setCustomKey("user_id", userId)
FirebaseCrashlytics.getInstance().setCustomKey("build_flavor", BuildConfig.FLAVOR)
}
}
// Log non-fatal exceptions
try {
riskyOperation()
} catch (e: Exception) {
FirebaseCrashlytics.getInstance().recordException(e)
}Bugsnag (Paid, Best for Commercial Apps)
Bugsnag's stability score — percentage of sessions without errors — is its killer feature. You set a target (e.g., 99.5%) and Bugsnag alerts you when you're trending below it. The unified dashboard for iOS, Android, React Native, and web makes it the best choice for cross-platform teams.
Bugsnag also integrates error grouping with deployment tracking — you can see immediately which app version introduced an error and how it's trending across the install base.
Sentry Mobile
Sentry's mobile SDKs for iOS and Android provide crash reporting, performance monitoring, and session replay (for React Native). If you're already using Sentry for your backend, adding mobile monitoring keeps all your error data in one platform — especially useful for correlating mobile API errors with backend errors from the same request.
Monitor the APIs your mobile app depends on
Better Stack monitors your backend APIs from 30+ global locations and alerts you instantly when they go down — before your mobile users experience errors. Set up in 2 minutes.
Try Better Stack Free →Mobile Performance Monitoring (APM)
App Startup Time
Cold start time (first launch from closed) and warm start time (from background) directly affect user retention. Google's own research shows a 1-second improvement in startup time increases conversion by up to 27% in mobile commerce.
| Startup Type | Target | Acceptable | Poor |
|---|---|---|---|
| Cold start (Android) | < 1 second | 1–2 seconds | > 5 seconds (Play flags) |
| Warm start (Android) | < 500ms | 500ms–2s | > 2 seconds |
| Cold start (iOS) | < 400ms (pre-main) | 400ms–2s total | > 3 seconds |
| Warm start (iOS) | < 200ms | 200ms–1s | > 1 second |
Network Request Monitoring
Mobile apps make API calls over networks you don't control — LTE, Wi-Fi, 3G, spotty hotel internet. Monitor:
- Request latency by endpoint — which API calls are slowest on mobile? (Different from your server-side P99 due to last-mile network)
- Error rate by endpoint — which endpoints fail most for mobile clients?
- Request timeout rate — how often do requests exceed your timeout budget?
- Retry rate — excessive retries indicate flaky backend or network issues
Mobile APM Tool Comparison
| Tool | Crash Reporting | Performance | React Native | Pricing |
|---|---|---|---|---|
| Firebase Crashlytics | ✅ | Via Firebase Performance | ✅ | Free |
| Bugsnag | ✅ (best) | Via stability score | ✅ | $47+/mo |
| Sentry Mobile | ✅ | ✅ + Session Replay | ✅ | Free tier / $26+/mo |
| Datadog RUM | ✅ | ✅ Full APM | ✅ | $1.50/1K sessions |
| New Relic Mobile | ✅ | ✅ Full APM | ✅ | Free 100GB/mo |
| AppDynamics | ✅ | ✅ Full APM | ✅ | Custom enterprise |
App Store Rating and Crash Correlation
App store rating is a lagging indicator of stability — users leave 1-star reviews after experiencing crashes. By the time you see rating drops, you've already shipped bad code. Monitor leading indicators instead:
- Crash-free rate by app version — detect stability regression within hours of shipping
- Affected user count — prioritize crashes affecting the most users, not just those with highest occurrence
- Crash rate by OS version — a crash affecting only iOS 18.4 users indicates an OS-specific API behavior change
- Crash rate by device model — some bugs only manifest on specific hardware (memory constraints on older devices)
Set up a release-gating rule: if crash-free sessions drop below 99.5% within 2 hours of a new version release, automatically alert the team and prepare a rollback or hotfix. On Android, you can use staged rollouts (10% → 50% → 100%) and monitor crash rate before expanding.
Alert Pro
14-day free trialStop checking — get alerted instantly
Next time your mobile app APIs goes down, you'll know in under 60 seconds — not when your users start complaining.
- Email alerts for your mobile app APIs + 9 more APIs
- $0 due today for trial
- Cancel anytime — $9/mo after trial
Monitoring Backend APIs from Mobile
Mobile crashes often originate from backend API failures — your app expects a 200 response but gets a 500, or the response is malformed, or the timeout fires. Monitor your APIs from the server side to catch these issues before they manifest as mobile crashes.
Connect your server-side API monitoring with your mobile crash data: when an API endpoint goes down, correlate it with a spike in mobile crashes of type “network error” on the same timestamp. This two-signal approach makes root cause identification much faster.
FAQ
What is an ANR in Android?
ANR (Application Not Responding) occurs when the Android system detects your app's main thread is blocked for more than 5 seconds. Google Play flags apps with ANR rates above 0.47% in its Play Console — high ANR rates can result in your app being delisted or labeled as “may slow your device.” Common causes: blocking database queries on the main thread, synchronous network calls, deadlocks. Fix by moving all I/O to background threads.
How do I reduce mobile crash rates quickly?
Focus on the top 3 crashes by affected user count — fixing these typically resolves 80% of your crash impact. Use your crash reporter to filter by “highest user impact,” not just “most occurrences.” A crash affecting 1,000 users once each is worse than a crash affecting 1 user 10,000 times. Prioritize by breadth of impact.
Should I use Firebase Crashlytics or Sentry for mobile?
Use Firebase Crashlytics if you're primarily mobile with no existing observability stack — it's free and excellent for crash reporting. Choose Sentry if you want mobile + backend errors in one platform with session replay and cross-platform error correlation. Choose Bugsnag if stability score reporting and commercial SLA matter to your team.