Getting started
- API access is included in the Pro plan.
- Create a key under Settings → API keys (workspace Owners and Admins). The key is shown once — store it like a password.
- Send it on every request:
Authorization: Bearer ak_live_…
curl https://www.appstorepulse.com/api/v1/apps \
-H "Authorization: Bearer ak_live_your_key_here"Base URL: https://www.appstorepulse.com/api/v1 · Rate limit: 100 requests / minute / key· All responses are JSON · History windows are capped by your plan's data history (1 year on Pro).
Endpoints
All endpoints are read-only GET. Date-windowed endpoints take ?days=; list endpoints take ?limit=.
Discovery
Sanity-check your key and list every available endpoint.
GET /api/v1Your account id, plan, rate limit, and the endpoint index.
Apps
Apps tracked in your workspace. Everywhere {app} appears you can pass the tracked-app id from GET /apps, or simply your app's Shopify slug (e.g. widebundle).
GET /api/v1/appsAll tracked apps in your workspace with core listing metadata.
GET /api/v1/apps/{app}Full listing metadata for one tracked app: description, tagline, rating, review count, pricing, badge, launch date.
Keywords
Your tracked keywords with the same difficulty and volume scores the dashboard shows, plus rank history and full search results.
GET /api/v1/apps/{app}/keywordsEvery tracked keyword with current position, 7-day change, live difficulty score/label, and volume tier/score.
GET /api/v1/apps/{app}/keywords/{keywordId}/ranksDaily position history for one keyword.
Params: days (default 90, capped by plan history)
GET /api/v1/apps/{app}/keywords/{keywordId}/serpThe full search results page for the keyword from the latest crawl: every ranked app with rating, review count, badge, and an is_own_app flag.
Params: limit (default 24, max 120)
Competitors
Tracked competitors, their change timeline, and their reviews. {competitor} accepts the competitor's app id or Shopify slug.
GET /api/v1/apps/{app}/competitorsTracked competitors with listing metadata.
GET /api/v1/apps/{app}/competitors/{competitor}/changesDetected listing changes: pricing, description, screenshots, reviews, badge, and more.
Params: days (default 90)
GET /api/v1/apps/{app}/competitors/{competitor}/reviewsThe competitor's reviews — same shape and filters as your own reviews endpoint.
Params: days, rating, sentiment, limit, offset
GET /api/v1/apps/{app}/competitors/{competitor}/reviews/themesAI-aggregated praise themes, pain points, and feature requests from the competitor's reviews.
Params: days (default 365), limit (themes per type, default 10)
Reviews
Raw reviews enriched with AI analysis: sentiment (positive / negative / neutral), reason classification, language, and reviewer country.
GET /api/v1/apps/{app}/reviewsPaginated reviews, newest first.
Params: days (default 90), rating (1–5), sentiment (positive|negative|neutral), limit (default 50, max 100), offset
GET /api/v1/apps/{app}/reviews/themesAI-aggregated themes across your reviews: what users praise, what they complain about, what they ask for.
Params: days (default 365), limit (themes per type, default 10)
Market data
Beyond your workspace: category pages crawled daily, niche health scores, and newly launched apps across the entire App Store.
GET /api/v1/apps/{app}/category-ranksYour app's daily position history on its Shopify category pages (rank 1 = top).
Params: days (default 90)
GET /api/v1/categoriesAll ~120 category pages we crawl daily, with how many apps each ranks.
GET /api/v1/categories/{slug}/rankingsCurrent top apps on a category page with 7-day movement.
Params: limit (default 24, max 100)
GET /api/v1/nichesNiche leaderboard: health score, classification (Emerging, Crowded, …), direction, growth, and concentration per category — the same scoring as the in-app Niche Explorer.
GET /api/v1/niches/{category}Deep dive on one niche: metrics, verdict, highlights, top apps, movers, 12-week trend, pricing distribution, and app-age stats. {category} is the URL-encoded friendly name (e.g. Product%20bundles).
GET /api/v1/launchesNewly listed apps, App Store-wide, by the date our crawler first saw them.
Params: days (default 30), category (friendly name), limit (default 50, max 200)
Errors
Errors return JSON: {"error": "…"}
401Missing, malformed, unknown, or revoked API key.
403The key's account is no longer on the Pro plan.
404Resource not found in your workspace (wrong app/keyword/competitor/category).
429Rate limit exceeded — check the Retry-After header and back off.
5xxSomething broke on our side. Retry with backoff; contact us if it persists.
Prefer talking to your data?
Everything here is also exposed as an MCP server — connect AppStorePulse to Claude, Cursor, or any MCP-compatible AI and ask questions instead of writing requests.
Versioning
The API is versioned in the path (/api/v1). We add fields and endpoints without notice; breaking changes ship as a new version with at least 6 months of overlap. Questions or a missing endpoint you need? Tell us.