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.
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
| Endpoint | Credits | Use it for |
|---|---|---|
GET /api/v1/apps | 1 per app returned | Search and filter apps by category, keyword, revenue, downloads, rating, growth. |
GET /api/v1/apps/{app_id} | 1 | One app’s full detail record. app_id uses {store}:{store_id} format, e.g. apple:284882215. |
GET /api/v1/keywords/difficulty | 10 | Score one ASO keyword’s difficulty and opportunity. |
GET /api/v1/reviews | 1 per review returned | Fetch enriched review rows with sentiment and topic signals for the apps you monitor. |
GET /api/v1/reviews/live | 1 per review returned | Latest 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
429and temporary5xxresponses with backoff. Do not retry401,402, or422without changing the request. - Respect
Retry-Afteron 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-Afterheader telling you how long to wait.
Errors and how to fix them
| Status | Meaning | Fix |
|---|---|---|
401 | Missing or invalid API key | Check the Authorization: Bearer ... header and that the full key (starting getappniche_) was pasted. |
402 | Plan doesn’t include API access, or you’re out of credits | Check your balance in Settings; buy a credit pack or wait for the monthly refresh. |
404 | App not found | Verify the app_id uses {store}:{store_id} format, e.g. apple:284882215. |
422 | Invalid parameters | Check parameter names and values against the endpoint docs above (e.g. limit max is 100). |
429 | Rate limited | Slow 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.