FunnelHound / Guides / Analytics Reports API

App Store Connect Analytics Reports API: every report, every call

The Analytics Reports API is how App Analytics numbers (impressions, page views, downloads, installs, deletions, sessions, crashes) leave App Store Connect without a browser. It is built from four objects: a request you create once per app, the reports Apple generates for it, the dated instances of each report, and the segments of each instance, each one a URL to a gzip CSV. Four GETs after one POST, and a 48-hour wait the first time.

analyticsReportRequest one per app · accessType ONGOING or ONE_TIME_SNAPSHOT analyticsReport Discovery and Engagement · APP_STORE_ENGAGEMENT analyticsReportInstance granularity DAILY · processingDate 2026-10-30 analyticsReportSegment url · checksum · sizeInBytes → gzip CSV
Each box lists the one inside it. The CSV is at the bottom of the nest; everything above it is addressing.

Before the first call

You need an API key with a role that can see App Analytics (Developer is enough, Finance alone is not), the app's numeric ID from GET /v1/apps, and a signed ES256 token in the Authorization: Bearer header. The token recipe is in the Python guide; everything below assumes it is in $TOKEN.

Call 1: create the request

POST https://api.appstoreconnect.apple.com/v1/analyticsReportRequests
{
  "data": {
    "type": "analyticsReportRequests",
    "attributes": { "accessType": "ONGOING" },
    "relationships": {
      "app": { "data": { "type": "apps", "id": "6793297146" } }
    }
  }
}

Call 2: list the reports

GET /v1/analyticsReportRequests/{requestId}/reports?filter[category]=APP_STORE_ENGAGEMENT

Each report has a name and a category. The five categories, and the reports inside them that matter for a store funnel:

CategoryReportWhat it holdsFunnel stage
APP_STORE_ENGAGEMENTApp Store Discovery and EngagementImpressions and product page views by source type, page type, device, territory; counts and unique countsImpressions, page views
APP_STORE_ENGAGEMENTApp Store DownloadsFirst-time downloads, redownloads, updates, by source and territoryInstalls
APP_STORE_ENGAGEMENTApp Store Installation and DeletionInstallations and deletions per day, by device and territoryDeletions
APP_STORE_ENGAGEMENTApp Store Pre-ordersPre-order starts and cancellationsLaunch week
COMMERCEApp Store PurchasesPurchases, proceeds, paying users, by product and territoryPurchases
APP_USAGEApp Sessions, App CrashesSessions, active devices, crash countsRetention signals
FRAMEWORK_USAGEvariousWhich Apple frameworks your binary callsNot a funnel report
PERFORMANCEvariousLaunch time, hang rate, disk writes and similarNot a funnel report

Many reports exist in a Standard and a Detailed variant. Detailed adds dimensions (page title, source info, platform version) and multiplies the row count. Start with Standard; move to Detailed only when a question needs the extra column.

Call 3: list the instances

GET /v1/analyticsReports/{reportId}/instances?filter[granularity]=DAILY&filter[processingDate]=2026-10-30

Call 4: list the segments and download

GET /v1/analyticsReportInstances/{instanceId}/segments
→ { "attributes": { "url": "https://…", "checksum": "…", "sizeInBytes": 18244 } }

curl -sL "$URL" | gunzip > discovery-2026-10-30.csv

The columns that build a funnel

Date App Apple Id Event Source Type Device Territory Counts Unique 2026-10-30 6793297146 Impression App Store Search iPhone US 812 634 2026-10-30 6793297146 Impression App Store Browse iPhone US 140 121 2026-10-30 6793297146 Page View App Store Search iPhone US 71 66 2026-10-30 6793297146 Page View Web Referrer iPhone DE 9 9 Sum Counts per Event per day. Unique Counts answer "how many devices"; Counts answer "how many times".
The Discovery and Engagement report, trimmed. Two events, one date, and you have the top of the funnel by source.

All App Store engagement reports count every device. Usage and purchase reports count only users who opted in to share analytics with developers, the gap described in the opt-in data guide. Dividing an opt-in number by an all-devices number produces a rate that is quietly too low.

Operational rules

Reading this without writing it

FunnelHound is this reference compiled into an app: it creates the ONGOING request for each app, walks reports, instances and segments on your iPhone, gunzips the CSVs on the device, and draws Impression and Page View events, downloads, deletions and purchases as one funnel. The 48-hour wait is the only thing it cannot remove, which is why a fresh connection shows a waiting state instead of zeros.

Four calls, zero code

Connect an API key and FunnelHound runs the whole Analytics Reports chain for every app on the account, on your phone, every day. Impressions through purchases, with deletions and milestones on the same chart.

Get FunnelHound

Share this on X

Data notes: endpoints, access types, categories and granularities follow Apple's App Store Connect API documentation (Analytics section) as of 2026. Report names and the columns listed are the ones FunnelHound parses from live CSVs; Apple adds columns and reports over time, so treat the column lists as a starting point and read the header row of your own files. Sample rows are illustrative, 6793297146 is FunnelHound's App Store ID.