{"id":27173,"plugin_id":"plugin_asdk_app_6ac31e16fb6881919510d9cb1ea39463","kind":"skill","collection_source":"plugin_package","comparison_source":null,"observed_at":"2026-10-06T18:05:25.743Z","digest":"ea7582b4c7c27d4ce411b58446bc6b8d2af45e83e29b5307d968a72cddbbe074","against":null,"payload":{"description":"When the user wants to compare an app against its tracked competitors using ASOScan (keyword overlap and gaps, which store category each competitor uses, category chart rank over time, and rating trajectory), or add a new rival by store URL. Also use when the user mentions \"compare my app to competitors\", \"who am I competing with\", \"add this competitor\", \"how do I stack up\", \"am I gaining or losing vs them\", \"what category do my competitors use\", or \"category ranking\". For a competitor's full keyword list, see keyword-spy.","included_files":[],"name":"competitor-analysis","skill_md_contents":"---\nname: competitor-analysis\ndescription: When the user wants to compare an app against its tracked competitors using ASOScan (keyword overlap and gaps, which store category each competitor uses, category chart rank over time, and rating trajectory), or add a new rival by store URL. Also use when the user mentions \"compare my app to competitors\", \"who am I competing with\", \"add this competitor\", \"how do I stack up\", \"am I gaining or losing vs them\", \"what category do my competitors use\", or \"category ranking\". For a competitor's full keyword list, see keyword-spy.\nmetadata:\n  version: 1.3.1\n---\n\n# Competitor Analysis\n\nPosition the app against the rivals ASOScan tracks — where it's ahead, where it's\nbehind, and the single biggest lever — using real rank, rating, and keyword data.\n\n## When to use\n\n- \"Compare my app to my competitors.\"\n- \"Add `<store URL>` as a competitor.\"\n- \"What category do my competitors use / how's my category rank vs theirs?\"\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| One app's facts (category, rating) | `get_app_details` | `GET /apps/{id}` | 1 |\n| Competitors | `get_competitors` | `GET /apps/{id}/competitors?country=` | 1 |\n| Add a rival by store link (changes data) | `add_competitor` | `POST /apps/{id}/competitors` with `{ \"storeUrl\": \"...\" }` | 2, ask first |\n| Category rank over time | `get_category_rank` | `GET /apps/{id}/category-rank?country=&days=30` | 1 |\n| Rating history | `get_rating_history` | `GET /apps/{id}/rating-history` | 1 |\n\n## Steps\n\n1. **Find the app** — `GET /apps` → `{ id, name, category, rating, … }` (your own\n   `category` is here).\n2. **Competitors** — `GET /apps/{id}/competitors?country=` (1 credit) →\n   `[{ id, name, developer, iconUrl, rating, ratingCount, category }]`. The\n   `category` is each competitor's **primary store category** — this answers \"what\n   category do my competitors use?\" (only the primary is exposed, not Apple's\n   secondary).\n3. **Add a rival** (if asked) — `POST /apps/{id}/competitors { \"storeUrl\": \"…\" }`\n   (2 credits, **write** key). Confirm before writing.\n4. **Category rank over time** — `GET /apps/{id}/category-rank?country=&days=30`\n   (1 credit) → `{ category, country, rankType, currentRank, points[]{ date, rank } }`.\n5. **Rating trajectory** — `GET /apps/{id}/rating-history` (1 credit) →\n   `[{ rating, totalRatings, date }]`.\n6. **Keyword overlap** — pair with **keyword-spy** on each competitor for the gap list.\n\nCategory-rank and rating-history are per-app; to compare a competitor, run the same\nreads on that competitor's app id (it must be a tracked competitor).\n\n## How to analyze\n\n- **Category placement** — list each competitor's primary `category` next to yours.\n  If rivals cluster in a different (or less crowded) category, flag it — category\n  choice is an ASO lever.\n- **Rank momentum** — climbing or sliding over the window (`points`)?\n  A point exists only for a date that was measured, so `rank: null` means **measured and\n  not in the tracked chart** — say \"not charting yet\", never \"no data\". Unmeasured dates\n  are absent, so a 30-day window may return fewer than 30 points. An app whose points are\n  all null is not broken data: it hasn't broken into the chart, and volume/authority is\n  the lever, not metadata.\n- **Rating gap** — average `rating` and its direction vs competitors.\n- **Keyword gap** (highest-leverage) — relevant terms rivals win that you don't\n  target (from keyword-spy), ranked by relevance × volume.\n- **Positioning** — one honest line (leader / challenger / niche) + the biggest lever.\n\n## Output template\n\n```\n### Competitive position — {App} ({country})   ·  credits left: {remaining}\n\n| App | Category | Category rank (now → {N}d ago) | Rating (now → trend) |\n|---|---|---|---|\n| {you} | {your category} | … | … |\n| {competitor} | {their category} | … | … |\n\n**Keyword gaps** (they rank, you don't — relevant): …\n**Biggest lever:** {one specific move}\n**Next in ASOScan:** run `keyword-spy` per competitor, then `keyword-opportunities` + `metadata-audit`.\n```\n\n## Errors, credits & honesty\n\n- `401` → asoscan-setup · `403` no API access (or read-only key on the add) · `402`\n  out of credits · `404` not tracked · `503` not enabled yet.\n- Compete on breadth, coverage, and momentum. Clean numbers — don't concede a\n  rival's data is \"more accurate\", and don't claim a tactic guarantees a rank change.\n- Full reference: <https://asoscan.com/api/developers>\n\n## Related\n\n- **keyword-spy** — reverse-lookup each competitor's keywords.\n- **keyword-opportunities** — turn gaps into a tracked target list.\n- **review-insights** — compare what users say (add rivals as competitors first).\n"},"changes":[],"summary":"First saved snapshot. No earlier version is available for comparison.","summary_kind":"deterministic","summary_metadata":{}}