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 Oct 15, 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

The machine-readable OpenAPI 3.1 spec for these endpoints (no key needed to fetch it):

https://api.getappniche.com/api/v1/openapi.json

Import it into Postman, Insomnia or an SDK generator, or hand it to your AI coding assistant so the code it writes uses the real endpoints, parameters and response fields.

Prefer to click instead of code? Fork the ready-made Postman collection: all five endpoints with the API-key auth already wired in — set the api_key variable to your key and send your first request.

Run in Postman

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/apps1 per app returnedSearch 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/reviews1 per review returnedFetch enriched review rows with sentiment and topic signals for the apps you monitor.
GET /api/v1/reviews/live1 per review returnedLatest reviews for any App Store or Google Play app, straight from the store — no monitor needed.

List endpoints are priced per row: a page of 50 apps costs 50 credits, a page of 10 costs 10, and an empty page costs 1. Pages default to 50 rows and max out at 100, so set limit to the rows you’ll actually use.

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 (default 50, max 100 — 1 credit per app returned), offset, sort_by, sort_dir.

The list response contains items, total, limit, offset, and credits_charged. limit is the page size that was applied: when your balance is lower than the page you asked for, the page shrinks to the balance instead of failing. 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,
  "credits_charged": 1
}

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"

/api/v1/reviews serves the apps you monitor in the app, with sentiment and topics attached. For the latest reviews of any app on either store — no monitor needed — use the live feed:

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://api.getappniche.com/api/v1/reviews/live?app_id=google:com.spotify.music&country=US&limit=20"

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. List, keyword and MCP responses include credits_charged; every request is also recorded in Settings.

Credits and rate limits

  • Your plan includes 5,000 API credits per month, refreshed automatically each month.
  • List endpoints (/api/v1/apps, /api/v1/reviews, /api/v1/reviews/live) cost 1 credit per row returned, with a minimum of 1 per request. Pages default to 50 rows and max out at 100; when your balance is lower than the page you asked for, the page shrinks to the balance. App detail costs 1 credit per call; keyword difficulty costs 10 per keyword.
  • List, keyword-difficulty and MCP responses include credits_charged; every request also appears 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.