Astro ASO Skill
Query your local Astro Mac app database for App Store Optimization insights.
When to Use
Invoke this skill when the user asks about:
- Keyword rankings and tracking
- Historical ranking data and trends
- Competitor analysis for keywords
- App ratings and reviews data
- Keyword opportunities and recommendations
- ASO health analysis
- Ranking predictions and anomalies
Prerequisites
- Astro Mac app installed: https://astro.app
- App must have data (tracked apps/keywords)
Usage
Run commands via the bundled script:
node .claude/skills/astro-aso/scripts/astro-query.mjs <command> '<json-params>'
Available Commands
list_apps
List all tracked apps in Astro.
node .claude/skills/astro-aso/scripts/astro-query.mjs list_apps '{}'
search_rankings
Search keyword rankings for apps.
| Param | Type | Required | Description | | ------- | ------ | -------- | ------------------------- | | keyword | string | YES | Keyword to search | | store | string | no | Filter by store (ios/mac) | | appName | string | no | Filter by app name | | appId | string | no | Filter by app ID |
node .claude/skills/astro-aso/scripts/astro-query.mjs search_rankings '{"keyword": "photo editor"}'
historical_rankings
Get historical ranking data for a keyword.
| Param | Type | Required | Description | | -------- | ------ | -------- | ----------------------------- | | keyword | string | YES | Keyword to track | | appName | string | no | Filter by app name | | appId | string | no | Filter by app ID | | daysBack | number | no | Days of history (default: 30) | | store | string | no | Filter by store |
node .claude/skills/astro-aso/scripts/astro-query.mjs historical_rankings '{"keyword": "photo editor", "daysBack": 90}'
app_keywords
Get all tracked keywords for an app.
| Param | Type | Required | Description | | ------- | ------ | -------- | ----------------- | | appName | string | no* | App name to query | | appId | string | no* | App ID to query | | store | string | no | Filter by store |
*One of appName or appId required
node .claude/skills/astro-aso/scripts/astro-query.mjs app_keywords '{"appName": "My App"}'
keyword_trends
Analyze keyword ranking trends over time.
| Param | Type | Required | Description | | ------- | ------ | -------- | ------------------------------------ | | keyword | string | YES | Keyword to analyze | | appName | string | no | Filter by app name | | appId | string | no | Filter by app ID | | period | string | no | week/month/year/all (default: month) | | store | string | no | Filter by store |
node .claude/skills/astro-aso/scripts/astro-query.mjs keyword_trends '{"keyword": "photo editor", "period": "month"}'
compare_rankings
Compare rankings between two dates.
| Param | Type | Required | Description | | ------- | ------ | -------- | ------------------------ | | keyword | string | YES | Keyword to compare | | date1 | string | YES | First date (ISO format) | | date2 | string | YES | Second date (ISO format) | | appName | string | no | Filter by app name | | appId | string | no | Filter by app ID | | store | string | no | Filter by store |
node .claude/skills/astro-aso/scripts/astro-query.mjs compare_rankings '{"keyword": "photo editor", "date1": "2024-01-01", "date2": "2024-02-01"}'
app_ratings
Get app ratings and review data.
| Param | Type | Required | Description | | -------- | ------ | -------- | ----------------------------- | | appName | string | no* | App name to query | | appId | string | no* | App ID to query | | store | string | no | Filter by store | | daysBack | number | no | Days of history (default: 30) |
*One of appName or appId required
node .claude/skills/astro-aso/scripts/astro-query.mjs app_ratings '{"appName": "My App", "daysBack": 60}'
keyword_competitors
Find competing apps ranking for a keyword.
| Param | Type | Required | Description | | ------- | ------ | -------- | ------------------------- | | keyword | string | YES | Keyword to analyze | | store | string | no | Filter by store | | limit | number | no | Max results (default: 10) |
node .claude/skills/astro-aso/scripts/astro-query.mjs keyword_competitors '{"keyword": "photo editor", "limit": 20}'
keyword_recommendations
Get recommended keywords based on existing ones.
| Param | Type | Required | Description | | ------- | ------ | -------- | ------------------------- | | keyword | string | YES | Base keyword | | appName | string | no | Filter by app name | | appId | string | no | Filter by app ID | | store | string | no | Filter by store | | limit | number | no | Max results (default: 10) |
node .claude/skills/astro-aso/scripts/astro-query.mjs keyword_recommendations '{"keyword": "photo"}'
competitive_landscape
Analyze competitive position for an app.
| Param | Type | Required | Description | | ------- | ------ | -------- | ----------------------------- | | appName | string | no* | App name to analyze | | appId | string | no* | App ID to analyze | | store | string | no | Filter by store | | limit | number | no | Max competitors (default: 10) |
*One of appName or appId required
node .claude/skills/astro-aso/scripts/astro-query.mjs competitive_landscape '{"appName": "My App"}'
keyword_opportunities
Find keyword opportunities (low difficulty, high popularity).
| Param | Type | Required | Description | | ------------- | ------ | -------- | -------------------- | | appName | string | no* | App name to analyze | | appId | string | no* | App ID to analyze | | store | string | no | Filter by store | | minPopularity | number | no | Min popularity score | | maxDifficulty | number | no | Max difficulty score |
*One of appName or appId required
node .claude/skills/astro-aso/scripts/astro-query.mjs keyword_opportunities '{"appName": "My App", "maxDifficulty": 30}'
ranking_anomalies
Detect sudden ranking changes and anomalies.
| Param | Type | Required | Description | | --------- | ------ | -------- | ------------------------------ | | appName | string | no* | App name to analyze | | appId | string | no* | App ID to analyze | | daysBack | number | no | Days to analyze (default: 7) | | threshold | number | no | Change threshold (default: 10) | | store | string | no | Filter by store |
*One of appName or appId required
node .claude/skills/astro-aso/scripts/astro-query.mjs ranking_anomalies '{"appName": "My App", "threshold": 15}'
ranking_predictions
Predict future rankings based on trends.
| Param | Type | Required | Description | | ----------- | ------ | -------- | ---------------------------- | | keyword | string | YES | Keyword to predict | | appName | string | no | Filter by app name | | appId | string | no | Filter by app ID | | store | string | no | Filter by store | | daysForward | number | no | Days to predict (default: 7) |
node .claude/skills/astro-aso/scripts/astro-query.mjs ranking_predictions '{"keyword": "photo editor", "daysForward": 14}'
low_competition_keywords
Find keywords with low competition.
| Param | Type | Required | Description | | ------------- | ------ | -------- | ---------------------------- | | store | string | no | Filter by store | | maxDifficulty | number | no | Max difficulty (default: 30) | | minPopularity | number | no | Min popularity (default: 20) | | limit | number | no | Max results (default: 20) |
node .claude/skills/astro-aso/scripts/astro-query.mjs low_competition_keywords '{"maxDifficulty": 25, "minPopularity": 30}'
analyze_aso_health
Get overall ASO health analysis for an app.
| Param | Type | Required | Description | | ------- | ------ | -------- | ------------------- | | appName | string | no* | App name to analyze | | appId | string | no* | App ID to analyze | | store | string | no | Filter by store |
*One of appName or appId required
node .claude/skills/astro-aso/scripts/astro-query.mjs analyze_aso_health '{"appName": "My App"}'
Output Format
All commands return JSON with either:
{ "success": true, "data": ... }on success{ "success": false, "error": "..." }on failure
Example Workflow
-
List all tracked apps:
node .claude/skills/astro-aso/scripts/astro-query.mjs list_apps '{}' -
Get keywords for a specific app:
node .claude/skills/astro-aso/scripts/astro-query.mjs app_keywords '{"appName": "My App"}' -
Analyze keyword trends:
node .claude/skills/astro-aso/scripts/astro-query.mjs keyword_trends '{"keyword": "productivity", "period": "month"}' -
Find opportunities:
node .claude/skills/astro-aso/scripts/astro-query.mjs keyword_opportunities '{"appName": "My App", "maxDifficulty": 40}'