> ## Documentation Index
> Fetch the complete documentation index at: https://docs.appeeky.com/llms.txt
> Use this file to discover all available pages before exploring further.

# MCP Server

> Connect any LLM to real-time App Store & Google Play data using the Model Context Protocol

The Appeeky MCP Server lets AI assistants like **Claude**, **ChatGPT**, **Cursor**, and any [MCP-compatible](https://modelcontextprotocol.io) client query App Store and Google Play intelligence data directly.

* **Claude Desktop** connects via OAuth — just add the URL as a connector and sign in.
* **All other clients** use an API key. Get yours from [appeeky.com → Settings](https://appeeky.com) or the [API Dashboard](https://dashboard.appeeky.com).

```
MCP Endpoint: https://mcp.appeeky.com
```

## Connect Your Client

Pick your AI client for a step-by-step setup guide. Every client connects to the same endpoint — Claude Desktop over OAuth, all others with your API key.

<CardGroup cols={2}>
  <Card title="Claude" icon="sparkles" href="/docs/mcp-claude">
    Claude Desktop (OAuth) and Claude Code (CLI).
  </Card>

  <Card title="Cursor" icon="code" href="/docs/mcp-cursor">
    One-click install or `.cursor/mcp.json`.
  </Card>

  <Card title="Codex" icon="terminal" href="/docs/mcp-codex">
    `codex mcp add` + `~/.codex/config.toml`.
  </Card>

  <Card title="VS Code" icon="microsoft" href="/docs/mcp-vscode">
    GitHub Copilot agent mode via `mcp.json`.
  </Card>

  <Card title="Windsurf" icon="wind" href="/docs/mcp-windsurf">
    Cascade via `mcp_config.json`.
  </Card>

  <Card title="OpenCode" icon="brackets-curly" href="/docs/mcp-opencode">
    Remote server in `opencode.json`.
  </Card>

  <Card title="Zed" icon="bolt" href="/docs/mcp-zed">
    Context server in `settings.json`.
  </Card>
</CardGroup>

### Programmatic clients

Prefer to call the server from code? Use the MCP SDK directly.

<Tabs>
  <Tab title="TypeScript Client">
    ```typescript theme={"theme":{"light":"github-light","dark":"github-dark"}}
    import { Client } from "@modelcontextprotocol/sdk/client/index.js";
    import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";

    const transport = new StreamableHTTPClientTransport(
      new URL("https://mcp.appeeky.com/mcp"),
      {
        requestInit: {
          headers: {
            "Authorization": "Bearer apk_your_key_here"
          }
        }
      }
    );

    const client = new Client({ name: "my-app", version: "1.0.0" });
    await client.connect(transport);

    const result = await client.callTool({
      name: "search_apps",
      arguments: { query: "fitness tracker", country: "us" }
    });
    ```
  </Tab>

  <Tab title="Python Client">
    ```python theme={"theme":{"light":"github-light","dark":"github-dark"}}
    from mcp import ClientSession
    from mcp.client.streamable_http import streamablehttp_client

    async with streamablehttp_client(
        "https://mcp.appeeky.com/mcp",
        headers={"Authorization": "Bearer apk_your_key_here"}
    ) as (read, write, _):
        async with ClientSession(read, write) as session:
            await session.initialize()
            result = await session.call_tool(
                "search_apps",
                arguments={"query": "fitness tracker", "country": "us"}
            )
            print(result)
    ```
  </Tab>
</Tabs>

<Note>
  **Claude Desktop** uses OAuth (no API key required). All other clients use your API key via `Authorization: Bearer` header or `X-API-Key` header. Get your key from [appeeky.com → Settings](https://appeeky.com) or the [API Dashboard](https://dashboard.appeeky.com).
</Note>

## Available Tools

### Apps

| Tool                   | Description                                                                               |
| ---------------------- | ----------------------------------------------------------------------------------------- |
| `search_apps`          | Search Apple App Store or Google Play by keyword, app ID, or package name                 |
| `get_app`              | Get detailed metadata for a specific Apple or Google Play app                             |
| `get_app_intelligence` | Full intelligence report: downloads/installs, listing data, screenshots, sentiment fields |
| `get_app_similar`      | Similar and competing apps                                                                |
| `get_app_reviews`      | Fetch Apple or Google Play reviews with pagination                                        |
| `get_country_rankings` | App rankings across supported countries                                                   |

### Screenshots

| Tool                         | Description                                                      |
| ---------------------------- | ---------------------------------------------------------------- |
| `get_app_screenshots`        | Get all screenshots for an Apple or Google Play app              |
| `get_competitor_screenshots` | Compare screenshots between an app and its competitors           |
| `get_category_screenshots`   | Get screenshots for top apps in an Apple or Google Play category |

### Keywords

| Tool                        | Description                                                                                                                                |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| `get_keyword_ranks`         | Apple or Google Play apps ranking for a keyword with rich metadata (supports `countries`)                                                  |
| `get_keyword_suggestions`   | Apple autocomplete or Google Play suggest ideas from a seed term                                                                           |
| `get_keyword_metrics`       | Volume/difficulty-style metrics (Google uses live Play search result counts today; supports `countries`; **10 req/min burst** per API key) |
| `get_app_keywords`          | Keywords an Apple or Google Play app ranks for                                                                                             |
| `get_keyword_trends`        | Historical rank data over time (7-90 days)                                                                                                 |
| `get_keyword_ranks_history` | Historical apps-per-day counts for a tracked keyword                                                                                       |
| `compare_keywords`          | Compare keyword overlap between two Apple apps or two Google Play apps                                                                     |
| `compare_keyword_cluster`   | Your app + 1–5 competitors: lifecycle buckets + gap keywords                                                                               |
| `track_keyword`             | Add Apple or Google keyword to daily tracking                                                                                              |
| `get_trending_keywords`     | Keywords with fastest-growing reach in stored Apple or Google rank data                                                                    |

### Account

| Tool            | Description                                                                         |
| --------------- | ----------------------------------------------------------------------------------- |
| `get_api_usage` | Plan, per-bucket credits used/remaining, reset date, per-endpoint usage (0 credits) |

### ASO (App Store Optimization)

| Tool                       | Description                                                                                                                                                                                                                                                                                                                    |
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `aso_full_audit`           | Full ASO health audit for Apple or Google Play — score (0-100), breakdown, prioritized recommendations                                                                                                                                                                                                                         |
| `aso_brief`                | Apple-only: audit + opportunities + storefront score; optional `countries`, `intent_clusters`                                                                                                                                                                                                                                  |
| `aso_validate_metadata`    | Validate title/subtitle/keywords against Apple or Google character limits                                                                                                                                                                                                                                                      |
| `aso_suggest_metadata`     | Apple-sourced metadata suggestions that include Apple and Google fields                                                                                                                                                                                                                                                        |
| `aso_find_opportunities`   | Apple-only: discover untapped keyword opportunities                                                                                                                                                                                                                                                                            |
| `aso_competitor_report`    | Apple-only: deep ASO comparison between two apps with keyword gap analysis                                                                                                                                                                                                                                                     |
| `localize_app_metadata`    | Translate store metadata into up to 10 languages (async); optionally publish to App Store Connect. Returns a `jobId`                                                                                                                                                                                                           |
| `get_localization_job`     | Poll status and per-locale results of a `localize_app_metadata` run                                                                                                                                                                                                                                                            |
| `validate_idea`            | Validate a plain-language app idea against the live App Store — competitors with revenue/download estimates, keyword demand vs difficulty, review pain points, an AI verdict, and a go-to-market starter pack (async). Returns a `jobId`                                                                                       |
| `get_idea_validation_job`  | Poll status and the full result of a `validate_idea` run                                                                                                                                                                                                                                                                       |
| `generate_app_ad_creative` | Generate a Meta-ready square app ad creative from a real App Store or Google Play listing (async). Supports branded, people/lifestyle, UGC testimonial, problem-solution, and clean mockup presets. Uses 1 API credit for analyze/BYOK or creative credits for platform image generation (`low` = 1, `medium` = 2, `high` = 5) |
| `get_app_ad_creative_job`  | Poll status and retrieve the generated image URL, Meta copy, key points, and final prompt                                                                                                                                                                                                                                      |

### Discovery & Featured

| Tool                   | Description                                                                    |
| ---------------------- | ------------------------------------------------------------------------------ |
| `get_featured_apps`    | Apple-only: App of the Day, Game of the Day, and curated editorial collections |
| `get_categories`       | List Apple App Store or Google Play categories                                 |
| `get_category_top`     | Top Apple or Google Play apps by category and chart type                       |
| `get_downloads_to_top` | Apple-only: estimated downloads to reach chart positions                       |
| `get_new_releases`     | Apple-only: recently released apps                                             |
| `discover`             | Apple-only: curated discovery feed (new releases + new #1 apps)                |
| `get_new_number_1`     | Apple-only: apps that recently hit #1 in their category                        |

### Market Intelligence

| Tool                  | Description                                                           |
| --------------------- | --------------------------------------------------------------------- |
| `get_market_movers`   | Top gainers, losers, new entries, and apps that dropped out of charts |
| `get_market_activity` | Live feed of chart movements: new entries, rank ups/downs, exits      |

### ASC Metrics (synced Sales & Trends)

| Tool                       | Description                                                                                                 |
| -------------------------- | ----------------------------------------------------------------------------------------------------------- |
| `asc_get_metrics`          | Overview: totals, per-app breakdown, daily rows (2 credits)                                                 |
| `asc_list_metrics_apps`    | List app IDs with metrics data (2 credits)                                                                  |
| `asc_get_app_metrics`      | App detail: daily series + country breakdown (2 credits)                                                    |
| `asc_subscription_metrics` | MRR / ARR / ARPU / churn / trial conversion + daily series (2 credits)                                      |
| `asc_get_app_sources`      | App Store impression/page-view breakdown by acquisition source, with per-source conversion rate (2 credits) |

<Tip>
  **Pro feature** — requires Indie plan or higher. ASC Metrics need your **App Store Connect account connected** in [appeeky.com → Settings → Integrations](https://appeeky.com). Data syncs daily. 2 credits per request.
</Tip>

### ASC Reviews (synced + write-through)

| Tool                         | Description                                                                    |
| ---------------------------- | ------------------------------------------------------------------------------ |
| `asc_search_reviews`         | Search reviews with rich filters: rating, territory, hasResponse, full-text    |
| `asc_reviews_summary`        | Aggregated stats: total, avg rating, distribution, response rate, by-territory |
| `asc_respond_to_review`      | Post or update a developer response (handles Apple's edit-by-DELETE flow)      |
| `asc_delete_review_response` | Delete a developer response                                                    |
| `asc_refresh_review`         | Force-refresh one review from Apple (e.g. after replying)                      |

<Tip>
  **Pro feature** — requires Indie plan or higher. Reviews data syncs daily; mutations write through to Apple immediately.
</Tip>

### App Store Connect (requires your ASC credentials)

| Tool                                  | Description                                                                                |
| ------------------------------------- | ------------------------------------------------------------------------------------------ |
| `asc_credentials_status`              | Whether App Store Connect is connected on your account                                     |
| `asc_trigger_sync`                    | Start an ASC data sync (sales, analytics, reviews, subscriptions)                          |
| `asc_list_apps`                       | List apps in your App Store Connect account                                                |
| `asc_get_app`                         | Get app details by App Store Connect app ID                                                |
| `asc_list_app_versions`               | List versions for an app                                                                   |
| `asc_create_app_version`              | Create a new app version (version string + platform)                                       |
| `asc_update_app_version`              | Patch attributes on an app version                                                         |
| `asc_list_app_infos`                  | List app info resources for an app                                                         |
| `asc_list_app_info_localizations`     | List app info localizations (name, subtitle, privacy)                                      |
| `asc_create_app_info_localization`    | Add a new App Information language                                                         |
| `asc_update_app_info_localization`    | Update app info localization fields                                                        |
| `asc_delete_app_info_localization`    | Remove an App Information language                                                         |
| `asc_list_version_localizations`      | List metadata localizations for a version                                                  |
| `asc_get_version_localization`        | Get one version localization by ID                                                         |
| `asc_create_version_localization`     | Add a new metadata language to a version                                                   |
| `asc_update_localization`             | Update description, keywords, whatsNew, etc.                                               |
| `asc_delete_version_localization`     | Remove a metadata language from a version                                                  |
| `asc_pull_localizations`              | Pull live App Store metadata into Appeeky (bulk)                                           |
| `asc_publish_localization`            | Publish translated metadata to the App Store (bulk)                                        |
| `asc_remove_localization`             | Remove locales in bulk                                                                     |
| `asc_list_customer_reviews`           | List customer reviews live from Apple (legacy — prefer `asc_search_reviews` for filtering) |
| `asc_list_app_analytics_requests`     | List analytics report requests                                                             |
| `asc_create_analytics_request`        | Create analytics report request                                                            |
| `asc_list_reports_for_request`        | List reports for a request                                                                 |
| `asc_list_analytics_report_instances` | List instances for an analytics report                                                     |
| `asc_list_analytics_report_segments`  | List segments for a report instance                                                        |
| `asc_get_analytics_report_segment`    | Get one segment (download metadata)                                                        |
| `asc_download_analytics_segment`      | Download and parse an analytics segment (gzip TSV → JSON)                                  |
| `asc_download_sales_report`           | Download a Sales & Trends report (parsed JSON or raw)                                      |

### ASC Release Management

Ship a version end-to-end: screenshots, builds, review submission, phased rollout. See [Release Management](/docs/app-store-connect-release).

| Tool                                                                              | Description                                                                           |
| --------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------- |
| `asc_list_screenshot_sets`                                                        | List screenshot sets for a localization (per device type)                             |
| `asc_create_screenshot_set`                                                       | Create a screenshot set for a display type                                            |
| `asc_list_screenshots`                                                            | List screenshots in a set                                                             |
| `asc_upload_screenshot`                                                           | Upload a screenshot from a public URL (dimension-validated, full Apple 3-step upload) |
| `asc_reorder_screenshots`                                                         | Reorder screenshots in a set                                                          |
| `asc_delete_screenshot`                                                           | Delete a screenshot (confirm required)                                                |
| `asc_list_builds`                                                                 | List builds with processing-state and version filters                                 |
| `asc_get_build`                                                                   | Get one build                                                                         |
| `asc_get_version_build`                                                           | Get the build attached to a version                                                   |
| `asc_attach_build`                                                                | Attach a build to a version                                                           |
| `asc_detach_build`                                                                | Detach the build from a version (confirm required)                                    |
| `asc_get_review_detail` / `asc_create_review_detail` / `asc_update_review_detail` | App Review contact info, demo account, notes                                          |
| `asc_get_submission`                                                              | Open review submissions for the version's app                                         |
| `asc_submit_for_review`                                                           | Submit a version for App Review (current reviewSubmissions flow; confirm required)    |
| `asc_cancel_submission`                                                           | Cancel a review submission (confirm required)                                         |
| `asc_get_phased_release` / `asc_create_phased_release`                            | Read or start a 7-day phased rollout                                                  |
| `asc_update_phased_release`                                                       | Pause / resume / complete the rollout                                                 |
| `asc_delete_phased_release`                                                       | Remove phased release before rollout (confirm required)                               |

### ASC TestFlight

Beta distribution management. See [TestFlight](/docs/app-store-connect-testflight).

| Tool                                                                                                                                                     | Description                                                        |
| -------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------ |
| `asc_list_beta_groups` / `asc_create_beta_group` / `asc_delete_beta_group`                                                                               | Manage beta groups (public link support)                           |
| `asc_update_beta_group_membership`                                                                                                                       | Add/remove builds or testers in a group                            |
| `asc_list_beta_testers` / `asc_create_beta_tester` / `asc_delete_beta_tester`                                                                            | Manage testers                                                     |
| `asc_invite_beta_tester`                                                                                                                                 | Resend a tester invitation                                         |
| `asc_list_beta_app_localizations` / `asc_create_beta_app_localization` / `asc_update_beta_app_localization`                                              | TestFlight Test Information per locale                             |
| `asc_list_beta_build_localizations` / `asc_create_beta_build_localization` / `asc_update_beta_build_localization` / `asc_delete_beta_build_localization` | "What to Test" notes per build                                     |
| `asc_get_beta_review_detail` / `asc_update_beta_review_detail`                                                                                           | Beta review contact and demo account                               |
| `asc_get_build_beta_detail` / `asc_update_build_beta_detail`                                                                                             | Build TestFlight state and auto-notify                             |
| `asc_get_beta_review_submission` / `asc_submit_beta_review`                                                                                              | External beta review status / submit                               |
| `asc_cancel_beta_review`                                                                                                                                 | Withdraw from beta review by expiring the build (confirm required) |

### ASC Monetization & Pricing

IAPs, subscriptions, price schedules, availability. See [Monetization & Pricing](/docs/app-store-connect-monetization).

| Tool                                                                                                                    | Description                                    |
| ----------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------- |
| `asc_list_iaps` / `asc_get_iap` / `asc_create_iap` / `asc_update_iap`                                                   | In-app purchase products (v2)                  |
| `asc_list_iap_localizations` / `asc_create_iap_localization` / `asc_update_iap_localization`                            | IAP display names and descriptions             |
| `asc_get_iap_price_schedule` / `asc_list_iap_price_points` / `asc_replace_iap_price_schedule`                           | IAP pricing (replace requires confirm)         |
| `asc_list_subscription_groups` / `asc_create_subscription_group`                                                        | Subscription groups                            |
| `asc_list_subscriptions` / `asc_get_subscription` / `asc_create_subscription` / `asc_update_subscription`               | Auto-renewable subscriptions                   |
| `asc_list_subscription_localizations` / `asc_create_subscription_localization` / `asc_update_subscription_localization` | Subscription localizations                     |
| `asc_list_subscription_price_points` / `asc_create_subscription_price`                                                  | Subscription pricing (supports grandfathering) |
| `asc_get_app_availability` / `asc_update_app_availability` / `asc_update_territory_availability`                        | Territory availability                         |
| `asc_get_app_price_schedule` / `asc_list_app_price_points` / `asc_replace_app_price_schedule`                           | App pricing                                    |

<Tip>
  ASC tools work with your **connected App Store Connect account** (connect once in [appeeky.com → Settings → Integrations](https://appeeky.com)), or pass `issuer_id`, `key_id`, and `private_key` per call. See [App Store Connect Overview](/docs/app-store-connect-overview#authentication). Destructive tools require `confirm: true`.
</Tip>

### Google Play Console (requires your service account)

Owned Google Play apps — separate from public `platform=google` ASO data. Connect once at `POST /v1/connect/google-play/credentials`, or pass optional per-call credentials (`service_account_json`, or `client_email` + `private_key`) to the MCP tools.

| Tool                                          | Description                                                         |
| --------------------------------------------- | ------------------------------------------------------------------- |
| `google_play_credentials_status`              | Whether Google Play is connected on your account                    |
| `google_play_list_apps`                       | List apps visible to the Play service account                       |
| `google_play_list_reviews`                    | List owned-app Play reviews                                         |
| `google_play_get_review`                      | Get one review by ID                                                |
| `google_play_reply_review`                    | Reply to or update a review response                                |
| `google_play_get_vitals_metric`               | Get Android vitals metric metadata/freshness                        |
| `google_play_query_vitals`                    | Query Android vitals metrics                                        |
| `google_play_list_anomalies`                  | List vitals anomalies                                               |
| `google_play_list_subscriptions`              | List subscription products                                          |
| `google_play_list_one_time_products`          | List one-time products                                              |
| `google_play_get_release_filter_options`      | Release/version filters for Reporting API queries                   |
| `google_play_list_tracks`                     | List release tracks                                                 |
| `google_play_get_track`                       | Get one release track                                               |
| `google_play_list_track_releases`             | List releases on a track                                            |
| `google_play_update_track`                    | Patch a track; supports `validate_only`                             |
| `google_play_list_listings`                   | List store listing localizations                                    |
| `google_play_get_listing`                     | Get one localized store listing                                     |
| `google_play_update_listing`                  | Patch title/description/video; supports `validate_only`             |
| `google_play_list_report_objects`             | List GCS report files for sales, earnings, stats, store performance |
| `google_play_get_report_object`               | Get one report object metadata                                      |
| `google_play_import_store_performance_report` | Import one GCS stats CSV into synced analytics data                 |
| `google_play_import_reports`                  | Bulk-import GCS stats reports by prefix                             |
| `google_play_analytics_overview`              | Imported Play analytics overview across apps                        |
| `google_play_app_analytics`                   | Imported Play analytics metrics for one app                         |
| `google_play_sync_app_vitals`                 | Sync crash/ANR vitals into synced analytics data                    |
| `google_play_app_analytics_sources`           | Traffic source, country, and UTM breakdowns                         |
| `google_play_app_search_terms`                | Play Console search-term visitors, acquisitions, and conversion     |

<Tip>
  For Play installs, ratings, crashes, search-term, and store-listing conversion reports, use `google_play_import_reports` after saving a `reportsBucket`, or discover files with `google_play_list_report_objects`. Report bucket names usually start with `pubsite_prod_`.
</Tip>

### Apple Search Ads

Paid App Store search campaigns — **separate** from App Store Connect. Connect once at `POST /v1/connect/apple-ads/credentials`, then manage your org via REST or MCP with only your Appeeky API key.

**Coverage:** credentials · campaigns & ad groups (list + pause/resume/budget) · targeting keywords (list, find, create, update, delete, recommendations, bid suggestions) · negative keywords (campaign + ad group CRUD) · keyword performance + search terms reports.

See [Apple Search Ads](/docs/apple-search-ads) for full endpoint reference and examples.

| Tool                                    | Description                                                          |
| --------------------------------------- | -------------------------------------------------------------------- |
| `asa_credentials_status`                | Whether Search Ads is connected on your account                      |
| `asa_list_campaigns`                    | List campaigns (IDs, names, status, budget)                          |
| `asa_update_campaign`                   | Enable/pause campaign or update daily budget                         |
| `asa_list_adgroups`                     | Ad groups inside a campaign                                          |
| `asa_update_adgroup`                    | Enable/pause ad group or update default bid                          |
| `asa_list_targeting_keywords`           | List targeting keywords in an ad group                               |
| `asa_get_targeting_keyword`             | Get one targeting keyword by ID                                      |
| `asa_find_targeting_keywords`           | Find targeting keywords across a campaign                            |
| `asa_create_targeting_keywords`         | Bulk-create targeting keywords                                       |
| `asa_update_targeting_keywords`         | Bulk-update keyword bid / status                                     |
| `asa_delete_targeting_keywords`         | Delete targeting keywords                                            |
| `asa_targeting_keyword_recommendations` | Apple keyword suggestions                                            |
| `asa_bid_recommendations`               | Suggested bids for keyword texts                                     |
| `asa_profitability`                     | Join Apple Ads spend with RevenueCat revenue, profit, and ROAS       |
| `asa_playbook_status`                   | Integration readiness for ROAS analysis                              |
| `asa_admaxxing_recommendations`         | Scale/pause recommendations, attribution sample, review country gate |
| `asa_review_country_gate`               | App Store rating vs active campaign countries                        |
| `asa_list_campaign_negative_keywords`   | List campaign-level negative keywords                                |
| `asa_find_campaign_negative_keywords`   | Find campaign negative keywords                                      |
| `asa_create_campaign_negative_keywords` | Create campaign negative keywords                                    |
| `asa_update_campaign_negative_keywords` | Update campaign negative keywords                                    |
| `asa_delete_campaign_negative_keywords` | Delete campaign negative keywords                                    |
| `asa_list_adgroup_negative_keywords`    | List ad group negative keywords                                      |
| `asa_find_adgroup_negative_keywords`    | Find ad group negative keywords                                      |
| `asa_create_adgroup_negative_keywords`  | Create ad group negative keywords                                    |
| `asa_update_adgroup_negative_keywords`  | Update ad group negative keywords                                    |
| `asa_delete_adgroup_negative_keywords`  | Delete ad group negative keywords                                    |
| `asa_report_keywords`                   | Keyword performance: impressions, taps, installs, spend              |
| `asa_report_search_terms`               | Real search queries users typed before tapping your ad               |

<Tip>
  **Indie plan or higher.** Requires an [Apple Search Ads](https://searchads.apple.com) API key (not your ASC key). Optional per-call credentials: `client_id`, `team_id`, `key_id`, `org_id`, `private_key`.
</Tip>

### AI Visibility (LLM mind-share tracking)

How often your app is recommended by AI assistants — ChatGPT, Claude, Gemini, and Perplexity — for the intents users actually search for, partitioned per country and per model.

| Tool                                                   | Description                                                                        |
| ------------------------------------------------------ | ---------------------------------------------------------------------------------- |
| `ai_visibility_overview`                               | Composite score, sentiment, intent coverage, and prior-period delta                |
| `ai_visibility_intents`                                | All tracked intents with per-intent visibility, sentiment, and average position    |
| `ai_visibility_intent_detail`                          | One intent + its prompts + the latest AI answers per prompt                        |
| `ai_visibility_competitors`                            | Apps that AI recommends instead of (or alongside) yours over the last N days       |
| `ai_visibility_trend`                                  | Daily time series — app-level or scoped to a single intent                         |
| `ai_visibility_answer`                                 | Verbatim raw model output, extracted app mentions in rank order, citations         |
| `ai_visibility_settings_get`                           | Current config + tier policy + AI Visibility credit budget                         |
| `ai_visibility_settings_update`                        | Toggle enabled/models/cadence (tier-capped, 0 credits)                             |
| `ai_visibility_intent_create` / `_update` / `_archive` | Manually manage tracked intents (0 credits)                                        |
| `ai_visibility_prompt_create` / `_update` / `_archive` | Manually manage prompts under an intent (0 credits)                                |
| `ai_visibility_bootstrap`                              | Auto-generate intents+prompts from App Store metadata, then run an initial scan    |
| `ai_visibility_scan`                                   | Run an on-demand scan across every active prompt × enabled model (dynamic credits) |

<Tip>
  **Indie plan or higher.** AI Visibility uses a separate credit pool from API credits — see [AI Visibility Overview](/docs/ai-visibility-overview). Bootstrap and Scan are fire-and-forget queued tasks; they return a `taskRunId` immediately and write results back as scans finish.
</Tip>

### Growth Channels (Reddit lead generation)

Scan subreddits for high-intent posts, score buying intent with AI, draft replies, and post/schedule via Composio Reddit OAuth.

| Tool                                                             | Description                                             |
| ---------------------------------------------------------------- | ------------------------------------------------------- |
| `growth_channels_list`                                           | Channel registry + Reddit connect status                |
| `growth_reddit_connect_status`                                   | Whether Reddit is connected for posting/scans           |
| `growth_reddit_connect_start`                                    | Start Composio OAuth (`authorizeUrl`)                   |
| `growth_reddit_disconnect`                                       | Disconnect Reddit                                       |
| `growth_reddit_subscriptions`                                    | User's subscribed subreddits                            |
| `growth_projects_list` / `_get`                                  | List or fetch Growth projects                           |
| `growth_projects_bootstrap`                                      | Suggest subreddits + config from an app (3 API credits) |
| `growth_projects_create` / `_update`                             | Create or patch a project                               |
| `growth_projects_scan`                                           | Queue a manual inbox scan (once per 24h per project)    |
| `growth_projects_stats`                                          | Funnel + budget stats                                   |
| `growth_opportunities_list` / `_get`                             | Reddit inbox (filter by status, urgency, min score)     |
| `growth_opportunities_review`                                    | Approve or dismiss                                      |
| `growth_opportunities_regenerate_draft`                          | LLM-generate reply draft                                |
| `growth_opportunities_post_reply`                                | Post or schedule a comment via Composio                 |
| `growth_opportunities_mark_replied`                              | Mark manually posted (paste comment URL)                |
| `growth_scheduled_posts_list` / `_create` / `_cancel` / `_retry` | Standalone scheduled Reddit posts                       |

<Tip>
  **Available to all signed-in users.** See [Growth Channels overview](/docs/growth-channels) and [Reddit Growth](/docs/growth-channels-reddit). Reddit must be connected (`growth_reddit_connect_start`) before `growth_opportunities_post_reply` or `growth_scheduled_posts_create`. Most tools cost 0 API credits; bootstrap costs 3. New accounts should follow [Reddit account warmup](/docs/reddit-account-warmup) before standalone scheduled posts.
</Tip>

### RevenueCat (your credentials: `X-RC-Key` / `X-RC-Project`)

| Tool                                                          | Description                                                                                 |
| ------------------------------------------------------------- | ------------------------------------------------------------------------------------------- |
| `rc_overview`                                                 | Snapshot: MRR, actives, trials, revenue, etc.                                               |
| `rc_chart_options`                                            | Valid filters (countries, products, …) for a chart name                                     |
| `rc_revenue`, `rc_mrr`, `rc_active_subscriptions`, `rc_churn` | Common chart shortcuts                                                                      |
| `rc_chart`                                                    | Generic chart by name                                                                       |
| `rc_attribution_summary`                                      | Sample customers with Apple Search Ads attribution; aggregate by keyword, campaign, country |
| `rc_customer_attributes`                                      | Attribution and custom attributes for one RevenueCat customer                               |

## Example Prompts

Once connected, ask your AI assistant in natural language:

**Market research:**

```
Show me the top 10 apps for "meditation" and analyze
their ratings and review counts.
```

**Keyword intelligence:**

```
Find keyword suggestions for "screen recorder" and
tell me which ones have high volume but low difficulty.
```

**Competitor analysis:**

```
Compare keyword overlap between Headspace (id: 493145008)
and Calm (id: 571800810). What keywords is Calm ranking
for that Headspace is missing?
```

**App intelligence:**

```
Give me the full intelligence report for Duolingo.
How many downloads does it get? What's the revenue estimate?
```

**Featured apps:**

```
What apps are featured on the App Store today?
What's the App of the Day and Game of the Day?
```

**Trending keywords:**

```
What keywords are trending on the App Store this week?
Show me keywords with the highest growth in the US.
```

**Downloads to top:**

```
How many downloads does it take to reach the top 10
in the Games category? Show me the current apps at each rank.
```

**New releases:**

```
What new apps were released in the last 3 days?
Are any of them in the Games category?
```

**ASO audit:**

```
Run a full ASO audit on Duolingo (id: 570060128).
What's its score and what should they improve?
```

**ASO decision brief (orchestration):**

```
Give me an ASO decision brief for Brilliant (id: 913335252) in the US.
Summarize prioritized actions and top keyword opportunities.
```

**ASO metadata optimization:**

```
I want to optimize my app (id: 913335252) for the keywords
"learn math", "science education", and "brain training".
Suggest optimized metadata for Apple and Google.
```

**ASC Metrics (synced Sales & Trends):**

```
What's my app's revenue and downloads for the last 30 days?
Use asc_get_metrics or asc_get_app_metrics.
```

**Keyword opportunities:**

```
Find keyword opportunities for Headspace (id: 493145008).
Which keywords should they target next?
```

**Market movers:**

```
Which apps gained the most ranks in the top-free chart today?
Show me the top gainers and any new entries in Games.
```

**Market activity:**

```
What's happening in the App Store right now?
Show me the latest chart activity for the US free apps chart.
```

**ASO competitor analysis:**

```
Run a full ASO competitor report comparing Brilliant (id: 913335252)
vs Khan Academy (id: 1157115554). Where is Brilliant falling behind?
```

**App Store Connect reviews (synced + write-through):**

```
Find every unanswered 1- or 2-star review for app 6759740679 from the last
two weeks that mentions "crash" or "bug", and reply with an empathetic
message that points to support@example.com. Then show me the updated
unanswered count.
```

**Subscription health (MRR / Churn):**

```
Pull subscription metrics for the last 90 days. Tell me whether MRR
growth is being driven by new subscribers, lower churn, or higher
trial conversion — and which app contributes most to MRR.
```

**Apple Search Ads — real search queries:**

```
List my Search Ads campaigns, then pull the search terms report for
the main campaign over the last 30 days. Which queries have high
impressions but few installs? Suggest ASO keywords to add.
```

**Apple Search Ads — keyword efficiency:**

```
For campaign 2143596801, show keyword performance for the last month.
Which keywords have the best tap-through rate and lowest cost per install?
```

**AI Visibility — how often does AI recommend my app?**

```
For app 6759740679 in the US, give me my AI Visibility on ChatGPT:
overall score, the 3 lowest-visibility intents, and the top 5 apps
ChatGPT recommends instead of mine.
```

**AI Visibility — see exactly what the model said:**

```
For app 6759740679, find the worst-performing intent on ChatGPT,
pick its top prompt, and show me the verbatim ChatGPT response
(including which competitor apps it ranked above mine).
```

**AI Visibility — track a new intent manually:**

```
Add a new AI Visibility intent for app 6759740679 in the US:
"Find a privacy-respecting note-taking app for students".
Then add 3 prompts a real user would type for it (mix of
unbranded and comparison styles), and run a scan.
```

## Tool Reference

### search\_apps

Search the App Store by keyword or numeric App ID.

| Parameter | Type   | Default  | Description              |
| --------- | ------ | -------- | ------------------------ |
| `query`   | string | required | Search keyword or App ID |
| `country` | string | `us`     | ISO country code         |
| `limit`   | number | `20`     | Max results (1-50)       |

### get\_app

Get metadata for a specific app.

| Parameter  | Type   | Default  | Description                                        |
| ---------- | ------ | -------- | -------------------------------------------------- |
| `app_id`   | string | required | Apple App ID (numeric) or Google Play package name |
| `platform` | string | `apple`  | `apple` or `google`                                |
| `country`  | string | `us`     | ISO country code                                   |
| `lang`     | string | `en`     | Google Play language code when `platform=google`   |

### get\_app\_intelligence

Full intelligence report with downloads, revenue, and sentiment.

| Parameter  | Type   | Default  | Description                                      |
| ---------- | ------ | -------- | ------------------------------------------------ |
| `app_id`   | string | required | Apple App ID or Google Play package name         |
| `platform` | string | `apple`  | `apple` or `google`                              |
| `country`  | string | `us`     | ISO country code                                 |
| `lang`     | string | `en`     | Google Play language code when `platform=google` |

### get\_app\_similar

Similar and competing apps. Apple uses the 3-layer matching pipeline; Google uses public Play Store similar apps.

| Parameter  | Type   | Default  | Description                                      |
| ---------- | ------ | -------- | ------------------------------------------------ |
| `app_id`   | string | required | Apple App ID or Google Play package name         |
| `platform` | string | `apple`  | `apple` or `google`                              |
| `country`  | string | `us`     | ISO country code                                 |
| `lang`     | string | `en`     | Google Play language code when `platform=google` |

### get\_keyword\_ranks

All apps ranking for a keyword with metadata (rating, reviews, category, price).

| Parameter   | Type   | Default  | Description                                        |
| ----------- | ------ | -------- | -------------------------------------------------- |
| `keyword`   | string | required | Keyword to search                                  |
| `platform`  | string | `apple`  | `apple` or `google`                                |
| `country`   | string | `us`     | ISO country code                                   |
| `countries` | string | —        | Comma-separated ISO codes for multi-country lookup |
| `device`    | string | `iphone` | Apple only: `iphone` or `ipad`; ignored for Google |
| `lang`      | string | `en`     | Google Play language code when `platform=google`   |

### get\_keyword\_suggestions

Keyword ideas from a seed term with optional volume/difficulty metrics.

| Parameter  | Type    | Default  | Description                                      |
| ---------- | ------- | -------- | ------------------------------------------------ |
| `term`     | string  | required | Seed term                                        |
| `platform` | string  | `apple`  | `apple` or `google`                              |
| `country`  | string  | `us`     | ISO country code                                 |
| `lang`     | string  | `en`     | Google Play language code when `platform=google` |
| `expand`   | boolean | `false`  | Long-tail expansion                              |
| `metrics`  | boolean | `true`   | Include volume/difficulty                        |

### get\_keyword\_metrics

Detailed metrics for a keyword.

**Burst rate limit:** 10 requests per minute per API key (sliding window). This is separate from monthly credits. HTTP `429` responses include a `Retry-After` header (seconds).

**Best practices for agents:**

* Batch storefronts: `countries=us,gb,de` in **one** call instead of three separate calls.
* Do not loop over large keyword lists sequentially — prioritize high-value terms and space calls out.
* On `429`, wait for `Retry-After` then retry; use `get_keyword_suggestions` or `get_app_keywords` for broader discovery.

| Parameter   | Type   | Default  | Description                                                                      |
| ----------- | ------ | -------- | -------------------------------------------------------------------------------- |
| `keyword`   | string | required | Keyword to analyze                                                               |
| `platform`  | string | `apple`  | `apple` or `google`                                                              |
| `country`   | string | `us`     | ISO country code (ignored if `countries` is set)                                 |
| `lang`      | string | `en`     | Google Play language code when `platform=google`                                 |
| `countries` | string | —        | Comma-separated ISO codes (e.g. `us,gb,de`) — one burst slot for all storefronts |

### get\_app\_keywords

All keywords an app ranks for with trend data.

| Parameter      | Type    | Default  | Description                                      |
| -------------- | ------- | -------- | ------------------------------------------------ |
| `app_id`       | string  | required | Apple App ID or Google Play package name         |
| `platform`     | string  | `apple`  | `apple` or `google`                              |
| `country`      | string  | `us`     | ISO country code                                 |
| `lang`         | string  | `en`     | Google Play language code when `platform=google` |
| `include_weak` | boolean | `false`  | Include ranks 21-50                              |
| `force`        | boolean | `false`  | Force rediscovery where supported                |

### get\_keyword\_trends

Historical rank data for a keyword + app pair.

| Parameter  | Type   | Default  | Description                                      |
| ---------- | ------ | -------- | ------------------------------------------------ |
| `app_id`   | string | required | Apple App ID or Google Play package name         |
| `platform` | string | `apple`  | `apple` or `google`                              |
| `keyword`  | string | required | Keyword to track                                 |
| `country`  | string | `us`     | ISO country code                                 |
| `lang`     | string | `en`     | Google Play language code when `platform=google` |
| `days`     | number | `30`     | History length (7-90)                            |

### compare\_keywords

Compare keyword rankings between two Apple apps or two Google Play apps.

| Parameter       | Type   | Default  | Description                                         |
| --------------- | ------ | -------- | --------------------------------------------------- |
| `app_id`        | string | required | Your Apple App ID or Google Play package name       |
| `competitor_id` | string | required | Competitor Apple App ID or Google Play package name |
| `platform`      | string | `apple`  | `apple` or `google`                                 |
| `country`       | string | `us`     | ISO country code                                    |

### compare\_keyword\_cluster

Multi-competitor keyword lifecycle for Apple or Google Play (your app + 1–5 competitors).

| Parameter     | Type   | Default  | Description                                                                 |
| ------------- | ------ | -------- | --------------------------------------------------------------------------- |
| `app_id`      | string | required | Your Apple App ID or Google Play package name                               |
| `platform`    | string | `apple`  | `apple` or `google`                                                         |
| `competitors` | string | required | Comma-separated competitor Apple App IDs or Google Play package names (1–5) |
| `country`     | string | `us`     | ISO country code                                                            |

### get\_keyword\_ranks\_history

Historical apps-per-day counts for a tracked keyword.

| Parameter  | Type   | Default  | Description                                        |
| ---------- | ------ | -------- | -------------------------------------------------- |
| `keyword`  | string | required | Keyword                                            |
| `platform` | string | `apple`  | `apple` or `google`                                |
| `country`  | string | `us`     | ISO country code                                   |
| `device`   | string | `iphone` | Apple only: `iphone` or `ipad`; ignored for Google |
| `days`     | number | `14`     | Lookback (1–90)                                    |

### get\_api\_usage

Current billing period usage across API, AI Visibility, and creative buckets (0 credits).

| Parameter | Type | Default | Description |
| --------- | ---- | ------- | ----------- |
| *(none)*  | —    | —       | —           |

### get\_categories

List Apple App Store or Google Play categories.

| Parameter  | Type   | Default | Description         |
| ---------- | ------ | ------- | ------------------- |
| `platform` | string | `apple` | `apple` or `google` |

### get\_category\_top

Top apps in a specific category or all categories.

| Parameter  | Type   | Default    | Description                                                               |
| ---------- | ------ | ---------- | ------------------------------------------------------------------------- |
| `genre_id` | string | `all`      | Apple genre ID (e.g. `6014`) or Google category ID (e.g. `TOOLS`, `GAME`) |
| `platform` | string | `apple`    | `apple` or `google`                                                       |
| `country`  | string | `us`       | ISO country code                                                          |
| `lang`     | string | `en`       | Google Play language code when `platform=google`                          |
| `chart`    | string | `top-free` | `top-free`, `top-paid`, or `top-grossing`                                 |
| `limit`    | number | `25`       | Max results (1-100)                                                       |

### get\_downloads\_to\_top

Apple-only. Estimated daily downloads needed to reach specific chart positions (#1, #5, #10, #25, #50, #100).

| Parameter  | Type   | Default    | Description                               |
| ---------- | ------ | ---------- | ----------------------------------------- |
| `genre_id` | string | `all`      | Genre ID (e.g. `6014` for Games)          |
| `country`  | string | `us`       | ISO country code                          |
| `chart`    | string | `top-free` | `top-free`, `top-paid`, or `top-grossing` |

### get\_trending\_keywords

Keywords with the fastest-growing reach in Apple or Google stored rank data.

| Parameter  | Type   | Default | Description                    |
| ---------- | ------ | ------- | ------------------------------ |
| `platform` | string | `apple` | `apple` or `google`            |
| `country`  | string | `us`    | ISO country code               |
| `days`     | number | `7`     | Trend window in days (1-30)    |
| `limit`    | number | `50`    | Max keywords to return (1-100) |

### get\_featured\_apps

Apps currently featured on the App Store Today tab.

| Parameter | Type   | Default | Description      |
| --------- | ------ | ------- | ---------------- |
| `country` | string | `us`    | ISO country code |

### get\_new\_releases

Recently released apps.

| Parameter  | Type   | Default | Description                    |
| ---------- | ------ | ------- | ------------------------------ |
| `country`  | string | `us`    | ISO country code               |
| `max_days` | number | `7`     | Show releases from last N days |

### aso\_full\_audit

Full ASO health audit with scoring, breakdown, and recommendations.

| Parameter  | Type   | Default  | Description                                      |
| ---------- | ------ | -------- | ------------------------------------------------ |
| `app_id`   | string | required | Apple App ID or Google Play package name         |
| `platform` | string | `apple`  | `apple` or `google`                              |
| `country`  | string | `us`     | ISO country code                                 |
| `lang`     | string | `en`     | Google Play language code when `platform=google` |

### aso\_validate\_metadata

Validate metadata against Apple or Google character limits.

| Parameter           | Type   | Default  | Description                           |
| ------------------- | ------ | -------- | ------------------------------------- |
| `platform`          | string | required | `apple` or `google`                   |
| `title`             | string | optional | App title                             |
| `subtitle`          | string | optional | Apple subtitle                        |
| `keywords`          | string | optional | Apple keyword field (comma-separated) |
| `short_description` | string | optional | Google short description              |
| `full_description`  | string | optional | Google full description               |

### aso\_suggest\_metadata

Generate optimized metadata from target keywords.

| Parameter  | Type      | Default  | Description           |
| ---------- | --------- | -------- | --------------------- |
| `app_id`   | string    | required | Apple App ID          |
| `keywords` | string\[] | required | Target keywords array |
| `country`  | string    | `us`     | ISO country code      |

### aso\_find\_opportunities

Discover untapped keyword opportunities.

| Parameter | Type   | Default  | Description      |
| --------- | ------ | -------- | ---------------- |
| `app_id`  | string | required | Apple App ID     |
| `country` | string | `us`     | ISO country code |

### aso\_brief

Orchestrated ASO brief: audit + opportunities, storefront readiness score, optional intent clusters, optional multi-country.

| Parameter         | Type    | Default  | Description                                      |
| ----------------- | ------- | -------- | ------------------------------------------------ |
| `app_id`          | string  | required | Apple App ID                                     |
| `country`         | string  | `us`     | ISO country code (ignored if `countries` set)    |
| `countries`       | string  | optional | Comma-separated ISO codes for per-country briefs |
| `fresh`           | boolean | `false`  | Force fresh re-analysis (slower)                 |
| `intent_clusters` | boolean | `false`  | Semantic intent clustering (+2 credits)          |

### aso\_competitor\_report

Deep ASO comparison between two apps.

| Parameter       | Type   | Default  | Description      |
| --------------- | ------ | -------- | ---------------- |
| `app_id`        | string | required | Your app's ID    |
| `competitor_id` | string | required | Competitor's ID  |
| `country`       | string | `us`     | ISO country code |

### get\_app\_screenshots

Get all screenshots for an Apple or Google Play app.

| Parameter  | Type   | Default  | Description                                                                                 |
| ---------- | ------ | -------- | ------------------------------------------------------------------------------------------- |
| `app_id`   | string | required | Apple App ID or Google Play package name                                                    |
| `platform` | string | `apple`  | `apple` or `google`                                                                         |
| `country`  | string | `us`     | ISO country code                                                                            |
| `lang`     | string | `en`     | Google Play language code when `platform=google`                                            |
| `device`   | string | `all`    | Apple device filter: `iphone`, `ipad`, or `all`; Google returns android/phone/tablet groups |

### get\_competitor\_screenshots

Compare screenshots between an app and its competitors.

| Parameter  | Type   | Default  | Description                                      |
| ---------- | ------ | -------- | ------------------------------------------------ |
| `app_id`   | string | required | Apple App ID or Google Play package name         |
| `platform` | string | `apple`  | `apple` or `google`                              |
| `country`  | string | `us`     | ISO country code                                 |
| `lang`     | string | `en`     | Google Play language code when `platform=google` |
| `limit`    | number | `5`      | Number of competitor apps to include (1-10)      |

### get\_category\_screenshots

Get screenshots for top-ranked apps in an Apple App Store or Google Play category.

| Parameter  | Type   | Default    | Description                                                                         |
| ---------- | ------ | ---------- | ----------------------------------------------------------------------------------- |
| `genre_id` | string | `all`      | Apple genre ID (e.g. `6014`) or Google category ID (e.g. `TOOLS`, `GAME`), or `all` |
| `platform` | string | `apple`    | `apple` or `google`                                                                 |
| `country`  | string | `us`       | ISO country code                                                                    |
| `lang`     | string | `en`       | Google Play language code when `platform=google`                                    |
| `chart`    | string | `top-free` | `top-free`, `top-paid`, or `top-grossing`                                           |
| `limit`    | number | `10`       | Number of apps (1-25)                                                               |

### asc\_list\_customer\_reviews

List customer reviews for your app from App Store Connect. Requires ASC credentials.

| Parameter     | Type   | Default  | Description                              |
| ------------- | ------ | -------- | ---------------------------------------- |
| `issuer_id`   | string | required | App Store Connect Issuer ID              |
| `key_id`      | string | required | App Store Connect Key ID                 |
| `private_key` | string | required | App Store Connect private key (PEM)      |
| `app_id`      | string | required | App Store Connect app ID                 |
| `limit`       | number | `50`     | Max results per page (1-200)             |
| `cursor`      | string | optional | Pagination cursor from previous response |

### asc\_respond\_to\_review

Create or update your response to a single customer review. Transparently handles Apple's edit-by-DELETE-then-POST flow — you always make a single tool call.

| Parameter       | Type   | Default  | Description                                                                   |
| --------------- | ------ | -------- | ----------------------------------------------------------------------------- |
| `issuer_id`     | string | optional | App Store Connect Issuer ID (omit if ASC connected on your Appeeky account)   |
| `key_id`        | string | optional | App Store Connect Key ID                                                      |
| `private_key`   | string | optional | App Store Connect private key (PEM)                                           |
| `review_id`     | string | required | Customer review ID (from `asc_search_reviews` or `asc_list_customer_reviews`) |
| `response_body` | string | required | Your response text (max 5970 chars — Apple's hard limit)                      |

### asc\_search\_reviews

Search persisted customer reviews with rich filters. Reads from a synced copy of your App Store Connect reviews — much faster than `asc_list_customer_reviews` and supports filtering Apple's API does not.

| Parameter      | Type    | Default  | Description                                                              |
| -------------- | ------- | -------- | ------------------------------------------------------------------------ |
| `app_id`       | string  | optional | App Store Connect app ID — omit to search across all your connected apps |
| `rating`       | number  | optional | Filter by exact star rating (1–5)                                        |
| `territory`    | string  | optional | ISO 3-letter country code (e.g. `USA`, `GBR`, `DEU`)                     |
| `has_response` | boolean | optional | `true` for answered, `false` for unanswered, omit for both               |
| `q`            | string  | optional | Case-insensitive substring match in title or body                        |
| `limit`        | number  | `50`     | Max results (1–200)                                                      |
| `before`       | string  | optional | ISO timestamp cursor — returns reviews created strictly before this date |

### asc\_reviews\_summary

Aggregated review stats: total count, average rating, star distribution, response rate, top territories.

| Parameter | Type   | Default  | Description                                     |
| --------- | ------ | -------- | ----------------------------------------------- |
| `app_id`  | string | optional | Filter by app — omit for portfolio-wide summary |

### asc\_delete\_review\_response

Delete your developer response to a review (idempotent — calling on a review with no response succeeds with `response: null`).

| Parameter     | Type   | Default  | Description                                         |
| ------------- | ------ | -------- | --------------------------------------------------- |
| `issuer_id`   | string | optional | ASC Issuer ID (omit if connected on Appeeky)        |
| `key_id`      | string | optional | ASC Key ID                                          |
| `private_key` | string | optional | ASC private key (PEM)                               |
| `review_id`   | string | required | Customer review ID whose response should be deleted |

### asc\_refresh\_review

Force-refresh a single review from Apple, bypassing the daily sync. Useful right after responding to confirm the `PUBLISHED` state.

| Parameter     | Type   | Default  | Description                                  |
| ------------- | ------ | -------- | -------------------------------------------- |
| `issuer_id`   | string | optional | ASC Issuer ID (omit if connected on Appeeky) |
| `key_id`      | string | optional | ASC Key ID                                   |
| `private_key` | string | optional | ASC private key (PEM)                        |
| `review_id`   | string | required | Customer review ID to refresh                |

### asc\_subscription\_metrics

SaaS-grade subscription health: MRR, ARR, ARPU, churn rate, trial conversion rate, plus daily event counts (new, canceled, refunded, reactivated, trial starts/conversions, expired). Computed from Apple's SUBSCRIPTION + SUBSCRIPTION\_EVENT reports, FX-converted to USD using historical rates.

| Parameter    | Type   | Default     | Description                                                     |
| ------------ | ------ | ----------- | --------------------------------------------------------------- |
| `app_id`     | string | optional    | App Store Connect app ID — omit to roll up across all your apps |
| `start_date` | string | 30 days ago | ISO date `YYYY-MM-DD`                                           |
| `end_date`   | string | today       | ISO date `YYYY-MM-DD`                                           |

### asc\_get\_app\_sources

App Store Discovery & Engagement breakdown by acquisition source (App Store Search, Browse, App Referrer, Web Referrer, etc.) for a single app — impressions, page views, and per-source conversion rate.

| Parameter | Type   | Default     | Description                        |
| --------- | ------ | ----------- | ---------------------------------- |
| `app_id`  | string | required    | App Store Connect app ID (numeric) |
| `from`    | string | 30 days ago | ISO date `YYYY-MM-DD`              |
| `to`      | string | today       | ISO date `YYYY-MM-DD`              |

### asa\_credentials\_status

Check whether Apple Search Ads credentials are saved for your Appeeky account.

| Parameter | Type | Default | Description                    |
| --------- | ---- | ------- | ------------------------------ |
| *(none)*  | —    | —       | Uses your Appeeky API key only |

### asa\_list\_campaigns

List Search Ads campaigns in your connected organization.

| Parameter     | Type   | Default  | Description                                         |
| ------------- | ------ | -------- | --------------------------------------------------- |
| `client_id`   | string | optional | Search Ads Client ID (omit if connected on Appeeky) |
| `team_id`     | string | optional | Team ID                                             |
| `key_id`      | string | optional | Key ID                                              |
| `org_id`      | string | optional | Org ID                                              |
| `private_key` | string | optional | EC private key PEM                                  |
| `limit`       | number | `50`     | Max campaigns (1–200)                               |
| `offset`      | number | `0`      | Pagination offset                                   |

### asa\_list\_adgroups

List ad groups for a campaign.

| Parameter                   | Type   | Default  | Description                           |
| --------------------------- | ------ | -------- | ------------------------------------- |
| `campaign_id`               | string | required | Campaign ID from `asa_list_campaigns` |
| `client_id` … `private_key` | string | optional | Same as above — omit if connected     |
| `limit`                     | number | `50`     | Max rows (1–200)                      |
| `offset`                    | number | `0`      | Pagination offset                     |

### asa\_update\_campaign

Enable, pause, rename, or set daily budget on a campaign.

| Parameter                   | Type                      | Default  | Description                                    |
| --------------------------- | ------------------------- | -------- | ---------------------------------------------- |
| `campaign_id`               | string                    | required | Campaign ID                                    |
| `status`                    | `"ENABLED"` \| `"PAUSED"` | optional | User-controlled status                         |
| `name`                      | string                    | optional | New name                                       |
| `daily_budget_amount`       | string                    | optional | e.g. `2.00` (requires `daily_budget_currency`) |
| `daily_budget_currency`     | string                    | optional | e.g. `EUR`                                     |
| `client_id` … `private_key` | string                    | optional | Per-call credentials                           |

### asa\_update\_adgroup

Enable, pause, rename, or set default bid on an ad group.

| Parameter                   | Type                      | Default  | Description                                   |
| --------------------------- | ------------------------- | -------- | --------------------------------------------- |
| `campaign_id`               | string                    | required | Campaign ID                                   |
| `ad_group_id`               | string                    | required | Ad group ID                                   |
| `status`                    | `"ENABLED"` \| `"PAUSED"` | optional | User-controlled status                        |
| `name`                      | string                    | optional | New name                                      |
| `default_bid_amount`        | string                    | optional | e.g. `0.56` (requires `default_bid_currency`) |
| `default_bid_currency`      | string                    | optional | e.g. `EUR`                                    |
| `client_id` … `private_key` | string                    | optional | Per-call credentials                          |

### asa\_report\_keywords

Keyword-level performance report for a campaign.

| Parameter                   | Type   | Default  | Description                                           |
| --------------------------- | ------ | -------- | ----------------------------------------------------- |
| `campaign_id`               | string | required | Campaign ID                                           |
| `from`                      | string | optional | Start date `YYYY-MM-DD`                               |
| `to`                        | string | optional | End date `YYYY-MM-DD`                                 |
| `days`                      | number | optional | Trailing window when `from`/`to` omitted (default 30) |
| `limit`                     | number | `50`     | Max rows (1–200)                                      |
| `client_id` … `private_key` | string | optional | Per-call credentials                                  |

### asa\_report\_search\_terms

Search terms report — actual App Store queries that matched your ads.

| Parameter                   | Type   | Default  | Description                  |
| --------------------------- | ------ | -------- | ---------------------------- |
| `campaign_id`               | string | required | Campaign ID                  |
| `from`                      | string | optional | Start date `YYYY-MM-DD`      |
| `to`                        | string | optional | End date `YYYY-MM-DD`        |
| `days`                      | number | optional | Trailing window (default 30) |
| `limit`                     | number | `50`     | Max rows (1–200)             |
| `client_id` … `private_key` | string | optional | Per-call credentials         |

### asa\_profitability

Apple Search Ads spend joined with RevenueCat revenue, profit, and ROAS.

| Parameter                   | Type                                                                         | Default   | Description                                         |
| --------------------------- | ---------------------------------------------------------------------------- | --------- | --------------------------------------------------- |
| `rc_key`                    | string                                                                       | required  | RevenueCat secret API key                           |
| `rc_project`                | string                                                                       | optional  | RevenueCat project ID                               |
| `level`                     | `"keyword"` \| `"campaign"` \| `"adgroup"` \| `"search_term"` \| `"country"` | `keyword` | Rollup level                                        |
| `campaign_ids`              | string\[]                                                                    | optional  | Campaign IDs to scan. Omit to scan first campaigns. |
| `from`                      | string                                                                       | optional  | Start date `YYYY-MM-DD`                             |
| `to`                        | string                                                                       | optional  | End date `YYYY-MM-DD`                               |
| `days`                      | number                                                                       | `14`      | Trailing day window                                 |
| `limit`                     | number                                                                       | `200`     | Max Apple rows per campaign                         |
| `campaign_limit`            | number                                                                       | `25`      | Max campaigns when `campaign_ids` is omitted        |
| `country`                   | string                                                                       | optional  | ISO country code (e.g. `US`)                        |
| `currency`                  | string                                                                       | `USD`     | RevenueCat currency                                 |
| `min_spend`                 | number                                                                       | `20`      | Spend threshold for insight buckets                 |
| `insights`                  | boolean                                                                      | `true`    | Include optimization insights                       |
| `client_id` … `private_key` | string                                                                       | optional  | Per-call Apple Search Ads credentials               |

Use this for questions like "what keywords are wasting spend?", "which keywords have the best ROAS?", and "what should I scale this week?".

### asa\_playbook\_status

Check whether RevenueCat, Apple Search Ads, and Apple AdServices attribution are configured for ROAS analysis.

| Parameter    | Type   | Default  | Description                                                     |
| ------------ | ------ | -------- | --------------------------------------------------------------- |
| `rc_key`     | string | optional | RevenueCat secret API key. Uses saved credentials when omitted. |
| `rc_project` | string | optional | RevenueCat project ID                                           |

### asa\_admaxxing\_recommendations

Bundled optimization output: setup checklist, scale/pause candidates from profitability, RevenueCat attribution sample, and review country gate warnings.

| Parameter                   | Type                                       | Default   | Description                              |
| --------------------------- | ------------------------------------------ | --------- | ---------------------------------------- |
| `rc_key`                    | string                                     | required  | RevenueCat secret API key                |
| `rc_project`                | string                                     | optional  | RevenueCat project ID                    |
| `app_id`                    | string                                     | optional  | App Store app ID for review country gate |
| `level`                     | `"keyword"` \| `"campaign"` \| `"adgroup"` | `keyword` | Profitability rollup                     |
| `country`                   | string                                     | optional  | ISO country filter                       |
| `days`                      | number                                     | `14`      | Trailing window                          |
| `min_spend`                 | number                                     | `20`      | Spend threshold for insights             |
| `min_rating`                | number                                     | `4.5`     | Rating threshold for country warnings    |
| `client_id` … `private_key` | string                                     | optional  | Per-call Apple Search Ads credentials    |

See [ROAS Workflow](/docs/apple-search-ads-roas-workflow) for the full response shape.

### asa\_review\_country\_gate

Compare App Store ratings by country against active Apple Search Ads campaign targeting.

| Parameter                   | Type   | Default  | Description                            |
| --------------------------- | ------ | -------- | -------------------------------------- |
| `app_id`                    | string | required | App Store numeric app ID               |
| `min_rating`                | number | `4.5`    | Flag countries at or below this rating |
| `client_id` … `private_key` | string | optional | Per-call Apple Search Ads credentials  |

### rc\_attribution\_summary

Sample RevenueCat customers and aggregate attributed revenue by media source, campaign, keyword, and country.

| Parameter    | Type   | Default  | Description                     |
| ------------ | ------ | -------- | ------------------------------- |
| `rc_key`     | string | required | RevenueCat secret API key       |
| `rc_project` | string | optional | RevenueCat project ID           |
| `limit`      | number | `50`     | Max customers to sample (1–100) |

See [RevenueCat Attribution](/docs/revenuecat-attribution).

### rc\_customer\_attributes

Read all attributes for one RevenueCat customer, including parsed Apple Search Ads attribution fields.

| Parameter     | Type   | Default  | Description               |
| ------------- | ------ | -------- | ------------------------- |
| `rc_key`      | string | required | RevenueCat secret API key |
| `rc_project`  | string | optional | RevenueCat project ID     |
| `customer_id` | string | required | RevenueCat customer ID    |

***

## My Apps Tools

Manage your [appeeky.com](https://appeeky.com) apps, competitors, tracked keywords, metadata versions, and reports directly from your AI assistant. All tools cost **0 credits** and require an API key generated from **appeeky.com → Settings → API Key**.

<Note>
  These tools operate on your **appeeky.com** account data — the same data visible in the web dashboard. The key must have the `apps:read` scope for reads and `apps:write` for writes (unrestricted keys have both by default).
</Note>

### list\_my\_apps

List all apps in your appeeky.com tracked app list.

| Parameter | Type | Default | Description                   |
| --------- | ---- | ------- | ----------------------------- |
| *(none)*  | —    | —       | Returns all your tracked apps |

### add\_my\_app

Add an app to your tracked list by its App Store ID.

| Parameter       | Type      | Default  | Description                              |
| --------------- | --------- | -------- | ---------------------------------------- |
| `appId`         | number    | required | Numeric Apple App Store ID               |
| `appName`       | string    | optional | Display name                             |
| `developerName` | string    | optional | Developer name                           |
| `bundleId`      | string    | optional | Bundle identifier                        |
| `subtitle`      | string    | optional | App subtitle                             |
| `description`   | string    | optional | App description                          |
| `languages`     | string\[] | optional | Supported language codes                 |
| `isLive`        | boolean   | optional | Whether the app is live on the App Store |
| `category`      | string    | optional | App category                             |
| `platform`      | string    | `ios`    | `ios`, `macos`, or `tvos`                |

### update\_my\_app

Update metadata for an existing app in your tracked list.

| Parameter     | Type      | Default  | Description                               |
| ------------- | --------- | -------- | ----------------------------------------- |
| `appId`       | number    | required | Numeric App Store ID of the app to update |
| `appName`     | string    | optional | New display name                          |
| `isLive`      | boolean   | optional | Live status                               |
| `category`    | string    | optional | App category                              |
| `subtitle`    | string    | optional | App subtitle                              |
| `description` | string    | optional | App description                           |
| `languages`   | string\[] | optional | Supported language codes                  |

### delete\_my\_app

Remove an app from your tracked list.

| Parameter | Type   | Default  | Description                               |
| --------- | ------ | -------- | ----------------------------------------- |
| `appId`   | number | required | Numeric App Store ID of the app to remove |

***

### list\_competitors

List competitor apps tracked for one of your apps.

| Parameter | Type   | Default  | Description                              |
| --------- | ------ | -------- | ---------------------------------------- |
| `appId`   | number | required | Numeric App Store ID of your tracked app |

### add\_competitor

Add a competitor app to one of your tracked apps.

| Parameter         | Type   | Default  | Description                     |
| ----------------- | ------ | -------- | ------------------------------- |
| `appId`           | number | required | Your tracked app's App Store ID |
| `competitorAppId` | number | required | Competitor's App Store ID       |
| `competitorName`  | string | optional | Display name for the competitor |

### remove\_competitor

Remove a competitor from one of your tracked apps.

| Parameter         | Type   | Default  | Description                         |
| ----------------- | ------ | -------- | ----------------------------------- |
| `appId`           | number | required | Your tracked app's App Store ID     |
| `competitorAppId` | number | required | Competitor's App Store ID to remove |

***

### list\_tracked\_keywords

List keywords tracked for one of your apps.

| Parameter | Type   | Default  | Description                              |
| --------- | ------ | -------- | ---------------------------------------- |
| `appId`   | number | required | Numeric App Store ID of your tracked app |

### add\_tracked\_keyword

Start tracking a keyword for one of your apps.

| Parameter  | Type   | Default  | Description                          |
| ---------- | ------ | -------- | ------------------------------------ |
| `appId`    | number | required | Your tracked app's App Store ID      |
| `keyword`  | string | required | Keyword to track (e.g. `"aso tool"`) |
| `country`  | string | `us`     | ISO country code                     |
| `language` | string | `en`     | ISO language code                    |

### remove\_tracked\_keyword

Stop tracking a keyword.

| Parameter   | Type   | Default  | Description                                                    |
| ----------- | ------ | -------- | -------------------------------------------------------------- |
| `appId`     | number | required | Your tracked app's App Store ID                                |
| `keywordId` | string | required | UUID of the tracked keyword row (from `list_tracked_keywords`) |

***

### list\_app\_versions

List saved metadata versions for one of your apps.

| Parameter | Type   | Default  | Description                              |
| --------- | ------ | -------- | ---------------------------------------- |
| `appId`   | number | required | Numeric App Store ID of your tracked app |

### create\_app\_version

Save a new set of ASO metadata as a named version.

| Parameter     | Type   | Default  | Description                                   |
| ------------- | ------ | -------- | --------------------------------------------- |
| `appId`       | number | required | Your tracked app's App Store ID               |
| `versionName` | string | required | Label for this version (e.g. `"v2.1 Spring"`) |
| `title`       | string | optional | App title (max 30 chars)                      |
| `subtitle`    | string | optional | App subtitle (max 30 chars)                   |
| `description` | string | optional | Full app description                          |
| `keywords`    | string | optional | Comma-separated keyword field                 |
| `language`    | string | `en-US`  | Locale code                                   |

### update\_app\_version

Update fields on an existing metadata version.

| Parameter     | Type   | Default  | Description                     |
| ------------- | ------ | -------- | ------------------------------- |
| `appId`       | number | required | Your tracked app's App Store ID |
| `versionId`   | string | required | UUID of the version to update   |
| `versionName` | string | optional | New label                       |
| `title`       | string | optional | Updated title                   |
| `subtitle`    | string | optional | Updated subtitle                |
| `description` | string | optional | Updated description             |
| `keywords`    | string | optional | Updated keyword field           |

### release\_app\_version

Mark a metadata version as the currently released version.

| Parameter   | Type   | Default  | Description                             |
| ----------- | ------ | -------- | --------------------------------------- |
| `appId`     | number | required | Your tracked app's App Store ID         |
| `versionId` | string | required | UUID of the version to mark as released |

***

### list\_reports

List saved ASO reports for your account.

| Parameter | Type   | Default  | Description                                            |
| --------- | ------ | -------- | ------------------------------------------------------ |
| `appId`   | number | optional | Filter by a specific App Store ID                      |
| `type`    | string | optional | Filter by report type (e.g. `aso_audit`, `competitor`) |
| `limit`   | number | `20`     | Max results (max `100`)                                |
| `offset`  | number | `0`      | Pagination offset                                      |

### get\_report

Retrieve the full content of a saved report.

| Parameter  | Type   | Default  | Description        |
| ---------- | ------ | -------- | ------------------ |
| `reportId` | string | required | UUID of the report |

### delete\_report

Permanently delete a saved report.

| Parameter  | Type   | Default  | Description                  |
| ---------- | ------ | -------- | ---------------------------- |
| `reportId` | string | required | UUID of the report to delete |

***

## AI Visibility Tools

Track how often LLM assistants (ChatGPT, Claude, Gemini, Perplexity) recommend your app for the intents your users actually search for. Data is partitioned per `(app, country, model)` because the same prompt yields very different answers in different markets.

<Note>
  **Indie plan or higher.** AI Visibility uses a separate credit pool from API credits. Read tools cost AI Visibility credits per call (cheap), `_scan` and `_bootstrap` cost dynamically based on prompt count × enabled models. See [AI Visibility Overview](/docs/ai-visibility-overview) for the credit model.
</Note>

### ai\_visibility\_overview

Top-line scorecard for one model: composite score (0-100), letter grade, sentiment %, intent coverage, and prior-period delta.

| Parameter | Type   | Default   | Description                                        |
| --------- | ------ | --------- | -------------------------------------------------- |
| `app_id`  | number | required  | Numeric Apple App Store ID                         |
| `country` | string | `us`      | ISO country code                                   |
| `model`   | string | `chatgpt` | One of `chatgpt`, `claude`, `gemini`, `perplexity` |

### ai\_visibility\_intents

List every tracked intent with its visibility, sentiment, average position, and top competitor apps.

| Parameter | Type   | Default   | Description                                        |
| --------- | ------ | --------- | -------------------------------------------------- |
| `app_id`  | number | required  | Numeric App Store ID                               |
| `country` | string | `us`      | ISO country code                                   |
| `model`   | string | `chatgpt` | One of `chatgpt`, `claude`, `gemini`, `perplexity` |

### ai\_visibility\_intent\_detail

Drill into one intent: returns its metrics plus all of its prompts and the latest AI answers per prompt. Use when you want to inspect "why is this intent under-performing?".

| Parameter   | Type   | Default   | Description                                |
| ----------- | ------ | --------- | ------------------------------------------ |
| `app_id`    | number | required  | Numeric App Store ID                       |
| `intent_id` | string | required  | Intent UUID (from `ai_visibility_intents`) |
| `country`   | string | `us`      | ISO country code                           |
| `model`     | string | `chatgpt` | AI model                                   |

### ai\_visibility\_competitors

Apps that the model recommended instead of (or alongside) yours, ranked by appearances in the last N days.

| Parameter     | Type   | Default   | Description             |
| ------------- | ------ | --------- | ----------------------- |
| `app_id`      | number | required  | Numeric App Store ID    |
| `country`     | string | `us`      | ISO country code        |
| `model`       | string | `chatgpt` | AI model                |
| `window_days` | number | `14`      | Lookback in days (1–90) |

### ai\_visibility\_trend

Daily time series for one model — app-level by default, or scoped to a single intent when `intent_id` is set.

| Parameter     | Type   | Default   | Description                    |
| ------------- | ------ | --------- | ------------------------------ |
| `app_id`      | number | required  | Numeric App Store ID           |
| `country`     | string | `us`      | ISO country code               |
| `model`       | string | `chatgpt` | AI model                       |
| `window_days` | number | `30`      | Trend window in days (1–90)    |
| `intent_id`   | string | optional  | Scope the series to one intent |

### ai\_visibility\_answer

Fetch the verbatim raw model output for a single prompt, plus extracted app mentions in rank order, sentiment, and citations. The proof layer behind every visibility number.

| Parameter   | Type   | Default  | Description                                                              |
| ----------- | ------ | -------- | ------------------------------------------------------------------------ |
| `app_id`    | number | required | Numeric App Store ID                                                     |
| `answer_id` | string | required | Answer UUID (from `ai_visibility_intent_detail.prompts[].latestAnswers`) |

### ai\_visibility\_settings\_get

Per-app config for one country: enabled state, models, scan cadence, last bootstrap/scan timestamps, your tier policy, and your AI Visibility credit budget.

| Parameter | Type   | Default  | Description          |
| --------- | ------ | -------- | -------------------- |
| `app_id`  | number | required | Numeric App Store ID |
| `country` | string | `us`     | ISO country code     |

### ai\_visibility\_settings\_update

Toggle AI Visibility, change which models are scanned, or adjust scan cadence. Tier-capped: number of models cannot exceed `tier.maxModels`. Costs 0 credits.

| Parameter           | Type      | Default  | Description                                           |
| ------------------- | --------- | -------- | ----------------------------------------------------- |
| `app_id`            | number    | required | Numeric App Store ID                                  |
| `country`           | string    | `us`     | ISO country code                                      |
| `enabled`           | boolean   | optional | Enable/disable scheduled scans                        |
| `models`            | string\[] | optional | Subset of `chatgpt`, `claude`, `gemini`, `perplexity` |
| `scan_cadence_days` | number    | optional | Cadence in days (0–30; 0 pauses scheduled scans)      |
| `language`          | string    | optional | ISO language code (e.g. `en`, `tr`, `de`)             |

### ai\_visibility\_intent\_create

Manually add a user-intent to track. Source is recorded as `user`, so it sits alongside LLM-generated intents and is included in every scan. Costs 0 credits.

| Parameter     | Type   | Default  | Description                                                      |
| ------------- | ------ | -------- | ---------------------------------------------------------------- |
| `app_id`      | number | required | Numeric App Store ID                                             |
| `country`     | string | `us`     | ISO country code                                                 |
| `language`    | string | `en`     | ISO language code                                                |
| `label`       | string | required | User-facing intent label (≥8 chars), phrased from the user's POV |
| `description` | string | optional | One-sentence "who has this intent and what they want"            |

### ai\_visibility\_intent\_update

Rename, edit description, or change status (`active` / `paused` / `archived`). Pausing keeps history but stops including the intent in scheduled scans. Costs 0 credits.

| Parameter     | Type   | Default  | Description                       |
| ------------- | ------ | -------- | --------------------------------- |
| `app_id`      | number | required | Numeric App Store ID              |
| `intent_id`   | string | required | Intent UUID                       |
| `label`       | string | optional | New label                         |
| `description` | string | optional | New description                   |
| `status`      | string | optional | `active`, `paused`, or `archived` |

### ai\_visibility\_intent\_archive

Archive an intent (soft-delete). The intent and its prompts stop being scanned, but historical scores stay in `ai_visibility_trend`. Costs 0 credits.

| Parameter   | Type   | Default  | Description            |
| ----------- | ------ | -------- | ---------------------- |
| `app_id`    | number | required | Numeric App Store ID   |
| `intent_id` | string | required | Intent UUID to archive |

### ai\_visibility\_prompt\_create

Add a manual prompt under an intent. Each prompt is sent verbatim to every enabled AI assistant on the next scan. Costs 0 credits.

| Parameter   | Type   | Default     | Description                                                    |
| ----------- | ------ | ----------- | -------------------------------------------------------------- |
| `app_id`    | number | required    | Numeric App Store ID                                           |
| `intent_id` | string | required    | Parent intent UUID                                             |
| `country`   | string | `us`        | ISO country code                                               |
| `language`  | string | `en`        | ISO language code                                              |
| `text`      | string | required    | Prompt text (≥15 chars), in the user's voice                   |
| `style`     | string | `unbranded` | `branded`, `unbranded`, `problem`, `use_case`, or `comparison` |

### ai\_visibility\_prompt\_update

Edit prompt text, style, or status (`active` / `paused` / `archived`). Pausing keeps history but excludes the prompt from upcoming scans. Costs 0 credits.

| Parameter   | Type   | Default  | Description                                                    |
| ----------- | ------ | -------- | -------------------------------------------------------------- |
| `app_id`    | number | required | Numeric App Store ID                                           |
| `prompt_id` | string | required | Prompt UUID                                                    |
| `text`      | string | optional | New prompt text                                                |
| `style`     | string | optional | `branded`, `unbranded`, `problem`, `use_case`, or `comparison` |
| `status`    | string | optional | `active`, `paused`, or `archived`                              |

### ai\_visibility\_prompt\_archive

Archive a prompt (soft-delete). Historical answers remain queryable via `ai_visibility_answer`. Costs 0 credits.

| Parameter   | Type   | Default  | Description            |
| ----------- | ------ | -------- | ---------------------- |
| `app_id`    | number | required | Numeric App Store ID   |
| `prompt_id` | string | required | Prompt UUID to archive |

### ai\_visibility\_bootstrap

Starts a background job that auto-generates intents and prompts for an app from its App Store metadata, then kicks off an initial scan. Run this once per `(app, country)` when first enabling AI Visibility. Returns a `taskRunId` you can poll later. Hard-fails on tier-block or zero AI Visibility credits.

| Parameter  | Type   | Default  | Description          |
| ---------- | ------ | -------- | -------------------- |
| `app_id`   | number | required | Numeric App Store ID |
| `country`  | string | `us`     | ISO country code     |
| `language` | string | `en`     | ISO language code    |

### ai\_visibility\_scan

Fire-and-forget scan: queries every active prompt against every enabled model and updates the app's metrics. Returns `taskRunId`, `promptsTotal`, `models[]`, and `estimatedCost` (AI Visibility credits). Hard-fails when projected cost exceeds remaining quota — call `ai_visibility_settings_get` first to check budget.

| Parameter | Type   | Default  | Description          |
| --------- | ------ | -------- | -------------------- |
| `app_id`  | number | required | Numeric App Store ID |
| `country` | string | `us`     | ISO country code     |
