← ASOScan App Store OptimizationCONTENT HISTORY

Update to ASOScan App Store Optimization

Snapshot Oct 24, 2026 · 13:28 UTC · version 1.3.6

Collection source: downloaded plugin package.

WHAT CHANGED

Instructions updated for keyword-intelligence

Skill instructions — Now says: 1.3.6 | Find the app | `list_my_apps` | `GET /apps` | free | | Tracked keywords | `get_tracked_keywords` | `GET /apps/{id}/keywords?country=&rankWindow=7d` |...

Observed in instructions or declared skills. Runtime behavior has not been tested.

Save ASOScan App Store Optimization and check future changes in Following.

Up to 3 plugins free · no card required.

All fields and original values.

Skill instructions

Before

Oct 6, 2026 · 18:05 UTC

1.3.1 | Find the app | `list_my_apps` | `GET /apps` | 1 | | Tracked keywords | `get_tracked_keywords` | `GET /apps/{id}/keywords?country=&rankWindow=7d` | 1 | | Rank history | `get_keyword_rank_history` | `GET /apps/{id}/keywords/{keywor...

After

Oct 24, 2026 · 13:28 UTC

1.3.6 | Find the app | `list_my_apps` | `GET /apps` | free | | Tracked keywords | `get_tracked_keywords` | `GET /apps/{id}/keywords?country=&rankWindow=7d` | free | | Rank history | `get_keyword_rank_history` | `GET /apps/{id}/keywords/{...

Compare saved observations

Download comparison JSON

SKILL.md text changes

− removed · + added

--- before
+++ after
@@ -2,7 +2,7 @@
 name: keyword-intelligence
 description: When the user wants to analyze keyword performance for an app tracked in ASOScan (real search volume, difficulty, the app's current rank and rank movement, daily rank history, weekly volume/difficulty trends), or live on-demand research for a new term. Also use when the user mentions "how hard is this keyword", "search volume for X", "where do I rank for Y", "is my rank going up or down", "show my rank history", or "research this keyword". For discovering new keywords to target, see keyword-opportunities.
 metadata:
-  version: 1.3.1
+  version: 1.3.6
 ---
 
 # Keyword Intelligence
@@ -29,10 +29,10 @@
 
 | Step | Tool (connected) | API call (key) | API credits |
 |---|---|---|---|
-| Find the app | `list_my_apps` | `GET /apps` | 1 |
-| Tracked keywords | `get_tracked_keywords` | `GET /apps/{id}/keywords?country=&rankWindow=7d` | 1 |
-| Rank history | `get_keyword_rank_history` | `GET /apps/{id}/keywords/{keywordId}/history?days=30` | 1 |
-| Volume and difficulty trend | `get_keyword_metrics_history` | `GET /apps/{id}/keywords/{keywordId}/metrics-history?days=180` | 1 |
+| Find the app | `list_my_apps` | `GET /apps` | free |
+| Tracked keywords | `get_tracked_keywords` | `GET /apps/{id}/keywords?country=&rankWindow=7d` | free |
+| Rank history | `get_keyword_rank_history` | `GET /apps/{id}/keywords/{keywordId}/history?days=30` | free |
+| Volume and difficulty trend | `get_keyword_metrics_history` | `GET /apps/{id}/keywords/{keywordId}/metrics-history?days=180` | free |
 | Live research | `research_keyword` | `GET /apps/{id}/keywords/research?term=&country=` | 8, say the cost first |
 
 ## Steps
@@ -40,22 +40,30 @@
 1. **Find the app** — `GET /apps` → each `{ id, name, platform, storeId, category }`.
    Use the `id`.
 2. **Tracked keywords + current state** — `GET /apps/{id}/keywords?country=&rankWindow=7d`
-   (1 credit). Each row: `{ id, term, country, rank, rankDelta, rankCheckedAt,
+   (free). Each row: `{ id, term, country, rank, rankDelta, rankCheckedAt,
    volume, difficulty, isFavorite }`. `rankWindow` = `1d|7d|30d`. Fetch the list
    once and filter locally. The row's `id` is the `{keywordId}` for history calls.
 3. **Rank history** — `GET /apps/{id}/keywords/{keywordId}/history?days=30`
-   (1 credit) → `[{ rank, recordedAt }]` (days 1–365).
+   (free) → `[{ rank, recordedAt }]` (days 1–365).
 4. **Volume/difficulty trend** — `GET /apps/{id}/keywords/{keywordId}/metrics-history?days=180`
-   (1 credit) → `{ term, country, volume[]{ at, value }, difficulty[]{ at, value } }`.
+   (free) → `{ term, country, volume[]{ at, value }, difficulty[]{ at, value } }`.
 5. **Live research** (a term not tracked yet) — `GET /apps/{id}/keywords/research?term=…&country=US`
-   (**8 credits — cache it**; URL-encode the term) → `{ term, platform, country,
-   volume, difficulty, competingAppsCount, topApps[] }`. A failed lookup is 400 (free).
+   (**8 credits every time, cache hit or not — reuse your own result instead of
+   calling it twice for the same term in one conversation, that bills the user
+   again for an answer you already have**; URL-encode the term) → `{ term,
+   platform, country, volume, difficulty, competingAppsCount, topApps[] }`. A
+   failed lookup is 400 (free).
+   For several keyword ideas at once, use `find_keyword_opportunities` (2
+   credits, covers many terms in one call) instead of researching them one by
+   one, this endpoint is for one specific term the user already has in mind.
 6. **Find easier alternatives when a term is hard.** If a researched term is high-volume but
-   **high-difficulty** (🟠 Stretch), research 2–3 long-tail variants of it — add a qualifier such as
-   `<term> games`, `<term> app`, `color <term>`, `best <term>` — via the research endpoint (step 5),
-   and surface any that keep useful volume at **lower difficulty** (a 🟢 Win-now alternative). Cache
-   each. This is the highest-leverage move for a Stretch term: point the user at a keyword they can
-   realistically win instead of one they can't.
+   **high-difficulty** (🟠 Stretch), research AT MOST 2–3 long-tail variants of it, not more — add
+   a qualifier such as `<term> games`, `<term> app`, `color <term>`, `best <term>` — via the
+   research endpoint (step 5), and surface any that keep useful volume at **lower difficulty**
+   (a 🟢 Win-now alternative). Cache each; stop once you have one good alternative or have tried 3,
+   whichever comes first — don't keep spending 8-credit calls chasing a better one. This is the
+   highest-leverage move for a Stretch term: point the user at a keyword they can realistically win
+   instead of one they can't.
 
 ## How to read the numbers
 
@@ -92,7 +100,7 @@
 
 - `401` → asoscan-setup · `403` → plan without API access · `402` out of credits
   (read `X-ApiCredits-Remaining`/`-Reset`) · `429` back off · `404` not tracked ·
-  `503` API not enabled yet. Successful calls spend credits; failed calls are free.
+  `503` API not enabled yet. Reads here are free; live research spends credits on success, failed calls are free.
 - Present volume/difficulty as clean numbers — don't label them "estimated" or
   guess their source. Never promise a specific rank.
 - Full reference: <https://asoscan.com/api/developers>
Full technical diff · 1 changed fields

changed /skill_md_contents

BEFORE
"---\nname: keyword-intelligence\ndescription: When the user wants to analyze keyword performance for an app tracked in ASOScan (real search volume, difficulty, the app's current rank and rank movement, daily rank history, weekly volume/difficulty trends), or live on-demand research for a new term. Also use when the user mentions \"how hard is this keyword\", \"search volume for X\", \"where do I rank for Y\", \"is my rank going up or down\", \"show my rank history\", or \"research this keyword\". For discovering new keywords to target, see keyword-opportunities.\nmetadata:\n  version: 1.3.1\n---\n\n# Keyword Intelligence\n\nTurn ASOScan's real keyword data into a clear read on which keywords are worth the\neffort and how the app is trending — so you prioritize from numbers, not hunches.\n\n## When to use\n\n- \"What's the volume/difficulty of `<keyword>`?\"\n- \"Where does my app rank for `<keyword>`? Is it moving?\"\n- \"Show me my rank history / volume trend for `<keyword>`.\"\n- \"Research `<a keyword I don't track yet>`.\"\n\n## Getting the data (two modes)\n\nPick the first mode that applies, then follow the steps below.\n\n1. **ASOScan tools are connected** (the ASOScan plugin or connector in ChatGPT or Claude, or any MCP client): use the tool named in the table. Do not ask for an API key and do not run `curl`. Tool results have the same fields as the API responses below, and a list comes back inside `items`. If a tool answers with a message instead of data (reconnect, credits used up, plan limit, \"preparing\"), pass that message on and stop.\n2. **No tools, but you can run shell commands and `ASOSCAN_API_KEY` is set**: make the API call in the table. Base `https://asoscan.com/api/public/v1`, header `Authorization: Bearer $ASOSCAN_API_KEY`, JSON with camelCase fields. Never print the key. Capture the HTTP status and handle errors as described at the bottom.\n3. **Neither**: hand off to **asoscan-setup**. It explains how to connect ASOScan in ChatGPT or Claude, or how to create an API key.\n\nASOScan only sees the apps in the user's own account and the competitors they track. Every call uses API credits (failed calls are free). Before a call that costs more than 2 API credits, or one that uses AI, tell the user the cost and wait for a yes. Before any call that changes data, ask first.\n\n| Step | Tool (connected) | API call (key) | API credits |\n|---|---|---|---|\n| Find the app | `list_my_apps` | `GET /apps` | 1 |\n| Tracked keywords | `get_tracked_keywords` | `GET /apps/{id}/keywords?country=&rankWindow=7d` | 1 |\n| Rank history | `get_keyword_rank_history` | `GET /apps/{id}/keywords/{keywordId}/history?days=30` | 1 |\n| Volume and difficulty trend | `get_keyword_metrics_history` | `GET /apps/{id}/keywords/{keywordId}/metrics-history?days=180` | 1 |\n| Live research | `research_keyword` | `GET /apps/{id}/keywords/research?term=&country=` | 8, say the cost first |\n\n## Steps\n\n1. **Find the app** — `GET /apps` → each `{ id, name, platform, storeId, category }`.\n   Use the `id`.\n2. **Tracked keywords + current state** — `GET /apps/{id}/keywords?country=&rankWindow=7d`\n   (1 credit). Each row: `{ id, term, country, rank, rankDelta, rankCheckedAt,\n   volume, difficulty, isFavorite }`. `rankWindow` = `1d|7d|30d`. Fetch the list\n   once and filter locally. The row's `id` is the `{keywordId}` for history calls.\n3. **Rank history** — `GET /apps/{id}/keywords/{keywordId}/history?days=30`\n   (1 credit) → `[{ rank, recordedAt }]` (days 1–365).\n4. **Volume/difficulty trend** — `GET /apps/{id}/keywords/{keywordId}/metrics-history?days=180`\n   (1 credit) → `{ term, country, volume[]{ at, value }, difficulty[]{ at, value } }`.\n5. **Live research** (a term not tracked yet) — `GET /apps/{id}/keywords/research?term=…&country=US`\n   (**8 credits — cache it**; URL-encode the term) → `{ term, platform, country,\n   volume, difficulty, competingAppsCount, topApps[] }`. A failed lookup is 400 (free).\n6. **Find easier alternatives when a term is hard.** If a researched term is high-volume but\n   **high-difficulty** (🟠 Stretch), research 2–3 long-tail variants of it — add a qualifier such as\n   `<term> games`, `<term> app`, `color <term>`, `best <term>` — via the research endpoint (step 5),\n   and surface any that keep useful volume at **lower difficulty** (a 🟢 Win-now alternative). Cache\n   each. This is the highest-leverage move for a Stretch term: point the user at a keyword they can\n   realistically win instead of one they can't.\n\n## How to read the numbers\n\n- **volume** — relative search demand (higher = more searches); compare within one market.\n- **difficulty** — how hard to rank (higher = harder). The prize is\n  **high-volume, low-difficulty** terms the app can realistically win.\n- **rank + rankDelta** — position (`null` = not ranked) and its change over the\n  window. **Positive `rankDelta` = improvement** (toward #1).\n\n| Tier | Signal | Action |\n|---|---|---|\n| 🟢 Win now | High volume · low difficulty · not ranking well yet | Prioritize in metadata |\n| 🟡 Defend | High volume · already top ~10 | Hold; watch rankDelta |\n| 🟠 Stretch | High volume · high difficulty | Long game; needs authority |\n| ⚪ Low leverage | Low volume | Only if highly relevant |\n\n## Output template\n\n```\n### Keyword intelligence — {App} ({country})   ·  credits left: {X-ApiCredits-Remaining}\n\n| Keyword | Volume | Difficulty | Rank | Δ ({window}) | Read |\n|---|---|---|---|---|---|\n| … | … | … | … | ▲/▼ … | Win now / Defend / … |\n\n**Trends:** {keyword}: rank {from → to} over {N}d; volume {trend}; difficulty {trend}.\n**What I'd do:** 1) {specific action tied to a keyword}  2) …\n```\n\nThen nudge the next step in ASOScan: track the winners via **keyword-opportunities**\nand place them with **metadata-audit**.\n\n## Errors, credits & honesty\n\n- `401` → asoscan-setup · `403` → plan without API access · `402` out of credits\n  (read `X-ApiCredits-Remaining`/`-Reset`) · `429` back off · `404` not tracked ·\n  `503` API not enabled yet. Successful calls spend credits; failed calls are free.\n- Present volume/difficulty as clean numbers — don't label them \"estimated\" or\n  guess their source. Never promise a specific rank.\n- Full reference: <https://asoscan.com/api/developers>\n\n## Related\n\n- **keyword-opportunities** — discover *new* keywords worth targeting.\n- **keyword-spy** — every keyword an app already ranks for.\n- **metadata-audit** — put the winning keywords into the listing.\n"
AFTER
"---\nname: keyword-intelligence\ndescription: When the user wants to analyze keyword performance for an app tracked in ASOScan (real search volume, difficulty, the app's current rank and rank movement, daily rank history, weekly volume/difficulty trends), or live on-demand research for a new term. Also use when the user mentions \"how hard is this keyword\", \"search volume for X\", \"where do I rank for Y\", \"is my rank going up or down\", \"show my rank history\", or \"research this keyword\". For discovering new keywords to target, see keyword-opportunities.\nmetadata:\n  version: 1.3.6\n---\n\n# Keyword Intelligence\n\nTurn ASOScan's real keyword data into a clear read on which keywords are worth the\neffort and how the app is trending — so you prioritize from numbers, not hunches.\n\n## When to use\n\n- \"What's the volume/difficulty of `<keyword>`?\"\n- \"Where does my app rank for `<keyword>`? Is it moving?\"\n- \"Show me my rank history / volume trend for `<keyword>`.\"\n- \"Research `<a keyword I don't track yet>`.\"\n\n## Getting the data (two modes)\n\nPick the first mode that applies, then follow the steps below.\n\n1. **ASOScan tools are connected** (the ASOScan plugin or connector in ChatGPT or Claude, or any MCP client): use the tool named in the table. Do not ask for an API key and do not run `curl`. Tool results have the same fields as the API responses below, and a list comes back inside `items`. If a tool answers with a message instead of data (reconnect, credits used up, plan limit, \"preparing\"), pass that message on and stop.\n2. **No tools, but you can run shell commands and `ASOSCAN_API_KEY` is set**: make the API call in the table. Base `https://asoscan.com/api/public/v1`, header `Authorization: Bearer $ASOSCAN_API_KEY`, JSON with camelCase fields. Never print the key. Capture the HTTP status and handle errors as described at the bottom.\n3. **Neither**: hand off to **asoscan-setup**. It explains how to connect ASOScan in ChatGPT or Claude, or how to create an API key.\n\nASOScan only sees the apps in the user's own account and the competitors they track. Every call uses API credits (failed calls are free). Before a call that costs more than 2 API credits, or one that uses AI, tell the user the cost and wait for a yes. Before any call that changes data, ask first.\n\n| Step | Tool (connected) | API call (key) | API credits |\n|---|---|---|---|\n| Find the app | `list_my_apps` | `GET /apps` | free |\n| Tracked keywords | `get_tracked_keywords` | `GET /apps/{id}/keywords?country=&rankWindow=7d` | free |\n| Rank history | `get_keyword_rank_history` | `GET /apps/{id}/keywords/{keywordId}/history?days=30` | free |\n| Volume and difficulty trend | `get_keyword_metrics_history` | `GET /apps/{id}/keywords/{keywordId}/metrics-history?days=180` | free |\n| Live research | `research_keyword` | `GET /apps/{id}/keywords/research?term=&country=` | 8, say the cost first |\n\n## Steps\n\n1. **Find the app** — `GET /apps` → each `{ id, name, platform, storeId, category }`.\n   Use the `id`.\n2. **Tracked keywords + current state** — `GET /apps/{id}/keywords?country=&rankWindow=7d`\n   (free). Each row: `{ id, term, country, rank, rankDelta, rankCheckedAt,\n   volume, difficulty, isFavorite }`. `rankWindow` = `1d|7d|30d`. Fetch the list\n   once and filter locally. The row's `id` is the `{keywordId}` for history calls.\n3. **Rank history** — `GET /apps/{id}/keywords/{keywordId}/history?days=30`\n   (free) → `[{ rank, recordedAt }]` (days 1–365).\n4. **Volume/difficulty trend** — `GET /apps/{id}/keywords/{keywordId}/metrics-history?days=180`\n   (free) → `{ term, country, volume[]{ at, value }, difficulty[]{ at, value } }`.\n5. **Live research** (a term not tracked yet) — `GET /apps/{id}/keywords/research?term=…&country=US`\n   (**8 credits every time, cache hit or not — reuse your own result instead of\n   calling it twice for the same term in one conversation, that bills the user\n   again for an answer you already have**; URL-encode the term) → `{ term,\n   platform, country, volume, difficulty, competingAppsCount, topApps[] }`. A\n   failed lookup is 400 (free).\n   For several keyword ideas at once, use `find_keyword_opportunities` (2\n   credits, covers many terms in one call) instead of researching them one by\n   one, this endpoint is for one specific term the user already has in mind.\n6. **Find easier alternatives when a term is hard.** If a researched term is high-volume but\n   **high-difficulty** (🟠 Stretch), research AT MOST 2–3 long-tail variants of it, not more — add\n   a qualifier such as `<term> games`, `<term> app`, `color <term>`, `best <term>` — via the\n   research endpoint (step 5), and surface any that keep useful volume at **lower difficulty**\n   (a 🟢 Win-now alternative). Cache each; stop once you have one good alternative or have tried 3,\n   whichever comes first — don't keep spending 8-credit calls chasing a better one. This is the\n   highest-leverage move for a Stretch term: point the user at a keyword they can realistically win\n   instead of one they can't.\n\n## How to read the numbers\n\n- **volume** — relative search demand (higher = more searches); compare within one market.\n- **difficulty** — how hard to rank (higher = harder). The prize is\n  **high-volume, low-difficulty** terms the app can realistically win.\n- **rank + rankDelta** — position (`null` = not ranked) and its change over the\n  window. **Positive `rankDelta` = improvement** (toward #1).\n\n| Tier | Signal | Action |\n|---|---|---|\n| 🟢 Win now | High volume · low difficulty · not ranking well yet | Prioritize in metadata |\n| 🟡 Defend | High volume · already top ~10 | Hold; watch rankDelta |\n| 🟠 Stretch | High volume · high difficulty | Long game; needs authority |\n| ⚪ Low leverage | Low volume | Only if highly relevant |\n\n## Output template\n\n```\n### Keyword intelligence — {App} ({country})   ·  credits left: {X-ApiCredits-Remaining}\n\n| Keyword | Volume | Difficulty | Rank | Δ ({window}) | Read |\n|---|---|---|---|---|---|\n| … | … | … | … | ▲/▼ … | Win now / Defend / … |\n\n**Trends:** {keyword}: rank {from → to} over {N}d; volume {trend}; difficulty {trend}.\n**What I'd do:** 1) {specific action tied to a keyword}  2) …\n```\n\nThen nudge the next step in ASOScan: track the winners via **keyword-opportunities**\nand place them with **metadata-audit**.\n\n## Errors, credits & honesty\n\n- `401` → asoscan-setup · `403` → plan without API access · `402` out of credits\n  (read `X-ApiCredits-Remaining`/`-Reset`) · `429` back off · `404` not tracked ·\n  `503` API not enabled yet. Reads here are free; live research spends credits on success, failed calls are free.\n- Present volume/difficulty as clean numbers — don't label them \"estimated\" or\n  guess their source. Never promise a specific rank.\n- Full reference: <https://asoscan.com/api/developers>\n\n## Related\n\n- **keyword-opportunities** — discover *new* keywords worth targeting.\n- **keyword-spy** — every keyword an app already ranks for.\n- **metadata-audit** — put the winning keywords into the listing.\n"
Full snapshot data
{
  "description": "When the user wants to analyze keyword performance for an app tracked in ASOScan (real search volume, difficulty, the app's current rank and rank movement, daily rank history, weekly volume/difficulty trends), or live on-demand research for a new term. Also use when the user mentions \"how hard is this keyword\", \"search volume for X\", \"where do I rank for Y\", \"is my rank going up or down\", \"show my rank history\", or \"research this keyword\". For discovering new keywords to target, see keyword-opportunities.",
  "included_files": [],
  "name": "keyword-intelligence",
  "skill_md_contents": "---\nname: keyword-intelligence\ndescription: When the user wants to analyze keyword performance for an app tracked in ASOScan (real search volume, difficulty, the app's current rank and rank movement, daily rank history, weekly volume/difficulty trends), or live on-demand research for a new term. Also use when the user mentions \"how hard is this keyword\", \"search volume for X\", \"where do I rank for Y\", \"is my rank going up or down\", \"show my rank history\", or \"research this keyword\". For discovering new keywords to target, see keyword-opportunities.\nmetadata:\n  version: 1.3.6\n---\n\n# Keyword Intelligence\n\nTurn ASOScan's real keyword data into a clear read on which keywords are worth the\neffort and how the app is trending — so you prioritize from numbers, not hunches.\n\n## When to use\n\n- \"What's the volume/difficulty of `<keyword>`?\"\n- \"Where does my app rank for `<keyword>`? Is it moving?\"\n- \"Show me my rank history / volume trend for `<keyword>`.\"\n- \"Research `<a keyword I don't track yet>`.\"\n\n## Getting the data (two modes)\n\nPick the first mode that applies, then follow the steps below.\n\n1. **ASOScan tools are connected** (the ASOScan plugin or connector in ChatGPT or Claude, or any MCP client): use the tool named in the table. Do not ask for an API key and do not run `curl`. Tool results have the same fields as the API responses below, and a list comes back inside `items`. If a tool answers with a message instead of data (reconnect, credits used up, plan limit, \"preparing\"), pass that message on and stop.\n2. **No tools, but you can run shell commands and `ASOSCAN_API_KEY` is set**: make the API call in the table. Base `https://asoscan.com/api/public/v1`, header `Authorization: Bearer $ASOSCAN_API_KEY`, JSON with camelCase fields. Never print the key. Capture the HTTP status and handle errors as described at the bottom.\n3. **Neither**: hand off to **asoscan-setup**. It explains how to connect ASOScan in ChatGPT or Claude, or how to create an API key.\n\nASOScan only sees the apps in the user's own account and the competitors they track. Every call uses API credits (failed calls are free). Before a call that costs more than 2 API credits, or one that uses AI, tell the user the cost and wait for a yes. Before any call that changes data, ask first.\n\n| Step | Tool (connected) | API call (key) | API credits |\n|---|---|---|---|\n| Find the app | `list_my_apps` | `GET /apps` | free |\n| Tracked keywords | `get_tracked_keywords` | `GET /apps/{id}/keywords?country=&rankWindow=7d` | free |\n| Rank history | `get_keyword_rank_history` | `GET /apps/{id}/keywords/{keywordId}/history?days=30` | free |\n| Volume and difficulty trend | `get_keyword_metrics_history` | `GET /apps/{id}/keywords/{keywordId}/metrics-history?days=180` | free |\n| Live research | `research_keyword` | `GET /apps/{id}/keywords/research?term=&country=` | 8, say the cost first |\n\n## Steps\n\n1. **Find the app** — `GET /apps` → each `{ id, name, platform, storeId, category }`.\n   Use the `id`.\n2. **Tracked keywords + current state** — `GET /apps/{id}/keywords?country=&rankWindow=7d`\n   (free). Each row: `{ id, term, country, rank, rankDelta, rankCheckedAt,\n   volume, difficulty, isFavorite }`. `rankWindow` = `1d|7d|30d`. Fetch the list\n   once and filter locally. The row's `id` is the `{keywordId}` for history calls.\n3. **Rank history** — `GET /apps/{id}/keywords/{keywordId}/history?days=30`\n   (free) → `[{ rank, recordedAt }]` (days 1–365).\n4. **Volume/difficulty trend** — `GET /apps/{id}/keywords/{keywordId}/metrics-history?days=180`\n   (free) → `{ term, country, volume[]{ at, value }, difficulty[]{ at, value } }`.\n5. **Live research** (a term not tracked yet) — `GET /apps/{id}/keywords/research?term=…&country=US`\n   (**8 credits every time, cache hit or not — reuse your own result instead of\n   calling it twice for the same term in one conversation, that bills the user\n   again for an answer you already have**; URL-encode the term) → `{ term,\n   platform, country, volume, difficulty, competingAppsCount, topApps[] }`. A\n   failed lookup is 400 (free).\n   For several keyword ideas at once, use `find_keyword_opportunities` (2\n   credits, covers many terms in one call) instead of researching them one by\n   one, this endpoint is for one specific term the user already has in mind.\n6. **Find easier alternatives when a term is hard.** If a researched term is high-volume but\n   **high-difficulty** (🟠 Stretch), research AT MOST 2–3 long-tail variants of it, not more — add\n   a qualifier such as `<term> games`, `<term> app`, `color <term>`, `best <term>` — via the\n   research endpoint (step 5), and surface any that keep useful volume at **lower difficulty**\n   (a 🟢 Win-now alternative). Cache each; stop once you have one good alternative or have tried 3,\n   whichever comes first — don't keep spending 8-credit calls chasing a better one. This is the\n   highest-leverage move for a Stretch term: point the user at a keyword they can realistically win\n   instead of one they can't.\n\n## How to read the numbers\n\n- **volume** — relative search demand (higher = more searches); compare within one market.\n- **difficulty** — how hard to rank (higher = harder). The prize is\n  **high-volume, low-difficulty** terms the app can realistically win.\n- **rank + rankDelta** — position (`null` = not ranked) and its change over the\n  window. **Positive `rankDelta` = improvement** (toward #1).\n\n| Tier | Signal | Action |\n|---|---|---|\n| 🟢 Win now | High volume · low difficulty · not ranking well yet | Prioritize in metadata |\n| 🟡 Defend | High volume · already top ~10 | Hold; watch rankDelta |\n| 🟠 Stretch | High volume · high difficulty | Long game; needs authority |\n| ⚪ Low leverage | Low volume | Only if highly relevant |\n\n## Output template\n\n```\n### Keyword intelligence — {App} ({country})   ·  credits left: {X-ApiCredits-Remaining}\n\n| Keyword | Volume | Difficulty | Rank | Δ ({window}) | Read |\n|---|---|---|---|---|---|\n| … | … | … | … | ▲/▼ … | Win now / Defend / … |\n\n**Trends:** {keyword}: rank {from → to} over {N}d; volume {trend}; difficulty {trend}.\n**What I'd do:** 1) {specific action tied to a keyword}  2) …\n```\n\nThen nudge the next step in ASOScan: track the winners via **keyword-opportunities**\nand place them with **metadata-audit**.\n\n## Errors, credits & honesty\n\n- `401` → asoscan-setup · `403` → plan without API access · `402` out of credits\n  (read `X-ApiCredits-Remaining`/`-Reset`) · `429` back off · `404` not tracked ·\n  `503` API not enabled yet. Reads here are free; live research spends credits on success, failed calls are free.\n- Present volume/difficulty as clean numbers — don't label them \"estimated\" or\n  guess their source. Never promise a specific rank.\n- Full reference: <https://asoscan.com/api/developers>\n\n## Related\n\n- **keyword-opportunities** — discover *new* keywords worth targeting.\n- **keyword-spy** — every keyword an app already ranks for.\n- **metadata-audit** — put the winning keywords into the listing.\n"
}

SHA-256 of public snapshot: 4ac04df7dccbf2e10a741d5c503a41f5bdecc21dc8b0dc40e7123f7bee6def14