Managing Reports
Retrieve performance data for campaigns, ad groups, ads, keywords, and search terms.
Overview
All report endpoints follow a shared POST /query pattern. You parameterize each request with promotedObjectType: either apps for App Store app campaigns or business-brands for Apple Maps campaigns. The request body, response objects, available groupBy dimensions, and supported options differ between the two promoted object types.
Choose a Reporting Endpoint
Query one of the following endpoints based on your promoted object type and the entity level you want to report on:
Method | Path | Description |
|---|---|---|
|
| Get App Campaign Reports retrieves App Store campaign performance data. |
|
| Get App Ad Group Reports retrieves App Store ad group performance data. |
|
| Get App Ad Reports retrieves App Store ad performance data. |
|
| Get App Keyword Reports retrieves App Store keyword performance data. |
|
| Get App Search Term Reports retrieves App Store search term performance data. |
|
| Get Brand Campaign Reports retrieves Apple Maps campaign performance data. |
|
| Get Brand Ad Group Reports retrieves Apple Maps ad group performance data. |
|
| Get Brand Ad Reports retrieves Apple Maps ad performance data. |
|
| Get Brand Keyword Reports retrieves Apple Maps keyword performance data. |
|
| Get Brand Search Term Reports retrieves Apple Maps search term performance data. |
Build the Request
Every report request uses either AppsReportingRequest or BrandsReportingRequest as the request body. Both share the same top-level fields:
The
timeRangefield defines the reporting window via TimeRange:startdate,enddate,timeZone(UTCorORTZ), and optionalgranularity(HOURLY,DAILY,WEEKLY,MONTHLY).The
filtersfield is an array of Filter conditions that narrow results by field, operator, and value.The
sortingfield is an array of Sorting objects that order rows by field and direction.The
paginationfield uses RequestPagination, withoffsetandpageSize(maximum 5000, default 100).The
fieldsfield is an optional list of field names to return. Omit it to receive all fields.The
groupByfield is an optional dimensional breakdown. Supported values differ between Apps and Brands, and additional restrictions apply at the keyword and search term entity levels. When you omitgroupBy, the response returns one aggregate row per entity with no dimensional breakdown. We recommend providing at least onegroupByvalue to get meaningful segmented data in most reporting use cases.The
optionsfield sets row inclusion flags via AppsOptions or BrandsOptions.
Read the Response
All report responses share the same envelope: a result object containing a rows array of report rows and a summary.grandTotal object, plus a pagination object and an error field. Each row contains:
The
totalMetricsfield holds aggregate metrics for the row over the full time range.The
granularMetricsfield breaks out metrics by the requestedgranularityperiod, and it appears only when you specifygranularityin the request.The
metadatafield holds entity attributes (campaign name, status, targeting, and so on) plus anygroupBydimension values applied to the row.
When you include GRAND_TOTAL in options.includeRows, the response also includes a summary row with totals across all result rows.
Apply Granularity Constraints
Granularity is an optional time-series breakdown that applies to granularMetrics. The following constraints apply to all entities and both promoted object types unless noted:
Granularity | Constraint |
|---|---|
| Date range must start within the last 7 days. Ad-level and search term-level reports don’t support it. |
| Date range start must be within the last 90 days. Date range must be greater than one day. |
| Date range start within the last 365 days. End date must be at least 14 days in the past. |
| End date must be at least 90 days in the past. |
To request a single day of data, omit granularity entirely. For a single-day request, the response returns results in totalMetrics only, since there’s no granularMetrics breakdown to compute.
Compare Apps and Brands Reporting
Apps and Brands campaigns measure different coverage: app installs and engagement versus brand visibility and map interactions. Their reporting reflects this distinction. The two promoted object types use separate request and response objects and differ in the following ways:
Feature | Apps ( | Brands ( |
|---|---|---|
Request object | ||
Campaign/ad-group |
|
|
Keyword |
|
|
Search term |
|
|
Ad |
|
|
| Supported | Not supported |
Creative metadata | Appsreportingcreative: includes | Brandsreportingcreative: includes |
Location-level report | Not available | Not available |
Search term timezone |
|
|
Include Additional Rows
The options.includeRows field controls which additional rows appear in the response:
The
GRAND_TOTALvalue adds a summary row with aggregate totals across all result rows. Both Apps and Brands support it.The
EMPTY_METRICSvalue includes rows for entities that have no metric activity during the requested period. Only Apps supports it, and you can’t combine it withgroupBy.