Skip to main content
Glama
MCP Apple Ads

MCP Apple Ads

by mgcrea

Apple Ads: Get Report

apple_ads_get_report
Read-only

Fetch 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

NameRequiredDescriptionDefault
levelYesWhat each row is. "search_term" reports the real queries people typed, which is where wasted spend shows up; "keyword" reports what you bid on.
limitNoRows to request from Apple (1-1000).
offsetNoRows to skip, for paging. The response's `pagination` block says how many exist.
endDateYesLast day of the range, inclusive, YYYY-MM-DD.
maxRowsNoCap on rows INLINED in the response. Never trims a file written to savePath.
savePathNoAbsolute 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.
timeZoneNoORTZ is the ad account's own timezone and is required for search_term reports.ORTZ
adGroupIdNoRestrict the report to one ad group.
startDateYesFirst day of the range, YYYY-MM-DD.
campaignIdNoRestrict the report to one campaign.
adAccountIdNoThe 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.
granularityNoOmit 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.
fullMetadataNoReturn every metadata field per row instead of the identifying subset. Needed for the targeting projection; costs a lot of tokens on a wide report.
includeGranularNoInclude 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.

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds useful cost/size context (per-period rows are 'much larger', a 90-day daily report should be written to file), but says nothing about error behavior, empty results, or how accounts/permissions affect the call. Solid value, not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with what the tool returns, then default behavior, then the large-report escape hatch. Every sentence carries decision-relevant information with no padding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 14-parameter, no-output-schema analytics tool, it covers what comes back, the default granularity, and the big-report pattern. Minor gaps remain around paging behavior at scale and handling of missing accounts, but the fully documented schema fills most of that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3; the description earns an extra point by explaining the interaction between savePath and maxRows (the file always holds the full report, trims apply only to the inlined copy) — a non-obvious relationship that the schema states but the description makes actionable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names the specific metrics returned (impressions, taps, installs, spend, and rates) and the scope ('any level of the account'), then explicitly contrasts with the list tools that 'return configuration only' — an agent can route correctly without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives clear operational guidance: defaults return totals and 'answer most questions', per-period rows are opt-in, and wide reports should go through savePath rather than a raised maxRows. It does not enumerate specific sibling alternatives by name beyond 'the list tools', which keeps it short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.