Get keyword metrics (popularity, difficulty) for up to 25 terms; with include=related, keyword research.

GEThttps://api.appgoat.ai/v1/keywords
1+ credits1 per keyword; 5 per seed with include=related or suggestionsMCP tool keyword_researchoperationId getKeywords

popularity is 5–100 (search volume proxy; popularity_source: apple = Apple Search Ads data), difficulty 0–100 (how entrenched the top 10 is), est_downloads_at_1 the modelled daily downloads of the #1 result. Terms not measured in the last 7 days are measured live (≤ 5 per call, 2–5 s each) when wait=true; others return pending: true — call again in a minute. include=related adds ~10 related terms with their metrics, suggestions the store's autocomplete, top_apps the current top 10 apps. Pass app= to get that app's rank and a metadata relevance (0–1) for every term — the core of an ASO keyword audit.

Request

curl "https://api.appgoat.ai/v1/keywords?qs=photo+editor%2Ccollage+maker&store=apple" \
  -H "x-api-key: $APPGOAT_API_KEY"

Query parameters

qstring
One term. Use qs for several.
qsstring
Comma-separated terms (≤ 25; ≤ 5 with related / suggestions).
store"apple" | "play"
Required unless app is given.
countrystring

Default "us"

includestring
Comma list: related, suggestions, top_apps.
appstring
Any app identifier (as in {app}); adds app.rank and app.relevance per term.
waitboolean
Block up to ~25 s for a refresh (default). false = answer immediately from cache with a job id.

Default true

Response

200 with data: Keyword[]. See the envelope for meta.

termstring
storeStore
countrystring
popularityinteger | null
5–100.
popularity_source"apple" | "proxy" | null
difficultyinteger | null
0–100.
difficulty_breakdownobject | null
results_countinteger | null
est_downloads_at_1integer | null
measured_atstring | null
pendingboolean
Being measured; call again in a minute.
top_app_idsstring[]
top_appsAppCard[]
relatedKeywordMetrics[]
suggestionsstring[]
appobject
app.storeStore
app.app_idstring
app.rankinteger | null
app.relevancenumber
0–1: term coverage in title (1), subtitle (0.7), description (0.4).
Example
{
  "data": [
    {
      "term": "photo editor",
      "store": "apple",
      "country": "us",
      "popularity": 62,
      "popularity_source": "proxy",
      "difficulty": 81,
      "results_count": 200,
      "est_downloads_at_1": 2900,
      "measured_at": "2026-10-20T10:00:00Z",
      "pending": false,
      "top_app_ids": [
        "1",
        "2"
      ],
      "app": {
        "store": "apple",
        "app_id": "1",
        "rank": 14,
        "relevance": 1
      }
    }
  ],
  "meta": {
    "credits_used": 1,
    "store": "apple"
  }
}

Status codes

200
One entry per term, in request order.
A parameter is missing or invalid (error.param names it).
Missing or invalid API key.
insufficient_credits (the call costs more than you have left; nothing was done) or plan_limit (a feature of a higher plan).
Too many requests per second for your plan.