Google Play Console model
Stability by app version
Crashes and ANRs ("app not responding") per app version, against how many active devices run that version, so a bad release stands out against its install base.
- Grain
- one row per day x package x app version code
- Built from
- 2Raw tables
- 2Staging
- 1Core
- 1Analytics
- Reads from Google Play Console
- stats_crashes_app_versionstats_installs_app_version
- Ships as
- Weld and dbt SQL, open source on GitHub
core.google_play.stability_by_app_version
1-- core.google_play.stability_by_app_version
2-- Crashes and ANRs ("app not responding") per app version, against how many active
3-- devices run that version, so a bad release stands out against its install base.
4--
5-- Grain: one row per day x package x app version code.
6-- Depends on: staging.google_play.crashes_by_app_version,
7-- staging.google_play.installs_by_app_version
8--
9-- crashes_per_1000_active_installs is a ratio of the day's crashes to the devices
10-- with that version installed and active in the last 30 days. It is a trend
11-- indicator for comparing versions, not Android vitals' crash rate, which Google
12-- computes per daily active user and does not export.
13
14SELECT
15 COALESCE(c.date_day, i.date_day) AS date_day,
16 COALESCE(c.package_name, i.package_name) AS package_name,
17 COALESCE(c.app_version_code, i.app_version_code) AS app_version_code,
18 COALESCE(c.daily_crashes, 0) AS daily_crashes,
19 COALESCE(c.daily_anrs, 0) AS daily_anrs,
20 i.installs_on_active_devices,
21 i.daily_device_upgrades,
22 ROUND(SAFE_DIVIDE(c.daily_crashes, NULLIF(i.installs_on_active_devices, 0)) * 1000, 3)
23 AS crashes_per_1000_active_installs,
24 ROUND(SAFE_DIVIDE(c.daily_anrs, NULLIF(i.installs_on_active_devices, 0)) * 1000, 3)
25 AS anrs_per_1000_active_installs
26FROM {{staging.google_play.crashes_by_app_version}} c
27FULL OUTER JOIN {{staging.google_play.installs_by_app_version}} i
28 ON i.date_day = c.date_day
29 AND i.package_name = c.package_name
30 AND i.app_version_code = c.app_version_codeThis model and the 3 it depends on. Deploy them together; refs like {{staging.…}} resolve to the matching folders in Weld, and the dbt view uses source() and ref().
Notes
How it counts. And where it stops.
crashes_per_1000_active_installs is a ratio of the day's crashes to the devices with that version installed and active in the last 30 days. It is a trend indicator for comparing versions, not Android vitals' crash rate, which Google computes per daily active user and does not export.
Raw tables it reads
- raw.google_play.stats_crashes_app_version
- raw.google_play.stats_installs_app_version
More Google Play Console models
Put Google Play Console in front
of your agents.
Connect Google Play Console, deploy the models, and ask questions in Claude, Cursor or ChatGPT. Free for 14 days, no credit card.