Apple Ads: Get Report
apple_ads_get_reportFetch Apple Ads performance reports with impressions, taps, installs, spend, and conversion rates by campaign, ad group, keyword, search term, or ad, with date ranges and totals.
Instructions
The performance numbers: impressions, taps, installs, spend, and the rates between them, for any level of the account. This is where spend and conversion live — the list tools return configuration only. Returns TOTALS per row by default, which answers most questions; per-period rows are opt-in and much larger. For a wide report, pass savePath and read the file rather than raising maxRows.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"level": "<level>",
"startDate": "<startDate>",
"endDate": "<endDate>"
},
"name": "apple_ads_get_report"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| level | Yes | What each row is. "search_term" reports the real queries people typed, which is where wasted spend shows up; "keyword" reports what you bid on. | |
| limit | No | Rows to request from Apple (1-1000). | |
| offset | No | Rows to skip, for paging. The response's `pagination` block says how many exist. | |
| endDate | Yes | Last day of the range, inclusive, YYYY-MM-DD. | |
| maxRows | No | Cap on rows INLINED in the response. Never trims a file written to savePath. | |
| savePath | No | Absolute path to also write this report to, as pretty-printed JSON. The saved file holds the FULL report — `maxRows` and `includeGranular` trim only the copy inlined in this response, never the file. For a 90-day daily report, save it and read the file with a script rather than raising maxRows. | |
| timeZone | No | ORTZ is the ad account's own timezone and is required for search_term reports. | ORTZ |
| adGroupId | No | Restrict the report to one ad group. | |
| startDate | Yes | First day of the range, YYYY-MM-DD. | |
| campaignId | No | Restrict the report to one campaign. | |
| adAccountId | No | The ad account to act on. Omit it when you have exactly one or APPLE_ADS_AD_ACCOUNT_ID is set — it is resolved automatically. List them with apple_ads_list_accounts. | |
| granularity | No | Omit for totals over the whole range — the default, and much smaller. Apple's windows: HOURLY needs a start within 7 days (and is unavailable for search_term and ad), DAILY within 90 days, WEEKLY within 365 days with an end 14+ days old, MONTHLY with an end 90+ days old. | |
| fullMetadata | No | Return every metadata field per row instead of the identifying subset. Needed for the targeting projection; costs a lot of tokens on a wide report. | |
| includeGranular | No | Include the per-period rows as well as the totals. Off by default because this is the expensive part: a 90-day DAILY report over 200 keywords is ~18,000 metric objects. Requires granularity to be set to mean anything. |