App Store keyword rankings, popularity, difficulty and keyword research across 175 storefronts.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Dekadans API key (starts with aso_). Create one at https://dekadans.net/dashboard/settings (Plan & API keys); the free plan works.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Track an app by App Store ID; its name is looked up automatically. Omit appStoreId (and pass name) for a temporary app. Free plan: 1 app.
Defaults to the App Store name. Required for temporary apps.
Store where the app is available; used to look it up
Omit for a temporary (unpublished) app
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Track an app by App Store ID; its name is looked up automatically. Omit appStoreId (and pass name) for a temporary app. Free plan: 1 app.
| Argument | Type | Description |
|---|---|---|
| name | string | Defaults to the App Store name. Required for temporary apps. |
| platform | string | |
| homeStore | string | Store where the app is available; used to look it up |
| appStoreId | string | Omit for a temporary (unpublished) app |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"name": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Defaults to the App Store name. Required for temporary apps."
},
"platform": {
"enum": [
"iphone",
"ipad",
"mac",
"appletv",
"realityDevice"
],
"type": "string",
"default": "iphone"
},
"homeStore": {
"type": "string",
"default": "us",
"pattern": "^[a-z]{2}$",
"description": "Store where the app is available; used to look it up"
},
"appStoreId": {
"type": "string",
"pattern": "^[1-9]\\d{0,19}$",
"description": "Omit for a temporary (unpublished) app"
}
}
}Track up to 100 keywords for an app in a store and measure rank, popularity and difficulty. Plan limit on total tracked keywords (free: 10); a batch over the limit is rejected entirely.
| Argument | Type | Description |
|---|---|---|
| appId* | integer | Local app id from list_apps, not the App Store ID |
| store* | string | |
| keywords* | array |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"appId",
"store",
"keywords"
],
"properties": {
"appId": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Local app id from list_apps, not the App Store ID",
"exclusiveMinimum": 0
},
"store": {
"type": "string",
"pattern": "^[a-z]{2}$"
},
"keywords": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 100,
"minItems": 1
}
}
}App Store details (developer, rating, price, description, screenshots) for up to 50 App Store IDs. IDs not available in the store are omitted. Counts toward the research quota.
| Argument | Type | Description |
|---|---|---|
| store | string | |
| appStoreIds* | array |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"appStoreIds"
],
"properties": {
"store": {
"type": "string",
"default": "us",
"pattern": "^[a-z]{2}$"
},
"appStoreIds": {
"type": "array",
"items": {
"type": "string",
"pattern": "^[1-9]\\d{0,19}$"
},
"maxItems": 50,
"minItems": 1
}
}
}Tracked keywords of an app with latest metrics.
| Argument | Type | Description |
|---|---|---|
| appId* | integer | Local app id from list_apps, not the App Store ID |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"appId"
],
"properties": {
"appId": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Local app id from list_apps, not the App Store ID",
"exclusiveMinimum": 0
}
}
}Derives 1–3 word candidates from the top 10 competitors ranking for a keyword and returns those with popularity > 5, highest first. Pass your appStoreId to exclude your own app. Counts toward the research quota.
| Argument | Type | Description |
|---|---|---|
| term* | string | |
| store | string | |
| platform | string | |
| appStoreId | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"term"
],
"properties": {
"term": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"store": {
"type": "string",
"default": "us",
"pattern": "^[a-z]{2}$"
},
"platform": {
"enum": [
"iphone",
"ipad",
"mac",
"appletv",
"realityDevice"
],
"type": "string",
"default": "iphone"
},
"appStoreId": {
"type": "string",
"pattern": "^[1-9]\\d{0,19}$"
}
}
}Daily rank, popularity and difficulty history of one tracked keyword (keywordId from get_app_keywords), oldest first; days without a measurement are omitted. Free plan: last 7 days.
| Argument | Type | Description |
|---|---|---|
| days | any | Days of history to return, or "all". Free plan: capped at 7. |
| appId* | integer | Local app id from list_apps, not the App Store ID |
| keywordId* | integer |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"appId",
"keywordId"
],
"properties": {
"days": {
"anyOf": [
{
"type": "string",
"const": "all"
},
{
"type": "integer",
"maximum": 3650,
"minimum": 1
}
],
"default": 30,
"description": "Days of history to return, or \"all\". Free plan: capped at 7."
},
"appId": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Local app id from list_apps, not the App Store ID",
"exclusiveMinimum": 0
},
"keywordId": {
"type": "integer",
"maximum": 9007199254740991,
"exclusiveMinimum": 0
}
}
}Popularity scores for up to 100 keywords in a store, without tracking them. Counts toward the research quota.
| Argument | Type | Description |
|---|---|---|
| store | string | |
| terms* | array |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"terms"
],
"properties": {
"store": {
"type": "string",
"default": "us",
"pattern": "^[a-z]{2}$"
},
"terms": {
"type": "array",
"items": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"maxItems": 100,
"minItems": 1
}
}
}Keyword ideas for an App Store app with popularity and difficulty for the selected platform. Counts toward the research quota.
| Argument | Type | Description |
|---|---|---|
| store | string | |
| platform | string | |
| appStoreId* | string | |
| highPopularity | boolean |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"appStoreId"
],
"properties": {
"store": {
"type": "string",
"default": "us",
"pattern": "^[a-z]{2}$"
},
"platform": {
"enum": [
"iphone",
"ipad",
"mac",
"appletv",
"realityDevice"
],
"type": "string",
"default": "iphone"
},
"appStoreId": {
"type": "string",
"pattern": "^[1-9]\\d{0,19}$"
},
"highPopularity": {
"type": "boolean",
"default": true
}
}
}One page of the most searched keywords in a store, optionally for an App Store category id (e.g. 6013). Check `month`: data can be from an earlier month. Counts toward the research quota.
| Argument | Type | Description |
|---|---|---|
| page | integer | |
| limit | integer | |
| store | string | |
| category | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"page": {
"type": "integer",
"default": 1,
"maximum": 10000,
"minimum": 1
},
"limit": {
"type": "integer",
"default": 50,
"maximum": 100,
"minimum": 1
},
"store": {
"type": "string",
"default": "us",
"pattern": "^[a-z]{2}$"
},
"category": {
"type": "string",
"pattern": "^\\d{1,10}$"
}
}
}Current plan, tracked apps, keywords and research calls in the current quota period (free: month, pro: day). A null limit means unlimited.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Tracked apps of the user.
No arguments.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {}
}Measure all tracked keywords of an app now and append to history.
| Argument | Type | Description |
|---|---|---|
| appId* | integer | Local app id from list_apps, not the App Store ID |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"appId"
],
"properties": {
"appId": {
"type": "integer",
"maximum": 9007199254740991,
"description": "Local app id from list_apps, not the App Store ID",
"exclusiveMinimum": 0
}
}
}Live App Store search for a keyword. Returns ranked apps and difficulty; with appStoreId also that app's ranking (null = not in the returned results). Counts toward the research quota.
| Argument | Type | Description |
|---|---|---|
| term* | string | |
| limit | integer | |
| store | string | |
| platform | string | |
| appStoreId | string |
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"term"
],
"properties": {
"term": {
"type": "string",
"maxLength": 200,
"minLength": 1
},
"limit": {
"type": "integer",
"default": 50,
"maximum": 100,
"minimum": 1
},
"store": {
"type": "string",
"default": "us",
"pattern": "^[a-z]{2}$"
},
"platform": {
"enum": [
"iphone",
"ipad",
"mac",
"appletv",
"realityDevice"
],
"type": "string",
"default": "iphone"
},
"appStoreId": {
"type": "string",
"pattern": "^[1-9]\\d{0,19}$"
}
}
}