AppClimb
App Store keyword research: Apple popularity, difficulty with evidence, verdicts and app rankings.
Install
Add this to your client's MCP configuration (Claude Desktop: claude_desktop_config.json; Cursor: .cursor/mcp.json; VS Code and others use the same "mcpServers" shape).
claude mcp add --transport http appclimb 'https://appclimb.app/mcp'
{
"mcpServers": {
"appclimb": {
"type": "http",
"url": "https://appclimb.app/mcp"
}
}
}
Documentation
From the project's README on GitHub, refreshed weekly. Links open on GitHub.
Contents
AppClimb — App Store keyword explorer
AppClimb is a freemium App Store keyword tool that answers one question: which keywords can my app actually rank for?
Search any keyword and get Apple's official Ads popularity
(searchPopularity1to100, 1–100) with Apple's own weekly history, a
difficulty estimate that shows its evidence, and a verdict (Worth targeting,
Long-tail win, Competitive, Dominated, Low demand). Keyword Explorer works as a
guest (8 new checks/day). A free account raises that to 30/day and unlocks 1 tracked app and the ASO
assistant (5 messages/day). The optional Pro plan ($8/month, $64/year) lifts
the limits, adds 52 weeks of Apple history, and cloud sync.
Popularity is Apple's relative score, or "≤N · Long tail" for terms below Apple's published top 500 in their category, or (only if Apple is unreachable) a labeled estimate. Difficulty is always an estimate. Nothing is search volume, and no history is invented. See ADR 0005.
Product surface
- Keyword Explorer (
/) — search with autocomplete from Apple's list of real App Store searches; a "What people search" panel (rising, most searched, new this month, per category); a keyword table with popularity (source-labeled), 12-week Apple trend, difficulty, and verdict; a detail panel with the verdict reason, difficulty evidence, Apple's weekly popularity chart, related Apple searches, and the top 10 apps. - My Apps tracker (
/, sidebar) — add an iOS app by name, App Store URL, or ID; get metadata-based keyword suggestions; track scores, observed position in public iTunes results (first 200), notes, opportunity score, status filters, CSV export, and real rank history locally per app + storefront. - Storefronts — 16 supported countries.
- Local history — Keyword Explorer: one real snapshot per keyword per day
in
appclimb:kw:v1:*(records from before Oct 2026 had an invented baseline; those points are dropped on load). My Apps: real position/metrics snapshots inappclimb:tracker:v1. - Accounts & Pro (ADR 0004) — passwordless sign-in (Google OAuth or email
magic link), Paddle billing, plan-aware quotas, and Pro cloud sync. Guest
search stays open. Tracking and the assistant require a free account. The
account chrome appears when
NEXT_PUBLIC_PRO_ENABLED=1or whenGET /api/mereportsconfigured: true. - Agent access (ADR 0008) — remote MCP server at
/mcp, setup on/connect. Listed in the official MCP Registry fromserver.json; Claude/ChatGPT directory status and submission texts are in docs/mcp-directory-submissions.md, including the one password sign-in for directory reviewers (src/lib/review-login.ts, off unless its secrets are set). - Marketing pages —
/app-store-keywords,/guides/keyword-research,/blog(+ 4 notes),/about,/pricing,/privacy,/terms,/refunds.
Architecture
A single Next.js app deployed as a Cloudflare Worker (OpenNext). The browser
queries itunes.apple.com directly (Apple allows CORS * but blocks
Cloudflare Worker IPs). Official popularity comes from the Worker's store of
Apple's weekly published search terms (Apple Ads Platform API v1 with founder
credentials, cached in D1; first use of a new storefront-week costs ~8
sequential Apple calls, and .github/workflows/warm-apple-terms.yml preloads
them). Keyword history lives in the visitor's browser by default.
Monetization runs on the same Worker plus a D1 database (appclimb-db,
staging appclimb-db-staging):
src/app/api/auth/*— magic-link + Google sign-in, sign-outsrc/app/api/me— profile, plan, limitssrc/app/api/sync— Pro cloud sync (tracker/explorerblobs, LWW)src/app/api/billing/webhook— signed Paddle events → D1 subscriptionssrc/app/api/billing/portal— Paddle subscription management URLssrc/app/api/chat,src/app/api/popularity— plan-aware quotassrc/app/api/terms/{suggest,related,trending}— Apple's published search terms (D1-backed store insrc/lib/search-terms-store.ts)migrations/— D1 schema;src/lib— plan/auth/billing/sync/quota libsworker/,deploy/,compose.yml— frozen rollback artifacts from earlier architectures; never the current backend
Local development
npm install
npm run dev
Keyword Explorer / My Apps work without env vars (iTunes estimate fallback).
Official Apple Ads popularity needs server-only founder credentials:
# local — see .env.example
APPLE_ADS_CLIENT_ID=...
APPLE_ADS_TEAM_ID=...
APPLE_ADS_KEY_ID=...
APPLE_ADS_PRIVATE_KEY="-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----"
APPLE_ADS_ACCOUNT_ID=...
# production Worker secrets (never commit)
npx wrangler secret put APPLE_ADS_CLIENT_ID
npx wrangler secret put APPLE_ADS_TEAM_ID
npx wrangler secret put APPLE_ADS_KEY_ID
npx wrangler secret put APPLE_ADS_PRIVATE_KEY
npx wrangler secret put APPLE_ADS_ACCOUNT_ID
Optional ASO Assistant (DeepSeek V4 Flash) needs a server-only key:
# local
echo 'DEEPSEEK_API_KEY=sk-...' >> .env.local
# production Worker secret (never commit the key)
npx wrangler secret put DEEPSEEK_API_KEY
The key is used only by POST /api/chat. It is never shipped to the browser.
Monetization setup (accounts · Paddle · sync)
The backend ships inert: routes degrade to 503 and the account UI is hidden until the founder completes this checklist. Do it in sandbox first, then repeat for production.
- Databases — already created:
appclimb-db(production) andappclimb-db-staging. Local dev:npx wrangler d1 migrations apply appclimb-db --local. - Paddle — create an account at paddle.com, then under Products create “AppClimb Pro” with two prices: Pro Monthly $8 and Pro Yearly $64. Note their price IDs. In Sandbox → Developer tools → Authentication grab the API key, client-side token, and a notification/webhook secret.
- Webhook — in Paddle, subscribe to subscription events
(
subscription.created/updated/paused/canceled) pointing athttps://appclimb.app/api/billing/webhook. - Google OAuth — Google Cloud Console → APIs & Services → Credentials →
OAuth client (Web) with authorized redirect URI
https://appclimb.app/api/auth/google/callback. - Resend — resend.com → API key, verify
appclimb.appas a sending domain (add the DNS records it shows). - Server secrets (Worker, never committed):
npx wrangler secret put PADDLE_API_KEY npx wrangler secret put PADDLE_WEBHOOK_SECRET npx wrangler secret put RESEND_API_KEY npx wrangler secret put GOOGLE_CLIENT_ID npx wrangler secret put GOOGLE_CLIENT_SECRET npx wrangler secret put PRO_ENABLED # value: 1 — enables plan quotas - Public build-time vars — GitHub → repo Settings → Secrets and
variables → Actions → Variables:
NEXT_PUBLIC_PRO_ENABLED=1,NEXT_PUBLIC_PADDLE_CLIENT_TOKEN=<client token>,NEXT_PUBLIC_PADDLE_ENV=sandbox(thenproduction),NEXT_PUBLIC_PADDLE_PRICE_PRO_MONTHLY=<price id>,NEXT_PUBLIC_PADDLE_PRICE_PRO_YEARLY=<price id>. - Staging — deploy with
npm run deploy:cloudflare:web:stagingand set the same secrets for thestagingenvironment (npx wrangler secret put ... --env staging) before the production flip.
Verification
npm run lint
npm run typecheck
npm test
npm run build
npm run build:cloudflare
npm run test:e2e
npm run check runs lint, typecheck, coverage, and both builds.
Production configuration
Pushes to main run .github/workflows/cloudflare-deploy.yml, which builds,
applies D1 migrations, deploys the web Worker, verifies the canonical homepage,
waits for the sitemap, and notifies IndexNow. Deploys go live immediately — run
npm run check and npm run test:e2e before pushing.
The canonical production host is https://appclimb.app; the staging Worker is
appclimb-web-staging.
Frequently asked questions
What is AppClimb?
App Store keyword research: Apple popularity, difficulty with evidence, verdicts and app rankings.
How do I install AppClimb?
It runs as a remote server. In Claude Code: claude mcp add --transport http appclimb 'https://appclimb.app/mcp'. For other clients, paste the JSON configuration from this page into their MCP settings.
Does AppClimb need an API key?
Its registry entry lists no required key or secret. Some features may still need an account with the service it connects to.
Is AppClimb open source?
Its code is public on GitHub, but the repository does not declare a standard license.
Who maintains AppClimb?
It is published by skverall. AI.tn lists it but does not maintain or endorse it.
From the official MCP Registry. Listing is not an endorsement: review a server's code and permissions before giving it access to your data.