Skip to main content
GET /v1/keywords/metrics
Returns detailed search volume and ranking difficulty scores for a keyword. The scoring algorithms analyse the store’s search results, top app review volumes, autocomplete position, rating distributions, and developer diversity to produce actionable scores. Works for both the App Store and Google Play (platform=google) using store-native signals.

Query Parameters

NameTypeRequiredDefaultDescription
keywordstringYesSearch keyword (min 2 characters)
platformstringNoappleapple (default) or google for Google Play — see Platforms
countrystringNousISO country code — when countries is omitted (single storefront)
countriesstringNoComma-separated ISO codes (e.g. us,gb,de) for multiple storefronts in one request (max 25). When set, country is ignored.
langstringNoenGoogle Play language code (used when platform=google)

Code Examples

curl "https://api.appeeky.com/v1/keywords/metrics?keyword=puzzle+game&country=us" \
  -H "X-API-Key: YOUR_API_KEY"
On Google Play, volumeScore and difficulty are computed from store-native signals (search results, ratings, review counts, autocomplete). The enrichment fields rankVolatility, marketDominance, and historicalDays are currently Apple-only — on Google they return null and interpretation.trustworthy is false.

Response

Single storefront (default — same as before):
{
  "data": {
    "keyword": "puzzle game",
    "country": "us",
    "volumeScore": 72,
    "difficulty": 85,
    "resultCount": 3450,
    "topAppsAvgRating": 4.6,
    "topAppsAvgReviews": 284500,
    "developerDiversity": 0.82,
    "rankVolatility": 12.4,
    "marketDominance": 0.31,
    "historicalDays": 90,
    "updatedAt": "2026-04-21T03:14:00Z",
    "interpretation": {
      "stability": "volatile",
      "competition": "competitive",
      "trustworthy": true
    }
  },
  "meta": {
    "lastScrapedAt": "2026-04-21T03:14:00Z",
    "dataAgeHours": 7,
    "source": "stored",
    "freshness": "fresh"
  }
}
Multi-country (?countries=us,gb):
{
  "data": {
    "keyword": "puzzle game",
    "countries": ["us", "gb"],
    "results": {
      "us": {
        "keyword": "puzzle game",
        "country": "us",
        "volumeScore": 72,
        "difficulty": 85,
        "resultCount": 3450,
        "topAppsAvgRating": 4.6,
        "topAppsAvgReviews": 284500,
        "developerDiversity": 0.82
      },
      "gb": {
        "keyword": "puzzle game",
        "country": "gb",
        "volumeScore": 68,
        "difficulty": 80,
        "resultCount": 3100,
        "topAppsAvgRating": 4.5,
        "topAppsAvgReviews": 200000,
        "developerDiversity": 0.78
      }
    }
  }
}

Response Fields

FieldTypeDescription
keywordstringThe queried keyword
countrystringISO country code (single-storefront response only)
countriesarrayList of ISO codes (multi-storefront response only)
resultsobjectPer-country metric objects keyed by ISO code (multi-storefront only)
volumeScorenumberEstimated search volume score (0–100)
difficultynumberRanking difficulty score (0–100)
resultCountnumberTotal apps in the App Store search results for this keyword
topAppsAvgRatingnumberAverage star rating of the top-ranking apps (1.0–5.0)
topAppsAvgReviewsnumberAverage review count of the top-ranking apps
developerDiversitynumberRatio of unique developers in the top results (0.0–1.0). Higher = more diverse.
rankVolatilitynumber | nullAverage daily rank change observed across the top results — higher = more chaotic SERP, lower = stable incumbents. null if no historical data yet.
marketDominancenumber | nullShare of total review weight held by the #1 app on this keyword (0.0–1.0). High dominance = one app owns the keyword. null if no historical data yet.
historicalDaysnumber | nullNumber of days of historical observations the enriched signals are based on. null if not yet enriched.
updatedAtstring | nullISO timestamp of the last enrichment refresh. null if not yet enriched.
interpretationobjectPlain-English bucketing of the volatility / dominance / history signals — see “Interpretation” below.

interpretation

FieldTypeValuesMeaning
stabilitystringstable (volatility < 3), moderate (3–10), volatile (> 10), unknownHow shaky the SERP has been over the trailing window.
competitionstringfragmented (dominance < 0.3), competitive (0.3–0.6), dominated (> 0.6), unknownHow concentrated review-share is at the top of the SERP.
trustworthybooleantrue when historicalDays >= 7False means the volatility/dominance numbers exist but the trend they describe is too short to act on.
Use interpretation for at-a-glance UI labels and LLM summaries — the underlying numerical fields stay the source of truth for filtering / sorting.

meta envelope (response-level)

Every keyword response includes a meta block describing data freshness:
FieldTypeDescription
lastScrapedAtstring | nullISO timestamp of the most recent data point that backs this response.
dataAgeHoursnumber | nullWhole-hour age relative to lastScrapedAt.
sourcestringstored (served from a precomputed snapshot), live (fetched from the App Store in real-time for this request), or hybrid (a snapshot enriched with a live lookup).
freshnessstringfresh (< 24h), stale (24h–7d), very-stale (> 7d), or unknown.

Scoring Algorithms

Volume Score (0–100)

The volume score estimates relative search popularity using three weighted signals:
SignalWeightDescription
iTunes resultCount40%Number of apps in search results, normalized to a max of 200
Top app reviews40%Average review count of top apps, normalized to a max of 500K
Autocomplete bonus20%Bonus points if the keyword appears in Apple’s autocomplete suggestions

Difficulty Score (0–100)

The difficulty score measures how hard it is to rank in the top results:
SignalWeightDescription
Average rating20%Higher avg rating of top apps = harder to compete
Average review count35%More reviews on top apps = stronger incumbents
Developer diversity25%Low diversity = dominated by a few publishers = harder to break in
Dominance ratio20%How much of the market the #1 app captures relative to others

Score Ranges

RangeLabelVolume MeaningDifficulty Meaning
0–20Very LowMinimal search trafficVery easy to rank — few strong competitors
21–40LowSome searches, niche keywordRelatively easy — moderate competition
41–60MediumModerate search volumeCompetitive — established apps present
61–80HighPopular keyword, significant trafficHard — strong incumbents dominate
81–100Very HighTop-tier keyword, massive volumeExtremely hard — dominated by top publishers

The scoring algorithms analyze the top search results from iTunes at query time. Scores may fluctuate slightly over time as the App Store rankings change.
Combine with opportunity score: Use this endpoint to evaluate individual keywords, then cross-reference with the opportunity score from GET /v1/apps/:id/keywords for a complete prioritization framework. High volume + low difficulty + high opportunity = your best ASO targets.

Errors

StatusCodeWhen
400INVALID_KEYWORDKeyword shorter than 2 characters
401UNAUTHORIZEDMissing or invalid API key
429RATE_LIMITEDToo many requests — slow down
500INTERNAL_ERRORError calculating metrics