REST API
Noctral REST API
Query from your code the estimated MRR of mobile apps and SaaS, the apps that grew the most, niches, running ads and onboarding and paywall screens.
Authentication
Every call sends the key in the Authorization header as a Bearer token. Keys start with nk_ and are created on the API & MCP screen. The OAuth login applies to the MCP server only.
HTTP
Authorization: Bearer nk_YOUR_KEYCreate the key in API & MCP. The API is part of the Pro plan (monthly, lifetime or monthly pass). The plan is checked on every call: if the subscription ends, the keys stop working.
Clients that cannot send Bearer can use the X-API-Key header instead.
REST API
JSON over HTTPS. Every route is GET and lives under https://noctralspy.com/api/v1
curl
curl "https://noctralspy.com/api/v1/rankings/growth?window=7d&niche=ia-chatbot&limit=5" \
-H "Authorization: Bearer nk_YOUR_KEY"JavaScript
const response = await fetch(
'https://noctralspy.com/api/v1/apps?niche=fitness-treino&sort=mrr&limit=10',
{ headers: { Authorization: 'Bearer nk_YOUR_KEY' } },
);
const { data, meta } = await response.json();Python
import requests
response = requests.get(
"https://noctralspy.com/api/v1/ads",
params={"niche": "dieta-nutricao", "sort": "longest_running", "limit": 10},
headers={"Authorization": "Bearer nk_YOUR_KEY"},
)
ads = response.json()["data"]Want the data in Claude, ChatGPT or Cursor? The MCP server connects with a login, no key needed. Connect over MCP
Response format
Lists come in data with pagination in meta (total, offset, limit, next_offset). Profiles come in data. Every item includes the URL of its Noctral page.
JSON
{
"data": [
{
"id": "…",
"slug": "cal-ai",
"name": "Cal AI",
"storefront": "US",
"currency": "USD",
"mrr_estimate": 1200000,
"growth": {
"status": "rising",
"new_ratings_7d": 2100
},
"url": "https://noctralspy.com/cal-ai?country=US"
}
],
"meta": {
"total": 48,
"offset": 0,
"limit": 10,
"next_offset": 10
}
}