Skip to content

Fundamentals

ASO API Examples: curl + Python Recipes for App Store Data

Working ASO API recipes: curl and Python examples for app search, estimated revenue, keyword difficulty, and review mining — plus credit math and rate limits.

Published July 12, 2026 · by GetAppNiche

If you already know what an App Store data API is and how to pick one, this page is the code: five copy-paste recipes — each as curl and Python (requests) — for the building blocks of most ASO tooling: keyword shortlists, competitor dashboards, niche scanners, and review mining across 1.1M+ iOS apps and 2.5M+ on Google Play. Setup once: create a key in Settings → API Keys (see the REST API quickstart) and export GETAPPNICHE_API_KEY="getappniche_...". All endpoints live under https://api.getappniche.com/api/v1/*; app detail costs 1 credit per call, search and review pages 1 credit per row returned (keyword difficulty: 10 per keyword), and every response reports credits_charged.

1. Search apps by keyword and estimated revenue

Find working apps in a niche — here, habit trackers with $3k+ estimated monthly revenue:

curl -H "Authorization: Bearer $GETAPPNICHE_API_KEY" \
  "https://api.getappniche.com/api/v1/apps?search=habit%20tracker&min_revenue=3000&limit=10"
import os, requests
headers = {"Authorization": f"Bearer {os.environ['GETAPPNICHE_API_KEY']}"}
resp = requests.get("https://api.getappniche.com/api/v1/apps", headers=headers,
                    params={"search": "habit tracker", "min_revenue": 3000, "limit": 10})
resp.raise_for_status()
for app in resp.json()["items"]:
    print(app["title"], app["revenue_est_monthly"])  # revenue is an estimate

Other filters: category, min_rating, min_reviews, min_downloads, growth filters, sort_by/sort_dir, limit (default 50, max 100 — 1 credit per app returned), offset. Run this weekly per niche and diff the results — that’s a niche scanner that spots new entrants before they chart.

2. Pull one app’s detail record

App IDs use {store}:{store_id} format — apple:284882215 is Yelp:

curl -H "Authorization: Bearer $GETAPPNICHE_API_KEY" \
  "https://api.getappniche.com/api/v1/apps/apple:284882215"
app = requests.get("https://api.getappniche.com/api/v1/apps/apple:284882215",
                   headers=headers).json()  # full record incl. estimated revenue/downloads

This is the competitor-dashboard primitive: loop it over a watchlist of app_ids on a schedule, store the estimated figures with a timestamp, and you have your own trend lines. A 404 means the app_id isn’t in {store}:{store_id} shape.

3. Score one ASO keyword (10 credits)

Keyword difficulty is the expensive call — 10 credits per keyword — so aim it at terms that survived a cheap first pass:

curl -H "Authorization: Bearer $GETAPPNICHE_API_KEY" \
  "https://api.getappniche.com/api/v1/keywords/difficulty?keyword=habit%20tracker&store=apple&country=US&language=en"
score = requests.get("https://api.getappniche.com/api/v1/keywords/difficulty",
                     headers=headers, params={"keyword": "habit tracker", "store": "apple",
                     "country": "US", "language": "en"}).json()  # difficulty + opportunity

Use it as the final gate in keyword research: brainstorm wide, then spend 10 credits only on terms you’d actually put in a title.

4. Batch-score a keyword shortlist

There’s no batch REST endpoint (the MCP server has a batch_keyword_difficulty tool; over REST you loop) — and a loop must respect the 60 requests/minute rate limit, so build the sleep in from the start:

for kw in "habit tracker" "mood journal" "water reminder"; do
  curl -s -H "Authorization: Bearer $GETAPPNICHE_API_KEY" --get \
    --data-urlencode "keyword=$kw" -d "store=apple" -d "country=US" -d "language=en" \
    "https://api.getappniche.com/api/v1/keywords/difficulty"
  sleep 1.1  # stay under 60 requests/minute
done
import time
scores = {}
for kw in ["habit tracker", "mood journal", "water reminder"]:
    resp = requests.get("https://api.getappniche.com/api/v1/keywords/difficulty",
                        headers=headers, params={"keyword": kw, "store": "apple",
                        "country": "US", "language": "en"})
    if resp.status_code == 429:  # rate limited: honor Retry-After, retry once
        time.sleep(int(resp.headers.get("Retry-After", "5")))
        resp = requests.get(resp.url, headers=headers)
    resp.raise_for_status()
    scores[kw] = resp.json()
    time.sleep(1.1)  # 60 rpm ceiling — ~1s per call stays safely under it

Sort scores by opportunity and you have a ranked shortlist. At 10 credits per keyword, a 20-term list costs 200 credits — budget for it (math below).

5. Pull an app’s reviews for mining

curl -H "Authorization: Bearer $GETAPPNICHE_API_KEY" \
  "https://api.getappniche.com/api/v1/reviews?store=apple&store_id=284882215&limit=20"
reviews = requests.get("https://api.getappniche.com/api/v1/reviews", headers=headers,
                       params={"store": "apple", "store_id": 284882215, "limit": 20}
                       ).json()  # enriched rows with sentiment and topic signals, …

Pipe negative-sentiment rows from your top three competitors into a topic count and you get a feature-gap list — the programmatic version of competitor review analysis.

Budgeting your 5,000 credits

The Pro plan includes 5,000 credits/month. Worked example — a weekly niche-scan pipeline:

  • 1 app search of 10 rows per week (recipe 1): 10 × 4 = 40/month
  • 50 app-detail pulls per week (recipe 2): 50 × 4 = 200/month
  • 20 keyword scores per week (recipe 4): 20 × 10 × 4 = 800/month
  • 20 newest reviews for 3 competitors, weekly (recipe 5): 3 × 20 × 4 = 240/month

Total ≈ 1,280 credits/month — about 26% of the allowance, with keyword difficulty ~63% of it. Rule of thumb: detail is cheap, and searches and review pages cost exactly the rows you ask for — set limit to what you’ll read, not the maximum. The budget question is still “how many keywords do I score?” (hard ceiling: 500/month if you spend everything there). Extra 500-credit packs are available in the app if a project spikes.

Honest limits

  • Revenue and downloads are estimates, modeled from public signals — ranges for comparing apps, never accounting data.
  • No rank-tracking endpoint — current keyword difficulty/opportunity scores, not a time series of where an app ranked. Daily rank tracking (both stores) lives in the app, not the API.

Prefer no code at all?

The same data is exposed over MCP, so an AI agent can run every recipe above from plain-English prompts — see using the GetAppNiche MCP with Claude and the App Store MCP server guide. Either way, access is included in the plan: see pricing, grab a key, and your first call returns live data in under two minutes.

Frequently asked questions