"to-do" and "task list") live in the same group.
Path Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| id | string | Yes | Numeric Apple App ID |
Query Parameters
| Name | Type | Required | Default | Description |
|---|---|---|---|---|
| country | string | No | us | ISO 3166-1 alpha-2 storefront |
| device | string | No | iphone | iphone or ipad |
| competitorIds | string | No | — | Comma-separated competitor app IDs (max 5). When supplied, the response also includes a gaps array — clusters competitors are strong in but the owner has zero ranked keywords for. |
Response
asOf is the timestamp of the latest cluster refresh for the country (refreshed daily).
Clusters are returned sorted by weightedVisibility desc — the first row is the cluster the app dominates most.
strength
Each cluster row carries a strength bucket derived from weightedVisibility and avgRank:
| Bucket | Condition |
|---|---|
strong | weightedVisibility ≥ 10 and avgRank ≤ 15 |
moderate | weightedVisibility ≥ 4 and avgRank ≤ 30 |
weak | everything else |
gaps (when competitorIds is supplied)
For each supplied competitor, the same intent clusters are evaluated and any cluster where competitors are meaningfully present but the requested app has zero ranked keywords is surfaced. Sorted by “biggest threat first” — more competitors present + lower (better) competitor rank ranks higher.
| Field | Type | Meaning |
|---|---|---|
| clusterId | string | Stable slug for the cluster across all apps in the same country. |
| clusterLabel | string | Human-readable cluster name. |
| topKeywords | string[] | Up to 5 representative keywords across competitors in this cluster. |
| competitorsPresent | number | How many of the supplied competitors have at least one ranked keyword in the cluster. |
| competitorAvgRank | number | null | Average rank competitors hold across keywords in the cluster (lower = stronger). |
| yourRank | null | Always null — gaps are clusters the owner is absent from. |
| interpretation | string | Plain-English read of why the cluster is a gap. |
competitorIds is omitted, gaps is always an empty array — no extra cost is added to the request.
The response-level meta envelope describes data freshness — see Keyword Metrics → meta envelope for the schema.
Credit Cost
3 credits per request.Use Cases
- “Where am I strong, where am I weak?” planning view for ASO teams.
- Detect mis-positioning: if the strongest cluster is unrelated to the app’s category, the keyword set needs rethinking.
- Combine with
/keywords/gapto identify clusters where competitors dominate but you don’t yet.

