Research ASO keywords, inspect competition, and manage results from one local-first CLI.
- Fast, free keyword research and visibility tracking
- Keyword scoring with popularity + difficulty + brand classification in one command
- Local ASO dashboard for reviewing keyword/app data
- MCP tool (
aso_evaluate_keywords) for agent workflows and automated keyword research
The dashboard keywords shown above were discovered and added automatically by an agent using the MCP tool.
npm install -g aso-cliNote: requires Node.js >=18.14.1.
ASO commands require Apple Search Ads setup.
- App Store Connect account
- App ID of a published app you can access
- No campaign creation required
- No billing information required
- Create/sign in: https://searchads.apple.com
- If your country is not available during signup, select
United States.
- If your country is not available during signup, select
- Open Apple Search Ads Advanced: https://searchads.apple.com/advanced
- Click your account name in the top-left corner.
- Under Campaign Groups, click Settings.
- Click Link Accounts.
- Select your App Store Connect account and save.
- If this is your first time using Apple Search Ads, you will usually have only one campaign group.
- Copy an App ID from your App Store URL (number after
id) Example App Store URL:App ID ishttps://apps.apple.com/us/app/example-app/id123456789123456789in this example. - Run
aso authand complete Apple ID + password + 2FA in terminal
Notes:
- You may see a missing billing information warning; this can be safely ignored.
- Ensure all campaign groups are linked to a valid App Store Connect account.
- Troubleshoot App Store Connect account linking
# Authenticate once
aso auth
# Fetch keyword metrics
aso keywords "meditation,sleep sounds,white noise"
# Open dashboard
aso| Command | What it does |
|---|---|
aso |
Starts the local dashboard (default command) |
aso keywords "k1,k2,k3" |
Fetches keyword popularity/difficulty and prints JSON |
aso keywords "k1,k2" --stdout |
Machine-readable mode for automation/agents |
aso auth |
Reauthenticates Apple Search Ads session |
aso reset-credentials |
Clears saved credentials/cookies |
aso --primary-app-id <id> |
Sets primary App ID used for popularity requests |
--country <code>: currentlyUSonly--primary-app-id <id>: saved locally for future runs--min-popularity <number>: filters out low-popularity keywords before enrichment--max-difficulty <number>: filters out high-difficulty keywords after enrichment--app-id <id>: associates keywords to this local app id (default:research)--no-associate: skips app-keyword association writes for the currentaso keywordsrun
Association behavior for aso keywords:
- Association writes happen only after a successful command return.
- Without filters, requested keywords are associated.
- With
--min-popularityand/or--max-difficulty, only accepteditemsare associated. - With
--no-associate, no association write occurs.
{
"items": [
{
"keyword": "meditation",
"popularity": 45,
"difficultyScore": 62,
"minDifficultyScore": 38,
"isBrandKeyword": false
}
],
"failedKeywords": [],
"filteredOut": []
}aso keywords "<comma-separated-keywords>" --stdout is the machine-readable contract.
- Success: exit code
0,stdoutcontains exactly one JSON object with:itemsfailedKeywordsfilteredOut
- Failure: exit code
!= 0,stdoutcontains exactly one JSON object with:error.code(CLI_VALIDATION_ERRORorCLI_RUNTIME_ERROR)error.message- optional
error.help
- In
--stdoutmode, CLI logs and prompts are kept offstdoutso parsers can read one JSON payload safely.
Failure example:
{
"error": {
"code": "CLI_RUNTIME_ERROR",
"message": "Primary App ID is missing. Run 'aso --primary-app-id <id>' or run 'aso' in a terminal to set it, then retry this command with --stdout."
}
}This package also installs aso-mcp with tool: aso_evaluate_keywords.
aso_evaluate_keywords runs aso keywords ... --stdout with default filters:
minPopularity = 6(floor:6)maxDifficulty = 70
MCP returns only accepted rows (keyword, popularity, difficulty, minDifficultyScore, isBrandKeyword).
Example MCP config:
{
"mcpServers": {
"aso": {
"command": "aso-mcp"
}
}
}- Storefront support:
US - Multi-storefront support is planned
- Contribution guide: CONTRIBUTING.md

