| name | astro-aso |
| description | Query local Astro Mac app database for ASO insights. Use when the user asks about keyword rankings, historical ranking data, trend analysis, competitor keywords, app ratings, keyword opportunities, or ASO health metrics. |
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}'