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. 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/*, cost 1 credit per call (keyword difficulty: 10), 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 (max 100), 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 one expensive call — 10 credits instead of 1 — 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 per week (recipe 1): 1 × 4 ≈ 4/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
  • Daily reviews for 3 competitors (recipe 5): 3 × 30 = 90/month

Total ≈ 1,094 credits/month — about 22% of the allowance, with keyword difficulty ~75% of it. Rule of thumb: search, detail, and reviews are effectively free at hobby scale; the budget question is always “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.
  • iOS App Store data only.
  • No rank-tracking endpoint — current keyword difficulty/opportunity scores, not a time series of where an app ranked. If rank history is your core workflow, this API won’t provide it.

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