Skip to main content
Glama

Apple Ads search terms

get_search_terms
Read-onlyIdempotent

Retrieves the real App Store search terms from Apple Ads that showed your app, per country, to find keyword ideas. Call without a market for a summary or with a market for full rows.

Instructions

REAL search terms people typed in the App Store that showed the owner's own app in its Apple Ads campaigns, per country, as keyword ideas. Without market: a summary of the markets with the most impressions (totals, lowVolume, termCount, avoidedCount, the top 5 terms); call again with market for that market's full rows: impressions, taps, installs, ttr (taps / impressions), the bid keyword and match type that triggered each term, tracked (a keyword already has this phrase in that market) and avoided (on the don't-target list). lowVolume totals the terms Apple hides for privacy (too few searches to name). Cached by the app: a period the owner loaded once is refreshed at most once a day while Apple Ads is connected (weekly while no campaign promotes the app); fetchedAt / stale / nextRefreshAt say how old it is, warning names campaigns that failed. state: ready, no_campaigns (no Apple Ads campaign promotes the app), not_loaded (the owner has not loaded this period in the app), not_connected (connect Apple Ads first) or unsupported (Google Play, rivals, app ideas). To track a term, call add_keywords with market set to its country (localize true when the market's search language isn't English).

Input Schema

NameRequiredDescriptionDefault
daysNoPeriod in days (default 30).
limitNoWith market: most terms, most impressions first (default 50).
marketNoMarket = ISO 3166-1 alpha-2 country code, e.g. "us", "de".
projectIdYesProject id (from get_overview).
includeAvoidedNoWith market: include terms on the don't-target list (default false).

Schema Changelog

Changes observed during successful MCP inspections.

  1. Addedv0.2.3

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare this read-only, idempotent and non-destructive, but the description adds substantial behavior the annotations cannot convey: app-scoped caching with at most daily refresh (weekly when no campaign promotes the app), staleness surfaced via fetchedAt/stale/nextRefreshAt, a warning listing failed campaigns, and privacy-driven suppression of low-volume terms. It also enumerates the full state machine (ready, no_campaigns, not_loaded, not_connected, unsupported), which is exactly the kind of context a calling agent needs.

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

Conciseness4/5

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

The definition is front-loaded with the core purpose, then proceeds in a logical order: mode behavior, returned fields, privacy handling, caching, states, and next action. It is long and the caching/state sentences are densely packed with parenthetical details, but nearly every clause carries information an agent would otherwise have to discover by trial.

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

Completeness5/5

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

With no output schema, the description carries the burden of explaining return values, and it does: field names with meanings (impressions, taps, installs, ttr formula, tracked, avoided, lowVolume, avoidedCount, termCount), plus caching and warning metadata. Combined with the state enum and the follow-up routing, an agent has everything needed to call this correctly and interpret the result.

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 the schema baseline is a 3, but the description goes further by explaining that market acts as a mode switch (summary vs. detailed rows) rather than just a filter, and that includeAvoided surfaces terms on the don't-target list. It also clarifies that limit applies 'with market' and that days defines the cached period. Only the exact interaction between days and the cache TTL could be stated more explicitly.

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?

The description opens with a precise verb+resource statement: real search terms typed in the App Store that surfaced the owner's app in their Apple Ads campaigns, per country. It distinguishes the two modes (summary without market, full rows with market) so an agent can tell exactly what it will get, and the title plus text make it clearly distinct from siblings like popular_searches or get_term_detail.

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

Usage Guidelines5/5

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

It explicitly states the two call patterns: without market returns a market summary (totals, lowVolume, termCount, avoidedCount, top 5), and 'call again with market for that market's full rows.' It also names the follow-up action (add_keywords with the term's country, localize true when the search language isn't English) and lists the states that gate usage (not_connected means connect Apple Ads first, unsupported means Google Play/rivals/app ideas).

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

Deploy Server

Other Tools