The Appeeky MCP Server lets AI assistants like Claude, ChatGPT, Cursor, and any MCP-compatible client query App Store and Google Play intelligence data directly.
MCP Endpoint: https://mcp.appeeky.com
Connect Your Client
Claude Desktop
Claude Code
Cursor
Codex
TypeScript Client
Python Client
Claude Desktop uses OAuth — no API key needed. You’ll sign in with your Appeeky account when prompted.
- Open Claude Desktop and go to Settings → Connectors (or click the button in your Appeeky dashboard).
- Click Add Connector and paste the MCP URL:
- Claude will redirect you to sign in with your Appeeky account (Google, GitHub, or email).
- Once authenticated, the Appeeky MCP tools will be available in your conversations.
You can also add the connector from appeeky.com → Settings → API Key — the “Claude Desktop” button copies the URL and opens the Connectors page for you.
Pass your API key via the Authorization header:claude mcp add --transport http appeeky https://mcp.appeeky.com/mcp \
--header "Authorization: Bearer apk_your_key_here"
Click “Add to Cursor” in your Appeeky dashboard, or manually add to .cursor/mcp.json:{
"mcpServers": {
"appeeky": {
"url": "https://mcp.appeeky.com/mcp",
"headers": {
"Authorization": "Bearer apk_your_key_here"
}
}
}
}
codex mcp add appeeky --transport http https://mcp.appeeky.com/mcp
Then add your API key to ~/.codex/config.toml:[mcp_servers.appeeky.http_headers]
Authorization = "Bearer apk_your_key_here"
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" }
});
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)
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 or the API Dashboard.
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, 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 |
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) |
Pro feature — requires Indie plan or higher. ASC Metrics need your App Store Connect account connected in appeeky.com → Settings → Integrations. Data syncs daily. 2 credits per request.
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) |
Pro feature — requires Indie plan or higher. Reviews data syncs daily; mutations write through to Apple immediately.
App Store Connect (requires your ASC credentials)
| Tool | Description |
|---|
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_update_app_info_localization | Update app info localization fields |
asc_list_version_localizations | List metadata localizations for a version |
asc_get_version_localization | Get one version localization by ID |
asc_update_localization | Update description, keywords, whatsNew, etc. |
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) |
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 |
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_.
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 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_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 |
Indie plan or higher. Requires an Apple Search Ads API key (not your ASC key). Optional per-call credentials: client_id, team_id, key_id, org_id, private_key.
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) |
Indie plan or higher. AI Visibility uses a separate credit pool from API credits — see AI Visibility Overview. Bootstrap and Scan are fire-and-forget queued tasks; they return a taskRunId immediately and write results back as scans finish.
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 |
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.
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 (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 |
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 |
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 |
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" | 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 |
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?”.
Manage your 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.
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).
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 |
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.
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 for the credit model.
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
Fire-and-forget Trigger.dev task 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 |