Apple App Store model

Usage and stability

Sessions, time in app and crashes per app version: App Analytics' Usage and Crashes views side by side, so a release that crashes more per session shows up the day it ships.

Grain
one row per day x app x app version x device
Built from
  1. 2
    Raw tables
  2. 2
    Staging
  3. 1
    Core
  4. 1
    Analytics
Reads from Apple App Store
app_crashesapp_sessions
Ships as
Weld and dbt SQL, open source on GitHub
core.app_store_connect.usage_and_stability
1-- core.app_store_connect.usage_and_stability
2-- Sessions, time in app and crashes per app version: App Analytics' Usage and
3-- Crashes views side by side, so a release that crashes more per session shows up
4-- the day it ships.
5--
6-- Grain: one row per day x app x app version x device.
7-- Depends on: staging.app_store_connect.sessions, staging.app_store_connect.crashes
8--
9-- Rates are computed from summed counts in the same row. unique_devices is not
10-- carried: Apple counts it per row of its own file and it cannot be added up.
11-- Both inputs cover opted-in users only, so crashes per session compares like with
12-- like.
13
14WITH sessions AS (
15    SELECT
16        date_day,
17        app_apple_id,
18        ANY_VALUE(app_name)         AS app_name,
19        app_version,
20        device,
21        SUM(sessions)               AS sessions,
22        SUM(total_session_seconds)  AS total_session_seconds
23    FROM {{staging.app_store_connect.sessions}}
24    GROUP BY date_day, app_apple_id, app_version, device
25),
26
27crashes AS (
28    SELECT
29        date_day,
30        app_apple_id,
31        ANY_VALUE(app_name)         AS app_name,
32        app_version,
33        device,
34        SUM(crashes)                AS crashes
35    FROM {{staging.app_store_connect.crashes}}
36    GROUP BY date_day, app_apple_id, app_version, device
37)
38
39SELECT
40    COALESCE(s.date_day, c.date_day)            AS date_day,

This 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.

Rates are computed from summed counts in the same row. unique_devices is not carried: Apple counts it per row of its own file and it cannot be added up. Both inputs cover opted-in users only, so crashes per session compares like with like.

Raw tables it reads

  • raw.app_store_connect.app_crashes
  • raw.app_store_connect.app_sessions

Put Apple App Store in front
of your agents.

Connect Apple App Store, deploy the models, and ask questions in Claude, Cursor or ChatGPT. Free for 14 days, no credit card.