Discover Keywords
discover_keywordsTerms an app could be tracking but is not, merged from every source and each labelled with where it came from: what tracked competitors rank for, what the store's similar apps rank for, what those competitors put in their own titles and subtitles, what the store's own mining surfaced, and — reading the listing cold — what the app's own title, subtitle and description suggest. The last is the only source that works on an app added minutes ago; listing is the only one that can surface a phrase nobody has ranked for yet, and it offers a phrase only when two or more rivals publish it and Apple reports somebody searching it. Pass contains to also match terms already in AppTail's database. Already-tracked and already-dismissed terms are never returned. This is a list of candidates, not a measure of coverage: for how much of a niche's vocabulary the account is missing, and which holes matter most, call get_landscape and read term_gap. Discovery can persist shared suggested keyword records, cache generated suggestions, and queue background popularity collection. It does not add those terms to account tracking.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Max suggestions, most-searched first. Default 60, capped at 200. The answer always says how many there were. | |
| app_id | Yes | Apptail app id to suggest for. get_account for the user's own apps. Suggestions are derived from this app's listing, its rivals and its neighbours, so they are only meaningful for the app they were asked about. | |
| source | No | Which sources to read. Omit for all five that need no argument — `competitors`, `similar`, `listing`, `store`, `ai`. `corpus` is a text match against terms AppTail already holds and does nothing without `contains`, which is why "all" does not silently include it. An unknown name is refused rather than ignored. | |
| country | No | Storefront to suggest for (e.g. US, DE). Defaults to the app's primary storefront — which is only one of them: an app localized into several languages is searched for in several storefronts, so call once per entry in get_app's `listing_storefronts`. Discovery is per storefront and never a blend: a German term is not a translation of an English one — `spritverbrauch` beats `kraftstoffverbrauch` by a margin no dictionary would tell you. | |
| contains | No | Only terms containing this text. With `source: ["corpus"]` this is a search of AppTail's keyword database. Note it searches terms AppTail holds, not the App Store: a phrase nobody has ever tracked returns nothing, and to start tracking a brand-new term you pass it straight to add_keywords. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| count | Yes | Suggestions returned. | |
| total | Yes | Suggestions found before the cap. | |
| app_id | Yes | The app these suggestions are for. | |
| country | Yes | The storefront they apply to. | |
| sources | Yes | Sources actually read. A source not listed here was not consulted. | |
| app_name | No | Its name. | |
| by_source | Yes | How many suggestions each source produced, keyed by source name; a source with none is absent. **Read this before reporting an empty answer.** Five of the six need something on file — rivals, the store's similar-apps list, a mining job that runs fortnightly — so zero beside `competitors` is a fact about the account, not about the niche, and the fix is add_competitors rather than a different question. | |
| truncated | Yes | True when `count` is below `total`. Say the list is partial rather than presenting it as everything worth tracking. | |
| console_url | No | The app's keyword screen in the console, where the same list can be reviewed and added by hand. | |
| suggestions | Yes | The terms, most-searched first. Add them with add_keywords using their `keyword_id`, never their text. |