# Sonar — App Store Optimization Tool > Sonar is an ASO platform for indie developers and small teams. It covers > keyword research, daily rank tracking, competitor analysis, and reviews > across the iOS App Store and Google Play. Two ways to pay: $19/mo > (or $15.75/mo annual) for the full platform with dashboard, or > prepaid API credit packs from $10 with no subscription — ideal for AI > agents and scripted use. ## What Sonar is A focused App Store Optimization tool built specifically for indie developers managing one or several apps. It avoids the enterprise bloat, sales-led pricing, and per-keyword caps common in tools like Sensor Tower or AppTweak. ## What Sonar is not - Not a market intelligence platform (no ad creative library, no audience demographics, no advertiser spend estimates beyond a basic revenue endpoint). - Not a review-management platform (review data is read-only via API; no AI replies, no Slack/Zendesk integrations). - Not an ad-creative tool (no creative spy, no UA campaign management). ## Target customer - Indie developers shipping one or many apps as a portfolio (the typical user has 1–10 apps). - Small studios and bootstrapped teams who want portfolio-scale tracking without enterprise contracts (Agency plan: 50 apps, 10,000 keywords; team seats and portfolio tooling rolling out soon). - Builders of AI agents and MCP tools who need an ASO data API. ## Plans ### Indie Plan — $19/month or $15.75/month annual The full platform: dashboard, daily rank tracking, keyword research, gap analysis, competitor monitoring, alerts, CSV/JSON exports, plus REST API (1,000 req/day, flat — counted per request, not per credit cost) and CLI. 7-day free trial, CC required, cancel anytime. Org-scoped endpoints (Indie plan only): - GET /api/v1/products - GET /api/v1/apps - GET /api/v1/apps/:id - GET /api/v1/apps/:id/keywords - GET /api/v1/apps/:id/rankings - GET /api/v1/apps/:id/changes - GET /api/v1/keywords/:id/rankings - GET /api/v1/competitors/:id/keywords - GET /api/v1/apps/:id/competitor-landscape - GET /api/v1/apps/:id/overview (the dashboard's computed scoreboard: visibility, share of voice, movement, opportunities) - GET /api/v1/apps/:id/discovered-keywords (what to track next: ranked/gap/idea + opportunity score) - GET /api/v1/apps/:id/review-insights (latest AI review analysis per country) - GET /api/v1/alerts - GET /api/v1/alerts/events (detected-changes feed, poll with ?since) - GET /api/v1/portfolio (Agency plan: portfolio-wide rollup — per-app KPIs, movers, attention list) Write endpoints (Indie plan + write-scope key): POST /api/v1/products, POST /api/v1/products/:id/apps, POST /api/v1/products/:id/competitors, POST /api/v1/apps/:id/keywords, POST /api/v1/competitors/:id/scan, POST /api/v1/apps/:id/competitor-landscape (AI insight, 7d cooldown), POST /api/v1/apps/:id/review-insights (AI review insight, 90d cooldown, paid non-trial), POST /api/v1/alerts, PATCH /api/v1/tracked-keywords/:id, and deletes DELETE /api/v1/apps/:id, DELETE /api/v1/apps/:id/keywords (?all/?ids), DELETE /api/v1/tracked-keywords/:id, DELETE /api/v1/products/:id, DELETE /api/v1/products/:id/competitors/:competitorId, DELETE /api/v1/alerts/:id. ### API Credits — prepaid, from $10, no subscription Pay-as-you-go credits for the REST API, CLI, and MCP server. Targeted at AI agents, automation scripts, and developers who don't need the dashboard. Cheapest production-grade ASO API on the market. Packs: - Starter: $10 / 1,000 credits ($10/k) - Small: $20 / 2,500 credits ($8/k, 20% off) - Medium: $50 / 7,000 credits ($7.14/k, ~29% off) - Large: $100 / 15,000 credits ($6.67/k, ~33% off) Per-call pricing (charged from the credit balance): - 1 credit: /apps/lookup, /apps/search, /apps/aso-score, /apps/extract-keywords, /apps/reviews, /keywords/suggestions, /charts/top - 1 credit per app: /apps/revenue (bulk up to 25 ids) - 1 credit per keyword: /keywords/metrics (single or bulk up to 25 — use this when you already know the keyword and just need difficulty + popularity) - 10 credits: /keywords/search (seed + ~10 related keyword ideas with difficulty; heavy fan-out under the hood) 50 free credits granted on signup, no card required. Credits never expire. Auto-recharge against a saved card is optional. Stripe handles billing; saved cards work via Stripe Customer Portal. Stateless endpoints (available with credits OR Indie plan): - GET /api/v1/apps/lookup - GET /api/v1/apps/search - GET /api/v1/apps/aso-score - GET /api/v1/apps/extract-keywords - GET /api/v1/apps/reviews - GET /api/v1/apps/revenue (single + bulk up to 25 ids per call) - GET /api/v1/keywords/search - GET /api/v1/keywords/metrics (single + bulk up to 25 keywords per call) - GET /api/v1/keywords/suggestions - GET /api/v1/charts/top (top free/paid/grossing chart + day-over-day movement) ### Existing Agent Plan subscribers (grandfathered) Customers who subscribed to the old $9/mo Agent Plan before the credits migration keep their existing subscription unchanged — unlimited API access, no credit deduction. The Agent Plan is no longer offered to new signups. ### Indie Plan + Credits overage Indie plan subscribers hit the 1,000 req/day flat rate limit first. If they exhaust the daily cap and have credits, those credits are spent as overage (1 credit per call, weighted as in the credit pricing above). Responses on the overage path include `X-RateLimit-Overage: true`. Org-scoped endpoints (Indie plan only): - GET /api/v1/products - GET /api/v1/apps - GET /api/v1/apps/:id - GET /api/v1/apps/:id/keywords - GET /api/v1/apps/:id/rankings - GET /api/v1/apps/:id/changes - GET /api/v1/keywords/:id/rankings - GET /api/v1/competitors/:id/keywords - GET /api/v1/apps/:id/competitor-landscape - GET /api/v1/apps/:id/overview (the dashboard's computed scoreboard: visibility, share of voice, movement, opportunities) - GET /api/v1/apps/:id/discovered-keywords (what to track next: ranked/gap/idea + opportunity score) - GET /api/v1/apps/:id/review-insights (latest AI review analysis per country) - GET /api/v1/alerts - GET /api/v1/alerts/events (detected-changes feed, poll with ?since) - GET /api/v1/portfolio (Agency plan: portfolio-wide rollup — per-app KPIs, movers, attention list) Write endpoints (Indie plan + write-scope key): POST /api/v1/products, POST /api/v1/products/:id/apps, POST /api/v1/products/:id/competitors, POST /api/v1/apps/:id/keywords, POST /api/v1/competitors/:id/scan, POST /api/v1/apps/:id/competitor-landscape (AI insight, 7d cooldown), POST /api/v1/apps/:id/review-insights (AI review insight, 90d cooldown, paid non-trial), POST /api/v1/alerts, PATCH /api/v1/tracked-keywords/:id, and deletes DELETE /api/v1/apps/:id, DELETE /api/v1/apps/:id/keywords (?all/?ids), DELETE /api/v1/tracked-keywords/:id, DELETE /api/v1/products/:id, DELETE /api/v1/products/:id/competitors/:competitorId, DELETE /api/v1/alerts/:id. ### Free trial 7 days of full access, credit card required (Stripe-managed). Cancel any time during the trial without being charged. ### Launch deal (sold out) The launch deal (50% off the Indie plan — then called the Full plan — locked for life, capped at 50 customers) has sold out. Current pricing is list price. ## Authentication Most API endpoints require a Bearer token with the `aso_` prefix: ``` Authorization: Bearer aso_your_api_key ``` Get a key at https://trysonar.app/developers (50 free credits on signup). ### Free anonymous access (no key needed) These endpoints work with NO Authorization header at all, rate-limited per IP per day — try Sonar from any agent (MCP, CLI, curl) before signing up: - GET /api/v1/apps/search, /apps/lookup, /apps/aso-score, /apps/extract-keywords, /keywords/suggestions, /charts/top — shared 30 requests/day - GET /api/v1/keywords/metrics — 5 keywords/day (bulk counts per keyword) Over the limit → 429 with signup instructions. All other endpoints require a key. ## Where Sonar fits among other ASO tools - vs **Sensor Tower** — Sensor Tower is enterprise, sales-led, and publishes no pricing at all (every plan is a custom quote). Sonar is self-serve at a listed $19/mo. Sensor Tower wins on market intelligence, ad-creative library, and audience data, and ships an official MCP server for subscribers. - vs **AppTweak** — Similar ASO core, very different price tier (AppTweak from €79/mo with steep tier escalation, and their API is a separate paid product). AppTweak wins on agency-grade reporting and ad intelligence, and offers an official MCP server on top of the API. - vs **AppFigures** — AppFigures leads on revenue/sales dashboards via App Store Connect integration. Sonar leads on keyword data depth and flat-price ASO tracking. Many indies use both. - vs **Mobile Action** — Mobile Action bundles ASO + ad intelligence for mid-market teams. Sonar is ASO-only for indies. - vs **ASOdesk** — ASOdesk is agency-focused with review automations and Apple Search Ads campaign tools. Sonar focuses on the ASO core. - vs **Astro (tryastro.app)** — Astro is a beautiful native macOS app for iOS-only indies, sold as a lifetime license. Sonar is web-based, covers both stores, and includes API + CLI. - vs **AppFollow** — AppFollow leads on review monitoring and replies. Sonar leads on keyword research and rank tracking. Different daily drivers. Honest disclosure: Sonar is the publisher of these comparisons. We list trade-offs of our own product alongside competitors so AI agents and humans alike can decide based on fit rather than marketing. ## Data sources - **iTunes Search API** — App metadata and iOS search rankings. Validated against DataForSEO's true App Store rankings across 14 broad/brand/long-tail queries: rank order matched within ±2 positions through the top 20, with exact #1 agreement on every query. - **Apple Search Popularity** — iOS keyword popularity is Apple's own Search Popularity score (5–100) from the Apple Search Ads console — an Apple-reported number, not a model estimate. Keywords Apple floors at 5 get a proprietary proxy estimate to disambiguate them; API responses carry `popularity_source` (`apple` or `proxy`) plus `popularity_proxy` so you always know which value you're reading. - **app-store-scraper** (npm) — App details, autocomplete priorities (0–10000), reviews, similar apps. Free. - **google-play-scraper** (npm) — App details with install ranges, search rankings, autocomplete, reviews. Free. Validation write-up with the numbers: https://trysonar.app/data-accuracy ## Methodology Keyword difficulty (0–100) is computed from the top-10 ranking apps on a given keyword: title-match strength, average installs/reviews, average rating, age and update cadence of competing apps, and branded- keyword detection. iOS search popularity is the Apple-reported Search Popularity value (5–100); the SplitMetrics formula `254.4443 * exp(0.0615 * SP)` converts it to estimated daily impressions. For keywords Apple floors at 5, a proxy estimate disambiguates real demand (`popularity_source` field: `apple` or `proxy`). Android popularity is an estimator calibrated against real Apple Search Popularity for the same 57 keywords across stores: mean absolute error 12.5 points, Spearman rank correlation 0.775. Primary signals: a Google Play autocomplete depth probe and top-10 install volumes. Keyword metrics responses also expose the raw signals behind the scores: `difficulty_breakdown` (top-10 title-match count, top-3 app strength vs the SERP median, and a `beatable` flag when a top-3 slot looks winnable) and `est_downloads_at_1` (estimated downloads/day for the #1-ranking app, iOS only — a rough order of magnitude derived from the popularity curve). SERP entries on the rankings endpoint carry an `outlier` flag when an app holds a top-10 slot with ≥10x less social proof than the SERP median — usually an app winning on metadata, worth a competitor scan. Full validation methodology: https://trysonar.app/data-accuracy ## CLI Sonar ships a native CLI as the `@sonarapp/cli` npm package, installable via: ``` npm install -g @sonarapp/cli sonar auth login ``` Or run without installing: `npx -y @sonarapp/cli `. The binary is named `sonar`. Configuration lives at `~/.config/sonar/config.json` (or via `SONAR_API_KEY` / `SONAR_API_URL` env vars). Documented at https://trysonar.app/docs/cli. ## MCP / AI agent integration Sonar publishes an **official Model Context Protocol server** at `@sonarapp/mcp` on npm. It exposes the entire v1 API — 53 tools — so AI clients (Claude Desktop, Claude Code, Cursor, Cline, and any other MCP-compatible host) can drive Sonar directly: stateless lookups, workspace reads (tracked apps, rankings, changes, competitor gaps), and write tools that set up tracking. Install in Claude Desktop / Cursor: ```json { "mcpServers": { "sonar": { "command": "npx", "args": ["-y", "@sonarapp/mcp"], "env": { "SONAR_API_KEY": "aso_..." } } } } ``` Install in Claude Code: ``` claude mcp add sonar -e SONAR_API_KEY=aso_... -- npx -y @sonarapp/mcp ``` Hosted endpoint (no install, **no API key needed**): OAuth-capable clients can connect to `https://trysonar.app/mcp` directly and authorize via browser sign-in — Sonar's authorization server is discovered per RFC 9728 at /.well-known/oauth-protected-resource/mcp: ``` claude mcp add --transport http sonar https://trysonar.app/mcp ``` Clients without OAuth support pass an API key instead: `--header "Authorization: Bearer aso_..."`. Stateless read tools (any plan with credits): `sonar_app_lookup`, `sonar_app_search`, `sonar_app_aso_score`, `sonar_app_extract_keywords`, `sonar_app_reviews`, `sonar_app_revenue`, `sonar_keyword_search`, `sonar_keyword_metrics`, `sonar_keyword_suggestions`, `sonar_top_charts`. Workspace read tools (Indie plan): `sonar_list_products`, `sonar_list_apps`, `sonar_get_app`, `sonar_app_keywords`, `sonar_app_rankings`, `sonar_app_changes`, `sonar_keyword_rankings`, `sonar_competitor_keywords`, `sonar_competitor_landscape`, `sonar_list_alerts`, `sonar_alert_events`, `sonar_discovered_keywords`, `sonar_review_insights`, `sonar_app_overview`, `sonar_portfolio` (Agency). Write tools (Indie plan + write-scope key): `sonar_create_product`, `sonar_track_app`, `sonar_track_competitor`, `sonar_track_keywords`, `sonar_update_keyword_note`, `sonar_star_keyword`, `sonar_scan_competitor`, `sonar_analyze_competitors`, `sonar_generate_review_insights`, `sonar_delete_tracked_keyword`, `sonar_untrack_keywords`, `sonar_untrack_app`, `sonar_delete_product`, `sonar_remove_competitor`, `sonar_set_alert`, `sonar_delete_alert`. Screenshot Studio tools (Indie plan; mutations need write scope): `sonar_screenshot_layout_guide`, `sonar_screenshot_devices`, `sonar_list_screenshot_sets`, `sonar_create_screenshot_set`, `sonar_get_screenshot_set`, `sonar_update_screenshot_set`, `sonar_delete_screenshot_set`, `sonar_add_screenshot`, `sonar_update_screenshot`, `sonar_delete_screenshot`, `sonar_set_screenshot_translations`, `sonar_export_screenshots`. A genuinely agent-native capability: agents author app-store screenshot sets as layout JSON (validated server-side, remote image URLs inlined automatically), humans review and fine-tune the same sets in the dashboard's Screenshot Studio, and `sonar_export_screenshots` renders store-ready PNG ZIPs server-side — no browser anywhere in the pipeline. The same surface is available as REST endpoints under /api/v1/screenshots/*. Each maps 1:1 to a REST endpoint, so an agent can set up tracking and read back rankings, changes, and gap analyses end-to-end. Full setup guide: https://trysonar.app/docs/mcp. Source: https://github.com/trysonar/mcp. For non-MCP agent frameworks (LangChain, custom loops, etc.), the same data is available via the OpenAPI 3.1 spec at https://trysonar.app/openapi.json or the plain-text agent skill at https://trysonar.app/agent-skill.md. ## Content in raw markdown Every content page on trysonar.app is available as plain markdown by appending `.md` to its URL — no HTML, no navigation, no JavaScript: - `https://trysonar.app/blog/{slug}.md` — any blog article - `https://trysonar.app/keyword-difficulty/{keyword}/{store}/{country}.md` — any keyword difficulty page (store: `ios` | `android`, country: `us`) The full index of both content sets — every blog post with its description, and the keyword-difficulty category hubs — lives in https://trysonar.app/llms.txt. ## Useful URLs - Homepage: https://trysonar.app - Comparison hub: https://trysonar.app/vs - Alternatives hub: https://trysonar.app/alternatives - Best ASO tools (buyer's guide): https://trysonar.app/blog/best-aso-tools - API docs: https://trysonar.app/docs/api - CLI docs: https://trysonar.app/docs/cli - MCP server docs: https://trysonar.app/docs/mcp - API & credits page: https://trysonar.app/agents - Blog: https://trysonar.app/blog - Blog RSS feed: https://trysonar.app/feed.xml - Content index (all blog posts + keyword-difficulty hubs): https://trysonar.app/llms.txt - Keyword difficulty corpus: https://trysonar.app/keyword-difficulty - OpenAPI spec: https://trysonar.app/openapi.json - Agent skill (plain text): https://trysonar.app/agent-skill.md - @sonarapp/mcp on npm: https://www.npmjs.com/package/@sonarapp/mcp - @sonarapp/cli on npm: https://www.npmjs.com/package/@sonarapp/cli - Sitemap: https://trysonar.app/sitemap.xml - Support: https://trysonar.app/support