{
  "markdown": "# @appfigures/cli\n\n[![npm version](https://img.shields.io/npm/v/@appfigures/cli)](https://www.npmjs.com/package/@appfigures/cli)\n[![MCP server](https://img.shields.io/badge/MCP-server-blue)](https://modelcontextprotocol.io)\n\nThe Appfigures CLI — query app metrics, reviews, and store data from your terminal.\n\nTry it now without installing:\n\n```sh\nnpx @appfigures/cli auth login\nnpx @appfigures/cli apps search \"youtube\"\n```\n\n## Install\n\n```sh\nnpm install -g @appfigures/cli\n```\n\nRequires Node.js 22+. Works with pnpm and yarn too.\n\n## Quick start\n\n```sh\nappfigures auth login\nappfigures --help\n```\n\nAlso available as `af` alias.\n\n## Authentication\n\n- **Log in yourself.** `af auth login --interactive` opens your browser in a guided flow; approve and paste the code back.\n- **Or let your agent guide you.** By default, `af auth login` prints an authorization URL — open it, approve, and finish with `af auth login --code <code>` using the code shown. An agent can drive this end to end. For unattended use, set `APPFIGURES_API_KEY` instead: create a token at [appfigures.com/developers/keys](https://appfigures.com/developers/keys) by clicking **Create a New Client**, then **Create Personal Access Token**.\n\nEither login saves the token to your OS credential manager (macOS Keychain, Windows Credential Manager, Linux Secret Service). See [Environment](#environment) for `APPFIGURES_API_KEY` and other overrides.\n\n## MCP server\n\n`af mcp` runs a local [Model Context Protocol](https://modelcontextprotocol.io) server over stdio, exposing the CLI's app-intelligence commands as MCP tools. Point any MCP client (Claude Code, Claude Desktop, Cursor, and others) at it to let an agent query app metrics, reviews, and store data directly.\n\nAdd it to your client's MCP config:\n\n```json\n{\n\t\"mcpServers\": {\n\t\t\"appfigures\": {\n\t\t\t\"command\": \"npx\",\n\t\t\t\"args\": [\"-y\", \"@appfigures/cli\", \"mcp\"]\n\t\t}\n\t}\n}\n```\n\nThe server signs in with your stored credentials, so run `af auth login` once first. For a headless setup, pass a token through the client's `env` instead:\n\n```json\n{\n\t\"mcpServers\": {\n\t\t\"appfigures\": {\n\t\t\t\"command\": \"npx\",\n\t\t\t\"args\": [\"-y\", \"@appfigures/cli\", \"mcp\"],\n\t\t\t\"env\": { \"APPFIGURES_API_KEY\": \"<your-token>\" }\n\t\t}\n\t}\n}\n```\n\nInstalled the CLI globally instead of running it through npx? Use `\"command\": \"af\"` with `\"args\": [\"mcp\"]`.\n\n**Claude Code.** Add it with one command:\n\n```sh\nclaude mcp add appfigures -- npx -y @appfigures/cli mcp\n```\n\nRun `af auth login` first to sign in, or append `--env APPFIGURES_API_KEY=<your-token>` for a headless setup.\n\n<!-- prettier-ignore-start -->\n<!-- BEGIN auto-generated COMMANDS -->\n## Commands\n\n### Apps\n\nFind apps and look up their identity. Other commands take the app IDs these return.\n\n| Command | Description |\n| ------- | ----------- |\n| <a href=\"#command-apps-search\"><code>af&nbsp;apps&nbsp;search</code></a> | Find apps by name or publisher. Returns one row per unified app. Default returns Apple and Google listings; pass `--all-stores` to include other storefronts. To filter apps by estimate values (e.g. apps with >100k downloads last month) use [`explorer list-products`](#command-explorer-list-products). For estimates broken down by time, country, or storefront, use [`metrics query`](#command-metrics-query) with datasets estimates.sales or estimates.revenue. |\n| <a href=\"#command-apps-tracked\"><code>af&nbsp;apps&nbsp;tracked</code></a> | List the apps your Appfigures account tracks. |\n| <a href=\"#command-apps-get\"><code>af&nbsp;apps&nbsp;get</code></a> | Get an app's record: basic metadata (name, developer, etc) and, if the user tracks it, what data they can access. Pass a product ID for one storefront; unified app ID for all storefronts together. |\n\n### Explorer\n\nSearch and analyze the full app catalog: millions of products across Apple, Google Play, Amazon, and other major stores, with 120+ fields spanning identity, storefront and country availability, categories, ratings, release dates, chart ranks, download and revenue estimates, SDK presence, demographics, and related apps.\n\n| Command | Description |\n| ------- | ----------- |\n| <a href=\"#command-explorer-list-products\"><code>af&nbsp;explorer&nbsp;list&#8209;products</code></a> | Read catalog fields for one app or many. Fields referenced by `query` or `sort` come back automatically; pass `--extra-fields` for more. Use `[\"match\",\"product_id\",<id>]` for a single app, or combine filters for population queries (e.g. iOS apps using Firebase with $1M+ US revenue). The 120+ fields span ranks, ratings, download and revenue estimates, SDKs, demographics, and more; query grammar and field list in [`docs get catalog_playbook`](#command-docs-get). |\n| <a href=\"#command-explorer-aggregate-products\"><code>af&nbsp;explorer&nbsp;aggregate&#8209;products</code></a> | Aggregate across the full catalog of millions of products across Apple, Google Play, Amazon, and other major stores: counts, averages, min/max, and histograms over any set of matching products. Uses the same query grammar as [`explorer list-products`](#command-explorer-list-products); returns aggregates, not product records. For market sizing, benchmarking, and segment analysis. |\n| <a href=\"#command-explorer-describe-fields\"><code>af&nbsp;explorer&nbsp;describe&#8209;fields</code></a> | List the catalog fields and the current user's access level for each. Search by keyword to find fields. Same field set [`explorer list-products`](#command-explorer-list-products) and [`explorer aggregate-products`](#command-explorer-aggregate-products) accept. |\n\n### Metrics\n\nQuery numeric datasets across dimensions.\n\n| Command | Description |\n| ------- | ----------- |\n| <a href=\"#command-metrics-query\"><code>af&nbsp;metrics&nbsp;query</code></a> | Query any numeric dataset for one or more apps. Optionally grouped by up to two dimensions, returned as a nested partition tree, not app records. Independently filterable by country, device type, and date range. `filterAppsBy*` options narrow the app set (by ID, storefront, source, or type); without one, a query covers every app the account tracks. |\n| <a href=\"#command-metrics-describe-datasets\"><code>af&nbsp;metrics&nbsp;describe&#8209;datasets</code></a> | List every numeric dataset [`metrics query`](#command-metrics-query) accepts, one row per dataset with its value type and whether it's limited to your own apps. |\n\n### Store\n\nApp store presence: listing content, category ranks, top charts, and featured placements.\n\n| Command | Description |\n| ------- | ----------- |\n| <a href=\"#command-store-app-ranks\"><code>af&nbsp;store&nbsp;app&#8209;ranks</code></a> | Trace rank history for one or more apps across countries, device types, category subtypes, and categories, as time-series positions with day-over-day deltas. |\n| <a href=\"#command-store-top-charts\"><code>af&nbsp;store&nbsp;top&#8209;charts</code></a> | List the top apps in a category chart for a given country and category, with current positions and day-over-day deltas. |\n| <a href=\"#command-store-categories\"><code>af&nbsp;store&nbsp;categories</code></a> | List every store category with its ID. Numeric category IDs required by [`store app-ranks --category-ids`](#command-store-app-ranks) and [`store top-charts --category-id`](#command-store-top-charts) are available here. |\n| <a href=\"#command-store-featured\"><code>af&nbsp;store&nbsp;featured</code></a> | List featured and editorial placements for an app or storefront product. Request 0 rows for summary stats only. |\n| <a href=\"#command-store-app-listing\"><code>af&nbsp;store&nbsp;app&#8209;listing</code></a> | Read the full store listing for one storefront: localized text (name, subtitle, description, release notes) plus screenshots, video, categories, monetization, supported devices, country availability, price, file size, and age rating. Takes a numeric product ID (one storefront at a time; a unified app has one product per storefront). One locale per request. |\n\n### Audience\n\nWho an app's users are and what else they use. Covers estimated age and gender, plus audience overlap with other apps.\n\n| Command | Description |\n| ------- | ----------- |\n| <a href=\"#command-audience-demographics\"><code>af&nbsp;audience&nbsp;demographics</code></a> | Read an app's audience demographics: the estimated age and gender breakdown. |\n| <a href=\"#command-audience-cross-usage\"><code>af&nbsp;audience&nbsp;cross&#8209;usage</code></a> | Find the apps that an app's users also use. |\n\n### Reviews\n\nSearch, summarize, and reply to iOS and Google Play app store reviews.\n\n| Command | Description |\n| ------- | ----------- |\n| <a href=\"#command-reviews-list\"><code>af&nbsp;reviews&nbsp;list</code></a> | Read individual reviews for one or more apps. Returns review text, star rating, country, and app version. Filterable by star rating, date range, country, version, and tracking relationship. |\n| <a href=\"#command-reviews-breakdown\"><code>af&nbsp;reviews&nbsp;breakdown</code></a> | Aggregate review counts for one or more apps, bucketed by dimension. Returns one count per dimension value, plus a global total across the matched set. |\n| <a href=\"#command-reviews-reply\"><code>af&nbsp;reviews&nbsp;reply</code></a> | Post or withdraw a developer response on a specific review. Pass `content` to post; pass `delete: true` to withdraw a previously-posted response. Returns the resulting state (`published`/`pending` for a post, `removed`/`removal_pending` for a withdrawal) along with the submitting account. |\n\n### Keywords\n\nKeyword visibility, rank tracking, and discovery across organic search (App Store, Google Play) and Apple Ads.\n\n| Command | Description |\n| ------- | ----------- |\n| <a href=\"#command-keywords-organic\"><code>af&nbsp;keywords&nbsp;organic</code></a> | Check the organic keywords one or more apps rank for, with position, popularity, and competitiveness. |\n| <a href=\"#command-keywords-paid\"><code>af&nbsp;keywords&nbsp;paid</code></a> | List the paid keywords one or more apps run ads on, with impression share and organic rank. |\n| <a href=\"#command-keywords-tracked-ranks\"><code>af&nbsp;keywords&nbsp;tracked&#8209;ranks</code></a> | View where all your tracked keywords rank for a single app+country combo, with each keyword's current position, movement since it last changed, starting position, popularity, and competitiveness. |\n| <a href=\"#command-keywords-tracked-trend\"><code>af&nbsp;keywords&nbsp;tracked&#8209;trend</code></a> | Trace how one tracked keyword's rank changes over time for a single app+country combo. Each point gives the rank and how many positions it moved since the one before. |\n| <a href=\"#command-keywords-suggestions\"><code>af&nbsp;keywords&nbsp;suggestions</code></a> | Discover keyword ideas to consider targeting for a single app+country combo, ranked by relevance to the app and including some drawn from apps you compete with. Each comes with its popularity, competitiveness, and the app's current rank. |\n| <a href=\"#command-keywords-ranking-apps\"><code>af&nbsp;keywords&nbsp;ranking&#8209;apps</code></a> | List the apps ranking for a specific keyword in organic search, plus the keyword's own popularity and competitiveness scores. |\n| <a href=\"#command-keywords-advertisers\"><code>af&nbsp;keywords&nbsp;advertisers</code></a> | List the apps advertising on a specific keyword, with each advertiser's impression share, organic rank, and how long they've been bidding. |\n| <a href=\"#command-keywords-related\"><code>af&nbsp;keywords&nbsp;related</code></a> | Find keywords related to a seed term for ASO research. Useful for finding alternatives with a similar audience that are more popular or less competitive. |\n| <a href=\"#command-keywords-tracked\"><code>af&nbsp;keywords&nbsp;tracked</code></a> | List tracked keywords with their opaque IDs. |\n| <a href=\"#command-keywords-track\"><code>af&nbsp;keywords&nbsp;track</code></a> | Track a keyword to monitor your app's hourly rank for it over time and get automatic alerts when its position moves. |\n| <a href=\"#command-keywords-untrack\"><code>af&nbsp;keywords&nbsp;untrack</code></a> | Stop tracking a keyword. |\n\n### Apple Ads\n\nManage your Apple Ads campaigns, ad groups, keywords, and performance.\n\n| Command | Description |\n| ------- | ----------- |\n| <a href=\"#command-apple-ads-organizations\"><code>af&nbsp;apple&#8209;ads&nbsp;organizations</code></a> | List the Apple Ads organizations you manage campaigns in, with each one's currency and timezone. |\n| <a href=\"#command-apple-ads-campaigns\"><code>af&nbsp;apple&#8209;ads&nbsp;campaigns</code></a> | List your Apple Ads campaigns with each one's status, budget, targeted countries, and schedule. |\n| <a href=\"#command-apple-ads-ad-groups\"><code>af&nbsp;apple&#8209;ads&nbsp;ad&#8209;groups</code></a> | List Apple Ads ad groups with each one's default bid, CPA cap, pricing model, and schedule. |\n| <a href=\"#command-apple-ads-keywords\"><code>af&nbsp;apple&#8209;ads&nbsp;keywords</code></a> | List a campaign's bid keywords with each keyword's performance (impressions, taps, installs, spend, cost-per-install) over a date range, plus its match type, bid, and whether it's a targeting or negative term. |\n| <a href=\"#command-apple-ads-search-terms\"><code>af&nbsp;apple&#8209;ads&nbsp;search&#8209;terms</code></a> | List the actual user search terms that triggered a campaign's ads, each with its all-time performance (impressions, taps, installs, spend, cost-per-install). Use these to discover new keywords to bid on or exclude. |\n| <a href=\"#command-apple-ads-report\"><code>af&nbsp;apple&#8209;ads&nbsp;report</code></a> | Report Apple Ads performance per campaign (impressions, taps, installs, spend, cost-per-install), plus an account-wide total, over a date range. |\n| <a href=\"#command-apple-ads-top-keywords\"><code>af&nbsp;apple&#8209;ads&nbsp;top&#8209;keywords</code></a> | Rank a campaign's top-performing keywords by conversion rate, spend, and installs over a date range. Each list holds the top keywords on one metric. |\n\n### Sdks\n\nLook up the SDKs we track.\n\n| Command | Description |\n| ------- | ----------- |\n| <a href=\"#command-sdks-list\"><code>af&nbsp;sdks&nbsp;list</code></a> | List every known SDK with its id, or search to find a specific one. |\n\n### Docs\n\nReference docs and guides for specific actions and common tasks.\n\n| Command | Description |\n| ------- | ----------- |\n| <a href=\"#command-docs-get\"><code>af&nbsp;docs&nbsp;get</code></a> | Return a reference doc or guide by slug. |\n\n### API\n\n| Command | Description |\n| ------- | ----------- |\n| <a href=\"#command-api\"><code>af&nbsp;api</code></a> | Make a raw API request for endpoints without a dedicated command. Endpoints, parameters, and response shapes are documented at https://docs.appfigures.com. |\n\n### MCP\n\n| Command | Description |\n| ------- | ----------- |\n| <a href=\"#command-mcp\"><code>af&nbsp;mcp</code></a> | Run an MCP server over stdio for MCP clients like Claude Desktop and Cursor to call Appfigures tools. |\n\n### Auth\n\n| Command | Description |\n| ------- | ----------- |\n| <a href=\"#command-auth-login\"><code>af&nbsp;auth&nbsp;login</code></a> | Sign in to Appfigures |\n| <a href=\"#command-auth-logout\"><code>af&nbsp;auth&nbsp;logout</code></a> | Remove stored credentials |\n| <a href=\"#command-auth-status\"><code>af&nbsp;auth&nbsp;status</code></a> | Show authentication and account status |\n\nRun `af <command> --help` for arguments, flags, and examples.\n<!-- END auto-generated COMMANDS -->\n<!-- prettier-ignore-end -->\n\n## Environment\n\n| Variable             | Purpose                                     |\n| -------------------- | ------------------------------------------- |\n| `APPFIGURES_API_KEY` | API key; skips interactive auth             |\n| `AF_VERBOSE`         | Log HTTP to stderr (same as `-v`)           |\n| `NO_COLOR`           | Disable ANSI color                          |\n| `NO_UPDATE_NOTIFIER` | Skip the npm-registry update check          |\n| `CI`                 | Also skips the update check (any CI system) |\n\n## API Reference\n\nEvery command with its full argument and flag list. For the one-line overview, see [Commands](#commands) above.\n\n**Global flags.** All commands accept:\n\n- `-v, --verbose` — Log HTTP requests to stderr. Also set via `AF_VERBOSE=1`.\n- `-V, --version` — Print the CLI version and exit.\n- `-h, --help` — Show usage for the current command.\n\n**Output format.** Every command emits a single JSON value on stdout — pipe to `jq` for filtering. Informational messages, hints, and update notices go to stderr so pipelines stay clean.\n\n<!-- prettier-ignore-start -->\n<!-- BEGIN auto-generated API REFERENCE ENTRIES -->\n<a id=\"apps-search\"></a>\n<a id=\"command-apps-search\"></a>\n### af apps search\n\n`af apps search <q> [flags]`\n\nFind apps by name or publisher. Returns one row per unified app. Default returns Apple and Google listings; pass `--all-stores` to include other storefronts. To filter apps by estimate values (e.g. apps with >100k downloads last month) use [`explorer list-products`](#command-explorer-list-products). For estimates broken down by time, country, or storefront, use [`metrics query`](#command-metrics-query) with datasets estimates.sales or estimates.revenue.\n\n**Options**\n\n- `<q>` required string. Search query (app name or publisher).\n- `--all-stores` boolean, default `false`. Include storefronts beyond Apple and Google: Amazon, Windows, Steam, Roku, LG TV, Samsung TV, and others.\n- `--count` integer, default `10`. Number of results to return.\n- `--page` integer, default `1`. Page number.\n\n**Examples**\n\n```sh\n# Find every Electronic Arts app.\naf apps search 'electronic arts'\n\n# Page through long results.\naf apps search 'electronic arts' --count=25 --page=2\n\n# Find Minecraft on every storefront (e.g. Amazon, Steam, Windows, Roku; not common).\naf apps search minecraft --all-stores\n```\n\n---\n\n<a id=\"apps-tracked\"></a>\n<a id=\"command-apps-tracked\"></a>\n### af apps tracked\n\n`af apps tracked [flags]`\n\nList the apps your Appfigures account tracks.\n\n**Options**\n\n- `--count` integer, default `10`. Number of results to return.\n- `--page` integer, default `1`. Page number.\n- `--q` string. App name to filter by.\n- `--filter-apps-by-id` (integer or string)[]. Only include data about specific apps, by product ID or unified app ID. Takes precedence over the other `filterAppsBy*` keys when set. Storefront, source, or type filters are better for app sets that can be described by those criteria.\n- `--filter-apps-by-storefront` string[]. Narrow the account's tracked apps to those on these storefronts (e.g. apple:ios, google_play).\n- `--filter-apps-by-source` string[]. Narrow the account's tracked apps by tracking relationship.\n- `--filter-apps-by-type` string[]. Narrow the account's tracked apps to products of these types.\n\n**Examples**\n\n```sh\n# List your apps with private-data access.\naf apps tracked --filter-apps-by-source=own,shared\n\n# List your tracked fitness apps.\naf apps tracked --q=fitness\n\n# List just your iOS apps.\naf apps tracked --filter-apps-by-storefront=apple:ios\n\n# Page through long results.\naf apps tracked --filter-apps-by-source=own,shared --count=50 --page=2\n\n# List tracked competitors.\naf apps tracked --filter-apps-by-source=manual\n\n# Find individual IAPs or subscriptions (not common).\naf apps tracked --filter-apps-by-type=inapp,subscription\n```\n\n---\n\n<a id=\"apps-get\"></a>\n<a id=\"command-apps-get\"></a>\n### af apps get\n\n`af apps get <app-id> [flags]`\n\nGet an app's record: basic metadata (name, developer, etc) and, if the user tracks it, what data they can access. Pass a product ID for one storefront; unified app ID for all storefronts together.\n\n**Options**\n\n- `<app-id>` required integer or string. The app's unified app ID or product ID.\n- `--all-stores` boolean, default `false`. For a unified app ID: include member products across all storefronts (Amazon, Steam, Windows, Roku, etc.). When false, `member_products` is restricted to storefronts with app-intelligence coverage (iOS + Google Play). Ignored for product IDs.\n\n**Examples**\n\n```sh\n# Get Minecraft's unified-app record (iOS + Google Play by default).\naf apps get ua_X7iNgb\n\n# Get Minecraft's Google Play product record.\naf apps get 6938219\n```\n\n---\n\n<a id=\"explorer-list-products\"></a>\n<a id=\"command-explorer-list-products\"></a>\n### af explorer list-products\n\n`af explorer list-products [flags]`\n\nRead catalog fields for one app or many. Fields referenced by `query` or `sort` come back automatically; pass `--extra-fields` for more. Use `[\"match\",\"product_id\",<id>]` for a single app, or combine filters for population queries (e.g. iOS apps using Firebase with $1M+ US revenue). The 120+ fields span ranks, ratings, download and revenue estimates, SDKs, demographics, and more; query grammar and field list in [`docs get catalog_playbook`](#command-docs-get).\n\n**Options**\n\n- `--query` array, default `[]`. Explorer query in JSON array format to select matching catalog Products. Missing values and `[]` match every Product across every storefront. The full field list and query syntax are documented in [`docs get catalog_playbook`](#command-docs-get).\n- `--extra-fields` string[]. Additional fields to include beyond those your `query` or `sort` already reference. Find field paths (and which you can read) with [`explorer describe-fields`](#command-explorer-describe-fields).\n- `--sort` string. Explorer field name. The full field list is documented in [`docs get catalog_playbook`](#command-docs-get).\n- `--order` string, default `desc`. Sort direction.\n- `--count` integer, default `10`. Number of results to return.\n- `--page` integer, default `1`. Page number.\n- `--allow-unscoped-nested` boolean, default `false`. Escape hatch for intentionally broad queries. Bypasses the default block on unscoped nested predicates that usually inflate results.\n\n**Examples**\n\n```sh\n# Find iOS apps that have Firebase installed.\naf explorer list-products --query='[\"and\",[\"match\",\"storefronts\",\"apple:ios\"],[\"nested\",\"all_sdks\",[\"and\",[\"match\",\"all_sdks.id\",\"firebase\"],[\"match\",\"all_sdks.active\",true]]]]'\n\n# Rank the biggest US iOS games by revenue.\naf explorer list-products --query='[\"and\",[\"match\",\"storefronts\",\"apple:ios\"],[\"match\",\"categories.all\",6014]]' --sort='custom_meta[country=us].revenue_estimates_sum_30_days' --order=desc --count=25\n\n# Find US iOS apps in the $100k–$1M/month revenue tier.\naf explorer list-products --query='[\"and\",[\"match\",\"storefronts\",\"apple:ios\"],[\"nested\",\"custom_meta\",[\"and\",[\"match\",\"custom_meta.country\",\"us\"],[\"match\",\"custom_meta.revenue_estimates_sum_30_days\",[\"number_range\",100000,1000000]]]]]'\n\n# Page through results.\naf explorer list-products --query='[\"and\",[\"match\",\"storefronts\",\"apple:ios\"],[\"match\",\"categories.all\",6014]]' --count=50 --page=2\n\n# Pass `--extra-fields` for columns the query doesn't already reference. Common for single-app reads.\naf explorer list-products --query='[\"match\",\"product_id\",304004187384]' --extra-fields='custom_meta[country=zz].revenue_estimates_sum_365_days,all_sdks[id=firebase].active'\n```\n\n---\n\n<a id=\"explorer-aggregate-products\"></a>\n<a id=\"command-explorer-aggregate-products\"></a>\n### af explorer aggregate-products\n\n`af explorer aggregate-products <fields> [flags]`\n\nAggregate across the full catalog of millions of products across Apple, Google Play, Amazon, and other major stores: counts, averages, min/max, and histograms over any set of matching products. Uses the same query grammar as [`explorer list-products`](#command-explorer-list-products); returns aggregates, not product records. For market sizing, benchmarking, and segment analysis.\n\n**Options**\n\n- `<fields>` required string[]. Field+aggregation pairs (e.g. `all_rating/stats`, `storefronts/terms`). Aggregations: `stats`, `terms`, `histogram`, `date_histogram`, `cardinality`. The full field list is documented in [`docs get catalog_playbook`](#command-docs-get).\n- `--query` array, default `[]`. Explorer query in JSON array format to select matching catalog Products. Missing values and `[]` match every Product across every storefront. The full field list and query syntax are documented in [`docs get catalog_playbook`](#command-docs-get).\n- `--allow-unscoped-nested` boolean, default `false`. Escape hatch for intentionally broad queries. Bypasses the default block on unscoped nested predicates that usually inflate results.\n- `--terms-count` integer, default `20`. Maximum buckets returned for each `terms` aggregation. Other aggregation types ignore it.\n- `--date-histogram-interval` string. Bucket granularity for each `date_histogram` aggregation. Other aggregation types ignore it.\n\n**Examples**\n\n```sh\n# How many monthly downloads does an average iOS app get in Japan?\naf explorer aggregate-products 'custom_meta[country=jp].download_estimates_average_30_days/stats' --query='[\"and\",[\"match\",\"storefronts\",\"apple:ios\"],[\"match\",\"countries\",\"jp\"]]'\n\n# What's the rating, category mix, and developer concentration for US iOS apps in the $100k–$10M/mo net-revenue tier?\naf explorer aggregate-products all_rating/stats,categories.all/terms,developer_id/cardinality --query='[\"and\",[\"match\",\"storefronts\",\"apple:ios\"],[\"nested\",\"custom_meta\",[\"and\",[\"match\",\"custom_meta.revenue_estimates_sum_30_days\",[\"number_range\",100000,10000000]],[\"match\",\"custom_meta.country\",\"us\"]]]]'\n\n# Are new iOS games still launching at the same rate as two years ago?\naf explorer aggregate-products release_date/date_histogram --query='[\"and\",[\"match\",\"storefronts\",\"apple:ios\"],[\"match\",\"categories.all\",6014],[\"match\",\"release_date\",[\"range\",\"2024-01-01\",\"2025-12-31\"]]]'\n\n# What SDKs do apps commonly ship alongside OneSignal?\naf explorer aggregate-products 'all_sdks[*].id/terms' --query='[\"nested\",\"all_sdks\",[\"and\",[\"match\",\"all_sdks.id\",\"onesignal\"],[\"match\",\"all_sdks.active\",true]]]'\n\n# How do iOS app ratings distribute?\naf explorer aggregate-products all_rating/histogram --query='[\"match\",\"storefronts\",\"apple:ios\"]'\n\n# How many apps are on each storefront?\naf explorer aggregate-products storefronts/terms\n```\n\n---\n\n<a id=\"explorer-describe-fields\"></a>\n<a id=\"command-explorer-describe-fields\"></a>\n### af explorer describe-fields\n\n`af explorer describe-fields [flags]`\n\nList the catalog fields and the current user's access level for each. Search by keyword to find fields. Same field set [`explorer list-products`](#command-explorer-list-products) and [`explorer aggregate-products`](#command-explorer-aggregate-products) accept.\n\n**Options**\n\n- `--count` integer, default `50`. Number of results to return.\n- `--page` integer, default `1`. Page number.\n- `--q` string. Filter by `path`, `title`, `description`, `type`.\n\n**Examples**\n\n```sh\n# Search for revenue-related fields.\naf explorer describe-fields --q=revenue\n\n# List every catalog field with the current user's access level.\naf explorer describe-fields\n```\n\n---\n\n<a id=\"metrics-query\"></a>\n<a id=\"command-metrics-query\"></a>\n### af metrics query\n\n`af metrics query <dataset> [flags]`\n\nQuery any numeric dataset for one or more apps. Optionally grouped by up to two dimensions, returned as a nested partition tree, not app records. Independently filterable by country, device type, and date range. `filterAppsBy*` options narrow the app set (by ID, storefront, source, or type); without one, a query covers every app the account tracks.\n\n**Options**\n\n- `<dataset>` required string. Dataset to query (e.g. sales.combined_downloads). See [`metrics describe-datasets`](#command-metrics-describe-datasets) for the full list and which datasets are private data (visible only for apps you own or that were shared).\n- `--group-by` string[]. Dimensions to group by. Max 2: the first slot becomes the outer entity type, the second the inner series. Each dimension multiplies the result size.\n- `--granularity` string. Time granularity when grouping by date\n- `--count` integer. Row cap. With `--group-by`, top N of the outer entity type by value (earliest N when grouping by date). Without `--group-by`, single-page preview.\n- `--countries` string[]. Filter to one or more ISO country codes (e.g. US, JP, GB)\n- `--device-type` string. Device type\n- `--all-time` boolean, default `false`. Opt in to the entire history. Without this flag (and without `start`/`end`), the query defaults to the last 30 days. Mutually exclusive with `start` and `end`.\n- `--filter-apps-by-id` (integer or string)[]. Only include data about specific apps, by product ID or unified app ID. Takes precedence over the other `filterAppsBy*` keys when set. Storefront, source, or type filters are better for app sets that can be described by those criteria.\n- `--filter-apps-by-storefront` string[]. Narrow the account's tracked apps to those on these storefronts (e.g. apple:ios, google_play).\n- `--filter-apps-by-source` string[]. Narrow the account's tracked apps by tracking relationship.\n- `--filter-apps-by-type` string[]. Narrow the account's tracked apps to products of these types.\n- `--start` string. Start date (YYYY-MM-DD)\n- `--end` string. End date (YYYY-MM-DD, defaults to today)\n\n**Examples**\n\n```sh\n# Get total downloads across your apps with private-data access.\naf metrics query sales.combined_downloads --filter-apps-by-source=own,shared\n\n# Get revenue split by storefront, plus a top-level total.\naf metrics query sales.combined_revenue --filter-apps-by-source=own,shared --group-by=storefront\n\n# Rank the top 5 tracked competitors by estimated monthly revenue.\naf metrics query estimates.revenue --filter-apps-by-source=manual --group-by=product --count=5\n\n# Track Candy Crush Saga's daily download estimates.\naf metrics query estimates.sales --filter-apps-by-id=ua_V1Q1uX --group-by=date --granularity=daily\n\n# Track net monthly recurring revenue per app, month over month.\naf metrics query subscriptions.mrr --filter-apps-by-source=own,shared --group-by=product,date --granularity=monthly\n\n# Get Minecraft's new ratings.\naf metrics query ratings.new_total --filter-apps-by-id=ua_X7iNgb\n\n# Track daily ad spend across your apps.\naf metrics query adspend.cost --filter-apps-by-source=own,shared --group-by=date --granularity=daily\n\n# Compare Candy Crush's December 2025 downloads across the US, Japan, and UK.\naf metrics query estimates.sales --filter-apps-by-id=ua_V1Q1uX --countries=US,JP,GB --group-by=country --start=2025-12-01 --end=2025-12-31\n\n# Track all-time monthly revenue across your apps with private-data access.\naf metrics query sales.combined_revenue --filter-apps-by-source=own,shared --group-by=date --granularity=monthly --all-time\n\n# Get Minecraft's review volume by country.\naf metrics query reviews.total --filter-apps-by-id=ua_X7iNgb --group-by=country\n```\n\n---\n\n<a id=\"metrics-describe-datasets\"></a>\n<a id=\"command-metrics-describe-datasets\"></a>\n### af metrics describe-datasets\n\n`af metrics describe-datasets [flags]`\n\nList every numeric dataset [`metrics query`](#command-metrics-query) accepts, one row per dataset with its value type and whether it's limited to your own apps.\n\n**Options**\n\n- `--count` integer, default `50`. Number of results to return.\n- `--page` integer, default `1`. Page number.\n- `--q` string. Filter by `dataset`, `value_type`, `label`, `description`.\n\n**Examples**\n\n```sh\n# Search by keyword (matches name, label, or description).\naf metrics describe-datasets --q='combined downloads'\n\n# Look up one dataset by its exact name.\naf metrics describe-datasets --q=sales.combined_downloads\n\n# List every dataset with its value type and whether it's limited to your own apps.\naf metrics describe-datasets\n```\n\n---\n\n<a id=\"store-app-ranks\"></a>\n<a id=\"command-store-app-ranks\"></a>\n### af store app-ranks\n\n`af store app-ranks <app-ids> [flags]`\n\nTrace rank history for one or more apps across countries, device types, category subtypes, and categories, as time-series positions with day-over-day deltas.\n\n**Options**\n\n- `<app-ids>` required (integer or string)[]. App identifiers (unified app IDs or product IDs)\n- `--countries` string[]. Country codes to query. Defaults to every country with rank coverage.\n- `--granularity` string, default `hourly`. Sampling rate. Hourly gives the freshest data; pass `--granularity=daily` for compact multi-day history.\n- `--device-types` string[], default `[\"handheld\"]`. Which device types to include; each ranks in its own chart. Add more to widen the response.\n- `--subtypes` string[], default `[\"free\"]`. Which category subtypes to include; each ranks in its own chart. Add more to widen the response.\n- `--category-ids` integer[]. Filter response rows to specific category IDs; omit for all. Category IDs come from [`store categories`](#command-store-categories).\n- `--start` string. Start date (YYYY-MM-DD)\n- `--end` string. End date (YYYY-MM-DD, defaults to today)\n- `--count` integer, default `10`. Number of results to return.\n- `--page` integer, default `1`. Page number.\n\n**Examples**\n\n```sh\n# Check ChatGPT's current ranks (unified app).\naf store app-ranks ua_miTXv6 --countries=US\n\n# Check ChatGPT's current ranks on one storefront.\naf store app-ranks 336744124021 --countries=US\n\n# Compare ChatGPT's ranks across the US, UK, and Japan.\naf store app-ranks ua_miTXv6 --countries=US,GB,JP\n\n# Check Procreate's paid iPad chart ranks.\naf store app-ranks ua_CxA1MS --subtypes=paid --device-types=tablet --countries=US\n\n# Trace ChatGPT's chart history through December 2025.\naf store app-ranks ua_miTXv6 --granularity=daily --start=2025-12-01 --end=2025-12-31 --countries=US\n\n# Check ChatGPT's rank in one category (US iOS Productivity).\naf store app-ranks 336744124021 --category-ids=6007 --countries=US\n```\n\n---\n\n<a id=\"store-top-charts\"></a>\n<a id=\"command-store-top-charts\"></a>\n### af store top-charts\n\n`af store top-charts [flags]`\n\nList the top apps in a category chart for a given country and category, with current positions and day-over-day deltas.\n\n**Options**\n\n- `--country` required string. ISO country code (e.g. US, JP, GB)\n- `--category-id` required integer. Category IDs come from [`store categories`](#command-store-categories).\n- `--subtype` string, default `free`. Category subtype (chart variant within the category).\n- `--date` string. Snapshot date (YYYY-MM-DD, defaults to current).\n- `--count` integer, default `10`. Number of results to return.\n- `--page` integer, default `1`. Page number.\n\n**Examples**\n\n```sh\n# Find the Games category, then pull its US chart.\naf store categories --q=games\naf store top-charts --country=US --category-id=6014\n\n# List top paid apps on the US App Store.\naf store top-charts --country=US --category-id=25204 --subtype=paid\n\n# List top free apps on the Japan App Store.\naf store top-charts --country=JP --category-id=25204\n\n# List top free apps on Google Play in the US.\naf store top-charts --country=US --category-id=100\n\n# List top free apps on the US App Store in December 2025.\naf store top-charts --country=US --category-id=25204 --date=2025-12-01\n```\n\n---\n\n<a id=\"store-categories\"></a>\n<a id=\"command-store-categories\"></a>\n### af store categories\n\n`af store categories [flags]`\n\nList every store category with its ID. Numeric category IDs required by [`store app-ranks --category-ids`](#command-store-app-ranks) and [`store top-charts --category-id`](#command-store-top-charts) are available here.\n\n**Options**\n\n- `--count` integer, default `50`. Number of results to return.\n- `--page` integer, default `1`. Page number.\n- `--q` string. Filter by `name`.\n- `--sort` string. Field to sort by. Omit to order by relevance when `q` is set, otherwise list order.\n- `--order` string, default `desc`. Sort direction.\n- `--category-id` integer[]. Only return these category IDs.\n- `--parent-id` integer. Only include subcategories of this parent category (drill-down by id).\n- `--storefront` string[]. Only include categories from these storefronts (e.g. `apple:ios`, `google_play`).\n- `--device-type` string[]. Only include categories for these device types (e.g. `handheld`, `tablet`).\n- `--all` boolean, default `false`. Include non-rank stores (roku, vizio, etc.). These have categories but no rank data.\n\n**Examples**\n\n```sh\n# Find the Games category.\naf store categories --q=games\n\n# List every Apple iOS category.\naf store categories --storefront=apple:ios\n\n# List subcategories of a parent category (here, Apple Games).\naf store categories --parent-id=6014\n\n# Include categories from non-rank-supporting stores (e.g. Roku, Vizio) (not common).\naf store categories --all\n```\n\n---\n\n<a id=\"store-featured\"></a>\n<a id=\"command-store-featured\"></a>\n### af store featured\n\n`af store featured <app-id> [flags]`\n\nList featured and editorial placements for an app or storefront product. Request 0 rows for summary stats only.\n\n**Options**\n\n- `<app-id>` required integer or string. The app's unified app ID or product ID.\n- `--countries` string[]. Countries to include. Omit to query US only, or pass multiple to compare markets. To include every country, set `--all-countries` instead.\n- `--all-countries` boolean, default `false`. Include every country. Cannot be combined with `--countries`.\n- `--include-rank-trend` boolean, default `false`. Include per-interval rank_trend for each placement.\n- `--sort` string, default `relevance`. Sort placements by relevance or date.\n- `--order` string, default `desc`. Sort direction.\n- `--start` string. Start date (YYYY-MM-DD)\n- `--end` string. End date (YYYY-MM-DD, defaults to today). Spans at most 31 days.\n- `--count` integer, default `10`. Number of results to return.\n- `--page` integer, default `1`. Page number.\n\n**Examples**\n\n```sh\n# List Minecraft's recent featured placements (unified app).\naf store featured ua_X7iNgb\n\n# List Minecraft's recent featured placements on one storefront.\naf store featured 10157213\n\n# Compare Minecraft's placement coverage across the US, UK, and Japan.\naf store featured ua_X7iNgb --countries=US,GB,JP\n\n# List Minecraft's placements during a specific month (December 2025).\naf store featured ua_X7iNgb --start=2025-12-01 --end=2025-12-31\n\n# List Minecraft's placements with rank history.\naf store featured ua_X7iNgb --include-rank-trend\n\n# List Minecraft's placements sorted by end date, newest run first.\naf store featured ua_X7iNgb --sort=date --order=desc\n\n# Get Minecraft's placement summary only.\naf store featured ua_X7iNgb --count=0\n```\n\n---\n\n<a id=\"store-app-listing\"></a>\n<a id=\"command-store-app-listing\"></a>\n### af store app-listing\n\n`af store app-listing <product-id> [flags]`\n\nRead the full store listing for one storefront: localized text (name, subtitle, description, release notes) plus screenshots, video, categories, monetization, supported devices, country availability, price, file size, and age rating. Takes a numeric product ID (one storefront at a time; a unified app has one product per storefront). One locale per request.\n\n**Options**\n\n- `<product-id>` required integer. Numeric product ID for one storefront. Not a unified app ID. Member product_id values are available from [`apps get '<unified-app-id>'`](#command-apps-get).\n- `--language` string. Locale (e.g. en, ja, zh-Hans) for name, subtitle, description, release notes, and screenshots. Defaults to en; falls back to the first available locale when the requested one has no metadata. The response echoes the resolved language.\n- `--device-type` string, default `handheld`. Relevant to Apple apps. Pick handheld for iPhone-specific metadata, tablet for iPad, desktop for Mac, etc.\n\n**Examples**\n\n```sh\n# Read Minecraft's store listing.\naf store app-listing 10157213\n\n# Read Minecraft's Japanese-localized listing.\naf store app-listing 10157213 --language=ja\n\n# Read Minecraft's iPad screenshots.\naf store app-listing 10157213 --device-type=tablet\n```\n\n---\n\n<a id=\"audience-demographics\"></a>\n<a id=\"command-audience-demographics\"></a>\n### af audience demographics\n\n`af audience demographics <app-id>`\n\nRead an app's audience demographics: the estimated age and gender breakdown.\n\n**Options**\n\n- `<app-id>` required integer or string. The app's unified app ID or product ID.\n\n**Examples**\n\n```sh\n# Read Minecraft's audience across all its storefronts (unified app ID).\naf audience demographics ua_X7iNgb\n\n# Read Minecraft's audience on Google Play only (product ID).\naf audience demographics 6938219\n```\n\n---\n\n<a id=\"audience-cross-usage\"></a>\n<a id=\"command-audience-cross-usage\"></a>\n### af audience cross-usage\n\n`af audience cross-usage <app-id> [flags]`\n\nFind the apps that an app's users also use.\n\n**Options**\n\n- `<app-id>` required integer or string. The app's unified app ID or product ID.\n- `--count` integer, default `10`. Number of results to return.\n- `--page` integer, default `1`. Page number.\n\n**Examples**\n\n```sh\n# Find the apps ChatGPT's users also use (unified app ID).\naf audience cross-usage ua_miTXv6\n\n# Find the apps ChatGPT's users also use on the App Store only (product ID).\naf audience cross-usage 336744124021\n```\n\n---\n\n<a id=\"reviews-list\"></a>\n<a id=\"command-reviews-list\"></a>\n### af reviews list\n\n`af reviews list [flags]`\n\nRead individual reviews for one or more apps. Returns review text, star rating, country, and app version. Filterable by star rating, date range, country, version, and tracking relationship.\n\n**Options**\n\n- `--stars` number[]. Filter by star rating.\n- `--versions` string[]. Filter by app version. Pass multiple to combine.\n- `--countries` string[]. Filter to one or more ISO country codes (e.g. US, JP, GB).\n- `--q` string. Search review title and body. Pass multiple keywords to match any. Case-insensitive; combines with other filters.\n- `--sort` string. Sort by review date or star rating.\n- `--order` string, default `desc`. Sort direction.\n- `--filter-apps-by-id` (integer or string)[]. Only include data about specific apps, by product ID or unified app ID. Takes precedence over the other `filterAppsBy*` keys when set. Storefront, source, or type filters are better for app sets that can be described by those criteria.\n- `--filter-apps-by-storefront` string[]. Narrow the account's tracked apps to those on these storefronts (e.g. apple:ios, google_play).\n- `--filter-apps-by-source` string[]. Narrow the account's tracked apps by tracking relationship.\n- `--filter-apps-by-type` string[]. Narrow the account's tracked apps to products of these types.\n- `--start` string. Start date (YYYY-MM-DD)\n- `--end` string. End date (YYYY-MM-DD, defaults to today)\n- `--count` integer, default `10`. Number of results to return.\n- `--page` integer, default `1`. Page number. 1-500.\n\n**Examples**\n\n```sh\n# Read Minecraft's recent reviews.\naf reviews list --filter-apps-by-id=ua_X7iNgb\n\n# Read Minecraft's 5-star reviews.\naf reviews list --filter-apps-by-id=ua_X7iNgb --stars=5\n\n# Compare Minecraft's reviews across the US, Japan, and the UK.\naf reviews list --filter-apps-by-id=ua_X7iNgb --countries=US,JP,GB\n\n# Read Minecraft's December 2025 reviews.\naf reviews list --filter-apps-by-id=ua_X7iNgb --start=2025-12-01 --end=2025-12-31\n\n# Page through long results across your own apps.\naf reviews list --filter-apps-by-source=own --count=50 --page=2\n```\n\n---\n\n<a id=\"reviews-breakdown\"></a>\n<a id=\"command-reviews-breakdown\"></a>\n### af reviews breakdown\n\n`af reviews breakdown [flags]`\n\nAggregate review counts for one or more apps, bucketed by dimension. Returns one count per dimension value, plus a global total across the matched set.\n\n**Options**\n\n- `--stars` number[]. Filter by star rating.\n- `--versions` string[]. Filter by app version. Pass multiple to combine.\n- `--countries` string[]. Filter to one or more ISO country codes (e.g. US, JP, GB).\n- `--q` string. Search review title and body. Pass multiple keywords to match any. Case-insensitive; combines with other filters.\n- `--filter-apps-by-id` (integer or string)[]. Only include data about specific apps, by product ID or unified app ID. Takes precedence over the other `filterAppsBy*` keys when set. Storefront, source, or type filters are better for app sets that can be described by those criteria.\n- `--filter-apps-by-storefront` string[]. Narrow the account's tracked apps to those on these storefronts (e.g. apple:ios, google_play).\n- `--filter-apps-by-source` string[]. Narrow the account's tracked apps by tracking relationship.\n- `--filter-apps-by-type` string[]. Narrow the account's tracked apps to products of these types.\n- `--start` string. Start date (YYYY-MM-DD)\n- `--end` string. End date (YYYY-MM-DD, defaults to today)\n- `--by` string[]. Limit the response to these dimensions; omit to return all.\n- `--top` integer, default `20`. Maximum values returned per dimension; the rest are summed under `__other__`.\n\n**Examples**\n\n```sh\n# Break down Minecraft's recent reviews.\naf reviews breakdown --filter-apps-by-id=ua_X7iNgb\n\n# Where are Minecraft's biggest fans writing from?\naf reviews breakdown --filter-apps-by-id=ua_X7iNgb --stars=5\n\n# Count Minecraft's December 2025 5-star reviews.\naf reviews breakdown --filter-apps-by-id=ua_X7iNgb --stars=5 --start=2025-12-01 --end=2025-12-31\n\n# How many Minecraft reviewers raved?\naf reviews breakdown --filter-apps-by-id=ua_X7iNgb --q='love amazing fun great best'\n\n# Compare review volume across your own apps.\naf reviews breakdown --filter-apps-by-source=own\n```\n\n---\n\n<a id=\"reviews-reply\"></a>\n<a id=\"command-reviews-reply\"></a>\n### af reviews reply\n\n`af reviews reply <review-id> [flags]`\n\nPost or withdraw a developer response on a specific review. Pass `content` to post; pass `delete: true` to withdraw a previously-posted response. Returns the resulting state (`published`/`pending` for a post, `removed`/`removal_pending` for a withdrawal) along with the submitting account.\n\n**Options**\n\n- `<review-id>` required string. Review to act on. Use `review_id` from [`reviews list`](#command-reviews-list).\n- `--content` string. Response text the developer wants to publish.\n- `--delete` boolean. Withdraw the previously-posted response on this review. Mutually exclusive with `content`.\n\n**Examples**\n\n```sh\n# Reply to a low-star review after shipping a fix.\naf reviews reply rev123 --content='We just shipped a fix in v2.1. Let us know if you still see this.'\n\n# Withdraw a previously-posted response.\naf reviews reply rev123 --delete\n```\n\n---\n\n<a id=\"keywords-organic\"></a>\n<a id=\"command-keywords-organic\"></a>\n### af keywords organic\n\n`af keywords organic [flags]`\n\nCheck the organic keywords one or more apps rank for, with position, popularity, and competitiveness.\n\n**Options**\n\n- `--product-ids` integer[]. Product identifiers (numeric, one storefront each).\n- `--countries` required string[]. One or more ISO country codes (e.g. US, JP, GB). Pass several to compare markets.\n- `--device-type` string. Device type\n- `--count` integer, default `10`. Number of results to return (min 10).\n- `--page` integer, default `1`. Page number.\n\n**Examples**\n\n```sh\n# Check ChatGPT's current US keyword rankings.\naf keywords organic --product-ids=336744124021 --countries=US\n\n# Check ChatGPT's iPad-only keyword rankings.\naf keywords organic --product-ids=336744124021 --countries=US --device-type=tablet\n\n# Compare ChatGPT and Gemini's US keyword rankings.\naf keywords organic --product-ids=336744124021,337217072531 --countries=US\n```\n\n---\n\n<a id=\"keywords-paid\"></a>\n<a id=\"command-keywords-paid\"></a>\n### af keywords paid\n\n`af keywords paid <product-ids> [flags]`\n\nList the paid keywords one or more apps run ads on, with impression share and organic rank.\n\n**Options**\n\n- `<product-ids>` required integer[]. Product identifiers (numeric, one storefront each).\n- `--days` integer, default `180`. Lookback period in days. Common values: 7, 14, 30, 90, 180, 365.\n- `--countries` required string[]. One or more ISO country codes (e.g. US, JP, GB). Pass several to compare markets.\n- `--device-types` string[]. Filter by device type. Defaults to handheld.\n- `--count` integer, default `10`. Number of results to return (min 10).\n- `--page` integer, default `1`. Page number.\n\n**Examples**\n\n```sh\n# Find Headspace's US paid keywords.\naf keywords paid 15250929 --countries=US\n\n# Compare Headspace's and Calm's US paid keywords.\naf keywords paid 15250929,304554144 --countries=US\n\n# Find Headspace's paid keywords across the US, UK, and Japan.\naf keywords paid 15250929 --countries=US,GB,JP\n\n# Find Headspace's US iPad paid keywords.\naf keywords paid 15250929 --countries=US --device-types=tablet\n\n# Check Headspace's US paid keywords over the last 30 days.\naf keywords paid 15250929 --countries=US --days=30\n```\n\n---\n\n<a id=\"keywords-tracked-ranks\"></a>\n<a id=\"command-keywords-tracked-ranks\"></a>\n### af keywords tracked-ranks\n\n`af keywords tracked-ranks <product-id> [flags]`\n\nView where all your tracked keywords rank for a single app+country combo, with each keyword's current position, movement since it last changed, starting position, popularity, and competitiveness.\n\n**Options**\n\n- `<product-id>` required integer. Numeric product ID for one storefront. Not a unified app ID. Member product_id values are available from [`apps get '<unified-app-id>'`](#command-apps-get).\n- `--country` required string. ISO country code (e.g. US, JP, GB)\n- `--device-type` string. Device to read ranks for. Omit to use the store default.\n- `--count` integer, default `10`. Number of results to return (min 10).\n- `--page` integer, default `1`. Page number.\n- `--sort` string. Field to order results by.\n- `--order` string, default `desc`. Sort direction.\n- `--start` string. Start of the window (YYYY-MM-DD). Omit the range for the last 7 days; the rank on the start date is the starting-position baseline.\n- `--end` string. End of the window (YYYY-MM-DD, defaults to today). Spans at most 31 days.\n- `--keyword-term` string. Only include tracked keywords whose term contains this text.\n- `--min-position` integer. Best rank to include (1 = top).\n- `--max-position` integer. Worst rank to include.\n- `--min-popularity` integer. Lowest popularity to include (0-100).\n- `--max-popularity` integer. Highest popularity to include (0-100).\n- `--min-competitiveness` integer. Lowest competitiveness to include (0-100).\n- `--max-competitiveness` integer. Highest competitiveness to include (0-100).\n\n**Examples**\n\n```sh\n# Check how ChatGPT's tracked keywords are ranking.\naf keywords tracked-ranks 336744124021 --country=US\n\n# List ChatGPT's best-ranking keywords first.\naf keywords tracked-ranks 336744124021 --country=US --sort=position --order=asc\n\n# Show only the keywords ChatGPT ranks in the top 10.\naf keywords tracked-ranks 336744124021 --country=US --max-position=10\n\n# Find the most-searched keywords ChatGPT should prioritize.\naf keywords tracked-ranks 336744124021 --country=US --sort=popularity --min-popularity=50\n\n# Trace ChatGPT's keyword movement across a custom week.\naf keywords tracked-ranks 336744124021 --country=US --start=2026-01-06 --end=2026-01-12\n\n# Page through a long tracked keyword set.\naf keywords tracked-ranks 336744124021 --country=US --page=2\n```\n\n---\n\n<a id=\"keywords-tracked-trend\"></a>\n<a id=\"command-keywords-tracked-trend\"></a>\n### af keywords tracked-trend\n\n`af keywords tracked-trend <keyword-id> [flags]`\n\nTrace how one tracked keyword's rank changes over time for a single app+country combo. Each point gives the rank and how many positions it moved since the one before.\n\n**Options**\n\n- `<keyword-id>` required string. The keyword to trace. Must be tracked for this app and country; its opaque id comes from [`keywords tracked-ranks`](#command-keywords-tracked-ranks) or [`keywords tracked`](#command-keywords-tracked).\n- `--product-id` required integer. Numeric product ID for one storefront. Not a unified app ID. Member product_id values are available from [`apps get '<unified-app-id>'`](#command-apps-get).\n- `--country` required string. ISO country code (e.g. US, JP, GB)\n- `--device-type` string. Device to read ranks for. Omit to use the store default.\n- `--granularity` string, default `daily`. Sampling rate.\n- `--start` string. Start of the window (YYYY-MM-DD). Omit the range for the last 7 days.\n- `--end` string. End of the window (YYYY-MM-DD, defaults to today). Spans at most 14 days for hourly granularity, 31 for daily.\n\n**Examples**\n\n```sh\n# Find a tracked keyword, then trace its rank day by day.\naf keywords tracked-ranks 336744124021 --country=US\naf keywords tracked-trend 00f2b1ead3a0990b818517356cb40280 --product-id=336744124021 --country=US\n\n# Trace a keyword's rank for ChatGPT across a specific week.\naf keywords tracked-trend 00f2b1ead3a0990b818517356cb40280 --product-id=336744124021 --country=US --start=2026-01-06 --end=2026-01-12\n\n# Trace a keyword hour by hour.\naf keywords tracked-trend 00f2b1ead3a0990b818517356cb40280 --product-id=336744124021 --country=US --granularity=hourly\n```\n\n---\n\n<a id=\"keywords-suggestions\"></a>\n<a id=\"command-keywords-suggestions\"></a>\n### af keywords suggestions\n\n`af keywords suggestions <product-id> [flags]`\n\nDiscover keyword ideas to consider targeting for a single app+country combo, ranked by relevance to the app and including some drawn from apps you compete with. Each comes with its popularity, competitiveness, and the app's current rank.\n\n**Options**\n\n- `<product-id>` required integer. Numeric product ID for one storefront. Not a unified app ID. Member product_id values are available from [`apps get '<unified-app-id>'`](#command-apps-get).\n- `--country` required string. ISO country code (e.g. US, JP, GB)\n- `--device-type` string. Device to read ranks for. Omit to use the store default.\n- `--count` integer, default `10`. Number of results to return.\n- `--page` integer, default `1`. Page number.\n\n**Examples**\n\n```sh\n# Discover keywords ChatGPT should consider targeting.\naf keywords suggestions 336744124021 --country=US\n\n# Find keyword ideas for ChatGPT in Japan.\naf keywords suggestions 336744124021 --country=JP\n\n# Pull a broader set of suggestions.\naf keywords suggestions 336744124021 --country=US --count=50\n```\n\n---\n\n<a id=\"keywords-ranking-apps\"></a>\n<a id=\"command-keywords-ranking-apps\"></a>\n### af keywords ranking-apps\n\n`af keywords ranking-apps <keyword-term> [flags]`\n\nList the apps ranking for a specific keyword in organic search, plus the keyword's own popularity and competitiveness scores.\n\n**Options**\n\n- `<keyword-term>` required string. Keyword to look up.\n- `--country` required string. ISO country code (e.g. US, JP, GB)\n- `--storefront` required string. App store platform (e.g. apple:ios, google_play, amazon_appstore, steam, windows10, apple:mac, apple:tv, apple:imessage, or another supported storefront).\n- `--device-type` string. Device type\n- `--count` integer, default `10`. Number of results to return.\n- `--page` integer, default `1`. Page number.\n\n**Examples**\n\n```sh\n# Find US iOS apps ranking for \"fitness\".\naf keywords ranking-apps fitness --country=US --storefront=apple:ios\n\n# Find Google Play apps ranking for \"fitness\".\naf keywords ranking-apps fitness --country=US --storefront=google_play\n\n# Find US iPad apps ranking for \"meditation\".\naf keywords ranking-apps meditation --country=US --storefront=apple:ios --device-type=tablet\n```\n\n---\n\n<a id=\"keywords-advertisers\"></a>\n<a id=\"command-keywords-advertisers\"></a>\n### af keywords advertisers\n\n`af keywords advertisers <keyword-term> [flags]`\n\nList the apps advertising on a specific keyword, with each advertiser's impression share, organic rank, and how long they've been bidding.\n\n**Options**\n\n- `<keyword-term>` required string. Keyword to look up advertisers for\n- `--days` integer, default `180`. Lookback period in days. Common values: 7, 14, 30, 90, 180, 365.\n- `--country` required string. ISO country code (e.g. US, JP, GB)\n- `--device-type` string. Device type\n- `--count` integer, default `10`. Number of results to return.\n- `--page` integer, default `1`. Page number.\n\n**Examples**\n\n```sh\n# Find US apps advertising on the \"notion\" brand.\naf keywords advertisers notion --country=US\n\n# Find US iPad apps advertising on \"meditation\".\naf keywords advertisers meditation --country=US --device-type=tablet\n\n# Find US apps advertising on \"fitness\" over the last 30 days.\naf keywords advertisers fitness --country=US --days=30\n```\n\n---\n\n<a id=\"keywords-related\"></a>\n<a id=\"command-keywords-related\"></a>\n### af keywords related\n\n`af keywords related <keyword-term> [flags]`\n\nFind keywords related to a seed term for ASO research. Useful for finding alternatives with a similar audience that are more popular or less competitive.\n\n**Options**\n\n- `<keyword-term>` required string. Seed keyword to find related terms for.\n- `--country` required string. ISO country code (e.g. US, JP, GB)\n- `--storefront` required string. App store platform (e.g. apple:ios, google_play, amazon_appstore, steam, windows10, apple:mac, apple:tv, apple:imessage, or another supported storefront).\n- `--device-type` string. Device type\n- `--count` integer, default `10`. Number of results to return.\n- `--page` integer, default `1`. Page number.\n\n**Examples**\n\n```sh\n# Find US iOS keywords related to \"fitness\".\naf keywords related fitness --country=US --storefront=apple:ios\n\n# Find US Google Play keywords related to \"fitness\".\naf keywords related fitness --country=US --storefront=google_play\n\n# Find US iPad keywords related to \"meditation\".\naf keywords related meditation --country=US --storefront=apple:ios --device-type=tablet\n```\n\n---\n\n<a id=\"keywords-tracked\"></a>\n<a id=\"command-keywords-tracked\"></a>\n### af keywords tracked\n\n`af keywords tracked [flags]`\n\nList tracked keywords with their opaque IDs.\n\n**Options**\n\n- `--count` integer, default `10`. Number of results to return.\n- `--page` integer, default `1`. Page number.\n- `--q` string. Filter by `keyword_term`.\n- `--sort` string. Field to sort by. Omit to order by relevance when `q` is set, otherwise list order.\n- `--order` string, default `desc`. Sort direction.\n- `--include-relationships` boolean, default `false`. Include per-(product, country) tracking detail and sync state on each row. Off by default; adds a nested block per tracked (product, country) pair.\n\n**Examples**\n\n```sh\n# List every tracked keyword.\naf keywords tracked\n\n# Search tracked keywords for \"fitness\".\naf keywords tracked --q=fitness\n\n# List the most-recently-tracked keywords first.\naf keywords tracked --sort=added_on\n\n# Show each keyword's tracking and sync detail.\naf keywords tracked --include-relationships\n```\n\n---\n\n<a id=\"keywords-track\"></a>\n<a id=\"command-keywords-track\"></a>\n### af keywords track\n\n`af keywords track <keyword-term> [flags]`\n\nTrack a keyword to monitor your app's hourly rank for it over time and get automatic alerts when its position moves.\n\n**Options**\n\n- `<keyword-term>` required string. Keyword to start tracking\n- `--product-id` required integer. Product ID of the app to track the keyword for\n- `--country` required string. ISO country code (e.g. US, JP, GB)\n\n**Examples**\n\n```sh\n# Start tracking \"meditation\" for one of your apps in the US.\naf keywords track meditation --product-id=336744124021 --country=US\n\n# Track \"workout\" in Japan.\naf keywords track workout --product-id=336744124021 --country=JP\n```\n\n---\n\n<a id=\"keywords-untrack\"></a>\n<a id=\"command-keywords-untrack\"></a>\n### af keywords untrack\n\n`af keywords untrack <keyword-id>`\n\nStop tracking a keyword.\n\n**Options**\n\n- `<keyword-id>` required string. Identifier of a tracked keyword row (returned by [`keywords tracked`](#command-keywords-tracked)). Not the keyword text.\n\n**Examples**\n\n```sh\n# Stop tracking a keyword.\naf keywords untrack a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6\n```\n\n---\n\n<a id=\"apple-ads-organizations\"></a>\n<a id=\"command-apple-ads-organizations\"></a>\n### af apple-ads organizations\n\n`af apple-ads organizations [flags]`\n\nList the Apple Ads organizations you manage campaigns in, with each one's currency and timezone.\n\n**Options**\n\n- `--count` integer, default `10`. Number of results to return.\n- `--page` integer, default `1`. Page number.\n\n**Examples**\n\n```sh\n# List all the Apple Ads organizations you manage.\naf apple-ads organizations\n```\n\n---\n\n<a id=\"apple-ads-campaigns\"></a>\n<a id=\"command-apple-ads-campaigns\"></a>\n### af apple-ads campaigns\n\n`af apple-ads campaigns [flags]`\n\nList yo",
  "bytes": 60000,
  "sha": "3999043cc7909ff43d564684ef80149cbd2a58a8284f85d17cf3851a18aa84b8",
  "repo_slug": "appfigures/cli",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_com_appfigures_mcp_38148fa5/readme"
}