How do you analyze App Store and Google Play data in Metabase?
Apple and Google each report their own store, in their own shapes, using their own vocabulary — and neither console will ever show you both. A unified install-to-proceeds view across stores only exists if you build it. In Metabase, that means landing both stores' report files in a SQL warehouse under one model — daily store metrics, subscriptions, and quality — and then, because the data is finally in a warehouse, joining it to ad spend and in-app behavior, which no store console can do.
dbt_app_reporting are the shortcut. Whichever route you take, name your install definition before you put both stores on one chart.Which tools does this cover?
- App Store Connect — daily store analytics rows, downloads and redownloads by source type, product page views and impressions, purchases and proceeds
- Google Play Console — daily store report rows, store listing visitors and acquisitions, installs and uninstalls by dimension, earnings and refunds
The stores are only the acquisition end of the mobile stack. For the pieces on either side, see RevenueCat for cross-store subscription revenue normalized into one subscriber model, AppsFlyer for install attribution and campaign-level spend, and Amplitude for what people do inside the app once they're there.
What is the shared app store data model?
Three tables carry both stores. Each keeps a store column so Apple and Play rows coexist, and store-specific columns stay store-specific rather than being forced into a fake shared name.
| Table | Grain | Carries |
|---|---|---|
app_store_daily_metrics | One row per day per app per store per dimension slice (country, device, source) | Apple: impressions, product page views, first-time downloads, redownloads, units, sales and proceeds. Play: store listing visitors and acquisitions, device and user installs, uninstalls, proceeds. The acquisition and money core. |
app_store_subscriptions | One row per day per app per subscription product | Active subscriptions, new subscriptions, cancellations, renewals, trial starts, proceeds. Apple adds product IDs; Play adds base plan IDs. |
app_store_quality | One row per day per app per version | Apple: sessions, crashes, crash rate, average rating, rating count. Play: daily crashes, ANRs, average rating. Read against install growth, never alone. |
Modeling rules that save arguments later:
- Keep Apple's first-time downloads and redownloads in separate columns. Conflating them inflates acquisition and hides a retention problem.
- Pick one Play install definition and document it.
daily_device_installs,daily_user_installs,install_events, andactive_device_installsall exist and all mean different things. - Never sum Apple's Analytics Reports revenue with Sales & Trends or Finance report revenue. They are different pipelines with genuinely different numbers — pick one for the revenue card and label it.
- Normalize Play earnings to one reporting currency in the model using the
currency_conversion_ratecolumn, and keep refunds as the negative rows they arrive as, reporting gross and net separately. - Derive commission from proceeds versus sales rather than the headline rate. The 15% and 30% tiers blend, so the effective platform fee rate rarely matches either.
How do you connect app store data to Metabase?
Metabase reads SQL databases and warehouses, or CSVs uploaded through the CLI — so every route below is really a question of who runs the export.
- Scheduled export route — the honest baseline. For Apple, script the four-hop Analytics Reports flow: POST an
ONGOINGreport request, wait one to two days for first generation, list instances by granularity, download and gunzip the tab-delimited segments. For Play, copy the current month'sstats/andearnings/files out ofgs://pubsite_prod_rev_<developer-id>withgcloud storage(gsutilis deprecated), then append and dedupe on date plus dimension. - Connector route — Fivetran has official connectors for both stores, with
fivetran/dbt_apple_storeandfivetran/dbt_google_playmodeling each, andfivetran/dbt_app_reportingunioning them into cross-store models. BigQuery Data Transfer Service also offers a Play connector if BigQuery is your warehouse. Airbyte is not a path here: its App Store source was deprecated in 2024 and it has no official Play source. - CLI route for a first look — download a month of report files by hand and load them with
mb upload csv. Good for proving a dashboard is worth building; not good as a standing pipeline, because both stores restate recent data and Play rewrites the current month's file daily.
There is no MCP route worth recommending on either store. Apple has no official server and the most-cited community one is archived; Play's community servers wrap the Developer API and cannot see the bulk statistics or earnings reports where installs and revenue actually live.
What can you analyze across both stores?
- App store conversion rate— Apple's product page views to first-time downloads, Play's store listing visitors to acquisitions. Same question, two vocabularies; define each once.
- Platform fee rate— effective commission derived from proceeds against sales, per store and per month.
- Conversion rate — the generic funnel-step pattern the store metrics specialize; useful when you extend the funnel past the install with your own data.
- Churn rate — cancellations over active subscriptions, per store product.
- MRR and ARPU — recurring revenue and revenue per user, cleanest when subscriptions come through RevenueCat rather than two report formats.
- LTV — only meaningful once acquisition cost from attribution sits next to store proceeds in the same warehouse.
- Net install growth — installs against uninstalls, the line acquisition dashboards usually leave off. Play reports uninstalls; Apple does not.
- Quality against growth — crash rate and ANR rate plotted on the same timeline as installs and ratings, so a release regression shows up as the acquisition dip it causes.
Which dashboards should you build?
- App store performance — the cross-store home: impressions and visitors, conversion, installs, proceeds, by country and store.
- Subscription analytics — starts, renewals, cancellations, and trial-to-paid by product.
- Product retention — what happens after the install, from your own event data rather than the stores.
- MRR and churn & retention — the subscription-business view, once store subscriptions are normalized.
Common mistakes
Related
Analytics
Integrations
Dashboards
FAQ
Can Metabase pull data from App Store Connect or Google Play?
mb upload csv). The store data gets there first: Apple's Analytics Reports API generates gzipped tab-delimited segments you download on a schedule, and Google Play writes monthly CSVs into a Cloud Storage bucket you copy with gcloud storage. Land both in a warehouse and every dashboard afterwards is ordinary SQL.Is there an official MCP server for either store?
JoshuaRileyDev/app-store-connect-mcp-server) is archived with no release since September 2025; maintained community alternatives such as SardorbekR/appstore-connect-mcp and TrialAndErrorAI/appstore-connect-mcp do cover the Analytics Reports flow but are unaffiliated, and one npm name collides with an unrelated repo. For Play, the community servers wrap the Play Developer API — releases, listings, reviews, purchase status — and cannot reach the bulk statistics or earnings reports at all, so an MCP route wouldn't get you installs or revenue even if you trusted it. Scheduled exports you own are the dependable route on both stores.Why is Apple's export so much work compared to a normal API?
Which API returns Google Play installs and revenue?
stats/ and earnings/ in a Cloud Storage bucket (gs://pubsite_prod_rev_<developer-id>). There is no single API that returns Play revenue. See the Google Play guide for the copy-and-load script.Can I compare Apple downloads and Play installs directly?
daily_device_installs, daily_user_installs, install_events, active_device_installs — that measure genuinely different things. Pick the closest pair, name the two columns explicitly in the model, and put the caveat on the card. This is the number-one reason cross-store dashboards get argued with. Track the funnel step itself as app store conversion rate, defined once per store.What is the least-effort way to get both stores in a warehouse?
fivetran/dbt_apple_store, fivetran/dbt_google_play, and fivetran/dbt_app_reporting, which unions the two into cross-store models. Airbyte is not an option here — its App Store source was deprecated in 2024 and it has no official Play source. Rolling your own is entirely doable, it is just the async flow plus a scheduled bucket copy.