Setting Up Crash-Free Users Rate Dashboard for Mobile Apps
Crash-Free Users Rate is the metric that product managers, tech leads, and CTOs look at first after a release. But standard dashboards in Firebase Crashlytics show only the overall percentage and top 5 crashes. To answer "which version, on which device, in which region has the problem" — you need a drill-down dashboard.
What the Dashboard Should Show
Minimum dimensions:
- By app version — comparison of current release with previous
- By platform — iOS vs Android separately
- By OS version — crashes are often specific to Android 8 or iOS 15
- By device — Samsung Galaxy A-series vs Pixel vs iPhone SE
- By time — dynamics over 7/30 days, anomalies after deploys
Sentry Release Comparison
In Sentry, this is built into Release Health. But for a custom dashboard:
# Sentry API — get crash-free rate by release
import requests
resp = requests.get(
"https://sentry.io/api/0/organizations/YOUR_ORG/sessions/",
headers={"Authorization": "Bearer YOUR_TOKEN"},
params={
"project": "YOUR_PROJECT_ID",
"field": ["crash_free_rate(session)", "sum(session)"],
"groupBy": "release",
"statsPeriod": "14d",
"interval": "1d"
}
)
data = resp.json()
Datadog RUM Dashboard
In Datadog, build the dashboard via RUM Analytics. Query for a widget:
# Crash-Free Users Rate by version
formula: (1 - (count:rum.crash{env:production} / count:rum.session{env:production})) * 100
group_by: @application.version
visualize_as: timeseries
Useful widget — Comparison: compare current version with previous on one graph:
# Version n
count:rum.crash{env:production,application.version:2.3.1} / count:rum.session{env:production,application.version:2.3.1}
# Version n-1
count:rum.crash{env:production,application.version:2.3.0} / count:rum.session{env:production,application.version:2.3.0}
Firebase + Grafana
Firebase Crashlytics lacks a real-time metrics export API, but BigQuery Export lets you stream data:
-- BigQuery: Crash-Free Users Rate by version over last 30 days
SELECT
app_info.version AS app_version,
platform,
ROUND(
100 * (1 - COUNTIF(is_fatal) / COUNT(DISTINCT user.id)),
2
) AS crash_free_users_rate,
COUNT(DISTINCT user.id) AS total_users
FROM `project.firebase_crashlytics.table_YYYYMMDD`
WHERE DATE(_PARTITIONTIME) >= DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY)
GROUP BY app_version, platform
ORDER BY app_version DESC
From BigQuery, pull data into Grafana via the BigQuery Data Source plugin and build needed visualizations.
Important Note: Users vs Sessions
Firebase counts Crash-Free Sessions Rate by default. Sentry counts Users Rate. These are different numbers.
If one user opened the app 10 times and crashed in one session:
- Sessions Rate: 90% crash-free sessions (1 of 10 sessions with crash)
- Users Rate: 0% crash-free users for that user
Users Rate is stricter and more honest for UX. Sessions Rate is easier for trend monitoring.
Dashboard Layout
┌─────────────────────────────────────────────────────────────────┐
│ Crash-Free Users Rate [last 7d] [last 30d] [custom] │
├──────────────────────────┬──────────────────────────────────────┤
│ Timeseries: │ By Version: │
│ v2.3.1 vs v2.3.0 │ v2.3.1: 99.4% (12,340 users) │
│ [graph] │ v2.3.0: 98.9% (45,120 users) │
│ │ v2.2.8: 99.1% (8,230 users) │
├──────────────────────────┼──────────────────────────────────────┤
│ By Platform: │ By OS Version: │
│ iOS: 99.5% │ Android 13: 99.6% │
│ Android: 98.9% │ Android 11: 98.4% ← anomaly │
│ │ iOS 17: 99.7% │
│ │ iOS 15: 99.2% │
├──────────────────────────┴──────────────────────────────────────┤
│ Top Crash Issues (last 24h): │
│ 1. NullPointerException in CartViewModel [+340% vs yesterday] │
│ 2. OutOfMemoryError in ImageLoader │
└─────────────────────────────────────────────────────────────────┘
The red anomaly on Android 11 above is a real pattern. Often linked to a bug in that OS version's system library that the app triggers.
What We Do
- Determine the data source (Sentry / Datadog / Firebase+BigQuery)
- Build a dashboard with drill-down by version, platform, OS, device
- Set up comparison widgets to compare releases
- Add alerts for drops below threshold (e.g., < 99%)
- Create Slack digest with daily Crash-Free Rate report
Timeline
Dashboard in Sentry or Datadog: 4–8 hours. Firebase + BigQuery + Grafana: 1–2 days. Pricing is calculated individually.







