Dashboard

What goes in an app store performance dashboard?

An app store dashboard joins two things the stores report separately: acquisition (impressions, product page views, installs) and money (proceeds after commission, subscription starts and renewals, refunds). Both sides arrive as pre-aggregated daily reports, which shapes everything you can ask of them — there are no user-level joins here.

For: Mobile product managers, growth teams, and app finance. Refresh: daily, with a 1-3 day lag before figures settle. Source: modeled tables in a Metabase-connected database.

Which cards belong on this dashboard?

  • Impressions to product page views to installs, with the conversion rate at each step
  • Install trend by store, week over week
  • Installs by country, top 20
  • Proceeds after store commission, by month and store
  • Proceeds per install
  • Subscription starts, renewals, and cancellations
  • Refund rate on paid downloads and in-app purchases
  • Crash rate against the install trend
  • Average rating and rating volume by version

What data does this dashboard need?

  • A daily metrics table by store, country, and app version: impressions, product page views, installs, proceeds
  • A subscription table with starts, renewals, cancellations, and trial conversions at daily grain
  • Refunds reported separately from gross sales, dated when the store processed them
  • Crash counts and sessions from your own telemetry, since store crash reporting is opt-in and partial
  • Rating counts and averages, versioned so a release's effect is visible

How do you build it?

  1. Land the source data in a database — via a managed connector, scheduled API pulls, or a CSV loaded with mb upload csv — keeping raw IDs, timestamps, currencies, and fee lines intact.
  2. Build models at the grain this dashboard needs, with gross, fee, tax, and net amounts as explicit columns rather than per-card arithmetic.
  3. Create one saved question per card and certify the shared models so every dashboard downstream inherits the same definitions.
  4. Add dashboard filters for Date range, store (App Store / Google Play), country, app version, acquisition source type.
  5. Show data freshness on the dashboard — these sources lag, and every viewer should see by how much.

Example card SQL

Weekly acquisition funnel and proceeds per install by storePostgreSQL
WITH weekly AS (
  SELECT
    date_trunc('week', d.report_date)::date AS week,
    d.store,
    SUM(d.impressions) AS impressions,
    SUM(d.product_page_views) AS page_views,
    SUM(d.installs) AS installs,
    SUM(d.proceeds_usd) AS proceeds
  FROM app_store_daily_metrics d
  -- The most recent days are still restating; cut them out rather
  -- than letting a partial week read as a decline.
  WHERE d.report_date >= CURRENT_DATE - INTERVAL '84 days'
    AND d.report_date < CURRENT_DATE - INTERVAL '3 days'
  GROUP BY 1, 2
), subs AS (
  SELECT
    date_trunc('week', s.report_date)::date AS week,
    s.store,
    SUM(s.new_subscriptions) AS new_subs,
    SUM(s.renewals) AS renewals,
    SUM(s.cancellations) AS cancellations
  FROM app_store_subscriptions s
  GROUP BY 1, 2
)
SELECT
  w.week,
  w.store,
  w.impressions,
  w.page_views,
  w.installs,
  ROUND(
    100.0 * w.page_views / NULLIF(w.impressions, 0), 1
  ) AS impression_to_page_view_pct,
  ROUND(
    100.0 * w.installs / NULLIF(w.page_views, 0), 1
  ) AS page_view_to_install_pct,
  ROUND(w.proceeds, 2) AS proceeds,
  ROUND(w.proceeds / NULLIF(w.installs, 0), 2) AS proceeds_per_install,
  s.new_subs,
  s.renewals,
  s.cancellations,
  ROUND(
    100.0 * (
      w.installs::numeric
      / NULLIF(LAG(w.installs) OVER (
          PARTITION BY w.store ORDER BY w.week
        ), 0) - 1
    ), 1
  ) AS installs_wow_pct
FROM weekly w
LEFT JOIN subs s ON s.week = w.week AND s.store = w.store
ORDER BY w.week DESC, w.store;

Dashboards

Integrations

Metrics

Analytics

FAQ

Why does last week's data keep changing?
App Store Connect and Google Play both restate recent days. Figures settle over roughly 1-3 days, longer around month end and for proceeds, which also move when refunds post. Exclude the last few days from trend cards, or label them as provisional — otherwise every Monday looks like a crash.
Can I join store installs to my own user analytics?
Not at the user level. Both stores deliver pre-aggregated reports by day, country, device, and source — there is no identifier that links an install row to a person. You can compare aggregate installs against your own first-open counts to sanity-check the funnel, but any card implying a per-user join between store data and product analytics is fabricating it.
Should the revenue card show sales or proceeds?
Proceeds. Sales is the price customers paid; proceeds is what the store pays you after commission (30%, or 15% under the small-business and after-first-year subscription rates) and after local taxes the store remits. Mixing the two overstates revenue by up to a third. Keep sales on the dashboard if you want the customer-facing number, clearly labeled, and derive conversion rate and app store conversion rate from the acquisition side rather than from revenue.