Skip to content

Developers

REST API quickstart

Pull App Store data into scripts, spreadsheets and automations: auth, endpoints, curl/Python/JavaScript examples, credits, and error fixes.

Verified Jul 19, 2026 10 min read

The GetAppNiche REST API lets you pull the same iOS App Store data you see in the app — app search with revenue and download estimates, ASO keyword difficulty, and reviews — into your own scripts, Google Sheets, n8n/Zapier-style automations, or anything else that can make an HTTP request. You don’t need to be a full-time developer: if you can run a curl command or paste a snippet into an automation tool, you can use it.

Base URL:

https://api.getappniche.com

1. Create an API key

Sign in (or create an account), then go to Settings → API Keys after signing in to API Keys. Click Create key, name it, and copy the secret — it’s shown once. Keys look like getappniche_... and can be rotated or revoked anytime.

2. Authenticate

Send your key as a Bearer token on every request:

Authorization: Bearer YOUR_API_KEY

Keep the key in an environment variable or secret manager. Never place it in a browser URL, client-side bundle, notebook you plan to share, or committed .env file.

3. Endpoints

EndpointCreditsUse it for
GET /api/v1/apps1Search and filter apps by category, keyword, revenue, downloads, rating, growth.
GET /api/v1/apps/{app_id}1One app’s full detail record. app_id uses {store}:{store_id} format, e.g. apple:284882215.
GET /api/v1/keywords/difficulty10Score one ASO keyword’s difficulty and opportunity.
GET /api/v1/reviews1Fetch enriched review rows with sentiment and topic signals.

Search apps

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://api.getappniche.com/api/v1/apps?search=habit%20tracker&min_revenue=3000&limit=10"

Useful query parameters: store, category, search, min_rating, min_reviews, min_downloads, min_revenue, growth filters, limit (max 100), offset, sort_by, sort_dir.

The list response contains items, total, limit, and offset. Increment offset by the number of items returned until you have the sample you need or the response is empty. Deep catalog scraping is intentionally limited; use targeted filters rather than walking every page.

An abbreviated response looks like this. The app is fictional, but the field names and nesting match the API contract:

{
  "items": [
    {
      "app_id": "apple:1234567890",
      "store": "apple",
      "title": "Example Habit Tracker",
      "rating": 4.7,
      "rating_count": 8420,
      "reviews_delta_7d": 140,
      "downloads_est_monthly": 30000,
      "revenue_est_monthly": 90000,
      "source_updated_at": "2026-07-19T04:10:00Z"
    }
  ],
  "total": 17,
  "limit": 10,
  "offset": 0
}

Treat rating_count and source_updated_at as observed context. Fields ending in _est_monthly are modeled values; label them as estimates wherever you store or present them.

App detail

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://api.getappniche.com/api/v1/apps/apple:284882215"

Keyword difficulty

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://api.getappniche.com/api/v1/keywords/difficulty?keyword=habit%20tracker&store=apple&country=US&language=en"

Reviews

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://api.getappniche.com/api/v1/reviews?store=apple&store_id=284882215&limit=20"

Want more complete scripts? The MIT-licensed getappniche-examples repo has runnable examples built on these endpoints.

Python example

import requests

API_KEY = "YOUR_API_KEY"
headers = {"Authorization": f"Bearer {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()
data = resp.json()

for app in data["items"]:
    print(app["title"], app["revenue_est_monthly"])

JavaScript example

const API_KEY = "YOUR_API_KEY";

const url = new URL("https://api.getappniche.com/api/v1/apps");
url.searchParams.set("search", "habit tracker");
url.searchParams.set("min_revenue", "3000");
url.searchParams.set("limit", "10");

const resp = await fetch(url, {
  headers: { Authorization: `Bearer ${API_KEY}` },
});
if (!resp.ok) throw new Error(`API error ${resp.status}`);
const data = await resp.json();
console.log(data);

Production request habits

  • Set a connection and response timeout; do not let a stalled request block a worker indefinitely.
  • Retry 429 and temporary 5xx responses with backoff. Do not retry 401, 402, or 422 without changing the request.
  • Respect Retry-After on rate-limit responses.
  • Cache stable app-detail records when your workflow asks for the same app repeatedly.
  • Log the endpoint, status, request time, and app ID—but never the full Authorization header.
  • Store the source date beside data used in a report. Keyword and MCP responses include credits_charged; REST search, detail, and review usage is recorded in Settings.

Credits and rate limits

  • Your plan includes 5,000 API credits per month, refreshed automatically each month.
  • Keyword-difficulty responses and MCP tool results include credits_charged. Search, detail, and review request costs are visible in the per-request usage history in Settings.
  • Balance and per-request history live at Settings. Extra packs of 500 credits are available inside the app.
  • Rate limit: 60 requests per minute per API key. Exceed it and you get HTTP 429 with a Retry-After header telling you how long to wait.

Errors and how to fix them

StatusMeaningFix
401Missing or invalid API keyCheck the Authorization: Bearer ... header and that the full key (starting getappniche_) was pasted.
402Plan doesn’t include API access, or you’re out of creditsCheck your balance in Settings; buy a credit pack or wait for the monthly refresh.
404App not foundVerify the app_id uses {store}:{store_id} format, e.g. apple:284882215.
422Invalid parametersCheck parameter names and values against the endpoint docs above (e.g. limit max is 100).
429Rate limitedSlow down to under 60 requests/minute and respect the Retry-After header.

Using an AI assistant instead?

If you want Claude, Cursor, or another AI agent to query this data directly — no code at all — use the client-specific configs, tool reference, and verification prompts on the GetAppNiche MCP page.