The InstaRank API Hub
Production-ready search-data APIs and the full SEO-checks engine, behind one API key and one credit wallet. Pick an API below, or jump to the full OpenAPI reference.
Choose your API
SERP API
$1 per 1,000 queriesGet the full search results page for any query as structured JSON — organic listings, AI Overview, People Also Ask, featured snippet, shopping, and local pack — across Google, Bing, Yahoo & DuckDuckGo, plus dedicated News, Image, and Video search.
POST/api/v1/serpKeyword Research API
$0.025 per 50 keywordsGive us a domain and get back a researched keyword list for its niche — each with estimated search volume, competition, and search intent.
POST/api/v1/keywordsRank Tracker API
$0.30 per jobTrack a domain's organic rankings and AI visibility in one async job — submit a domain, get the full report pushed to your webhook when it's ready.
POST · async/api/v1/rank-trackerAI Visibility API
$0.10 per keywordMeasure whether — and where — a domain is cited by the major AI assistants (ChatGPT, Claude, Gemini, Perplexity) for the queries that matter in its niche.
POST/api/v1/ai-visibilityAI Rank Tracker API
$0.10 per keywordTrack exactly where a domain ranks inside AI answers — pass your own keywords and engines, and get per-keyword, per-engine citation positions and the actual sources each assistant cited.
POST/api/v1/ai-rankGoogle Autocomplete API
$1 per 1,000 queriesReturn the live Google search suggestions a user sees while typing — perfect for keyword expansion, content ideation, and search-trend discovery.
GET/api/v1/autocompleteBacklink API
$0.05 per domainPull a domain's backlink profile summary — total backlinks, referring domains, domain rank, spam score, and the dofollow/nofollow split.
POST/api/v1/backlinksDomain Authority API
$0.008 per checkScore any domain 0–100 on a composite of trust, authority, content, and technical signals — with the full breakdown that produced the number.
POST/api/v1/domain-authoritySEO Checks API
from $0.001Run any of 19 individual SEO checks — or the composite Domain Value score — against a URL. Single-URL or whole-site (async) scope.
POST/api/v1/checks/{check}Every check, one POST away.
21 documented endpoints. REST + JSON. X-API-Key auth. 60 requests/min on Pro. No OAuth ceremony, no SDK lock-in — your curl works in 30 seconds.
Try it
Live request from your browser. Paste a key, run a real check.
Stored in sessionStorage only — cleared when you close the tab.
Authentication
All requests require an X-API-Key header. Generate yours from the dashboard. Keep it server-side — never expose in client JS.
Getting an API key
- Sign in to your InstaRank SEO account
- Go to Settings > API Keys
- Generate a new API key
- Store it securely — it won't be shown again
Using your API key
curl -X POST https://instarankseo.com/api/v1/checks/robots-txt \
-H "X-API-Key: your-api-key-here" \
-H "Content-Type: application/json" \
-d '{"url": "example.com"}'Validate your key
GET /api/v1/auth returns the current key status + remaining credits.
curl -H "X-API-Key: your-api-key-here" https://instarankseo.com/api/v1/authRate limits & credits
Two systems run in parallel: per-minute throttle, monthly credit pool.
Requests / minute
- Free: 10/min
- SEO+: 60/min
- Agency: 120/min
Every response carries: X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Reset.
429 + Retry-After when exceeded.
Monthly credits
- Free: 100/mo
- SEO+: 10 000/mo
- Agency: 50 000/mo
Checks cost 1 credit; Domain Value costs 2. Auto-refills on the 1st of each month.
402 CREDITS_EXHAUSTED when depleted.
Response format
All endpoints return application/json. Top-level shape is consistent across every check.
Success
{
"success": true,
"check": "robots-txt",
"url": "https://example.com",
"domain": "example.com",
"score": 85,
"issues": [
{
"id": "no-sitemap-reference",
"title": "No sitemap reference",
"description": "robots.txt does not reference a sitemap",
"severity": "moderate"
}
],
"data": { /* full check breakdown */ },
"checkedAt": "2026-05-07T14:32:18.401Z",
"meta": {
"requestId": "a1b2c3d4e5f60718",
"creditsUsed": 1,
"creditsRemaining": 487,
"processingTimeMs": 843,
"apiVersion": "1.0"
}
}Error
Every non-2xx response shares the canonical envelope. Branch on code (machine-readable enum) and decide retry from retryable.errorType is a legacy alias kept for pre-2026 clients.
{
"success": false,
"error": "Invalid URL format",
"code": "INVALID_URL",
"retryable": false,
"requestId": "a6b6777f25f54236",
"errorType": "INVALID_URL",
"details": { /* optional structured context */ }
}The same requestId appears in the X-Request-ID response header — include it when reporting issues to support.
Idempotency-Key
Safe to retry POST requests without double-charging. Send an Idempotency-Key header (≤255 printable-ASCII chars — UUIDs work well). A retry with the same key + body returns the cached response with Idempotency-Replayed: true.
Counted
- Rate-limit window
Never re-charged
- Credits (original request paid them)
# First call — runs the check, debits 1 credit.
curl -X POST https://instarankseo.com/api/v1/checks/meta-tags \
-H "X-API-Key: your-api-key" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{"url":"example.com"}'
# Same key + body within 24h — returns cached result.
# Response header: Idempotency-Replayed: true
# No credit re-charged.409 IDEMPOTENCY_CONFLICT. Generate a fresh key for genuinely new requests.SEO check endpoints
19 endpoints. All POST. Body: {"url": "example.com"}. Click any row to see the full request/response example.
Domain endpoints
Domain-level metrics that aggregate multiple signals into single composite scores.
Error codes
| Status | Type | Meaning |
|---|---|---|
| 400 | INVALID_URL / INVALID_CHECK / INVALID_REQUEST | Bad request. Check your URL format, check name, or request body. |
| 401 | AUTH_REQUIRED | Missing or invalid API key. |
| 402 | CREDITS_EXHAUSTED | Monthly credits exhausted. Purchase more credits or wait for the 1st of next month. |
| 403 | FORBIDDEN | API key does not have the required scope for this endpoint. |
| 429 | RATE_LIMIT | Per-minute rate limit exceeded. Check Retry-After header and try again. |
| 500 | INTERNAL_ERROR | Server error. The check failed unexpectedly. |
| 502 | DNS_ERROR / CONNECTION_REFUSED / SSL_ERROR | Could not reach the target website. |
| 504 | TIMEOUT | The check timed out (target site too slow or unresponsive). |
Quick-start examples
Copy-paste-go in Python or Node. Replace your-api-key with the key from your dashboard.
Python (requests)
import requests
API_KEY = "your-api-key"
BASE_URL = "https://instarankseo.com/api/v1"
response = requests.post(
f"{BASE_URL}/checks/meta-tags",
headers={
"X-API-Key": API_KEY,
"Content-Type": "application/json",
},
json={"url": "example.com"},
)
data = response.json()
print(f"Score: {data['score']}/100")
for issue in data.get("issues", []):
print(f" [{issue['severity']}] {issue['title']}")JavaScript / Node (fetch)
const API_KEY = "your-api-key";
const BASE_URL = "https://instarankseo.com/api/v1";
const response = await fetch(`${BASE_URL}/checks/robots-txt`, {
method: "POST",
headers: {
"X-API-Key": API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({ url: "example.com" }),
});
const data = await response.json();
console.log(`Score: ${data.score}/100`);
console.log(`Issues: ${data.issues?.length ?? 0}`);Batch all checks (bash)
# Run all 19 standalone API check endpoints
CHECKS=(robots-txt sitemap meta-tags canonical-url http-status url-structure \
internal-links external-links outbound-links mixed-content x-robots-tag \
keywords content-quality eeat page-speed backlinks llm-optimization \
social-media spam-score)
for check in "${CHECKS[@]}"; do
echo "Running $check..."
curl -s -X POST "https://instarankseo.com/api/v1/checks/$check" \
-H "X-API-Key: your-api-key" \
-H "Content-Type: application/json" \
-d '{"url": "example.com"}' | jq '{check: .check, score: .score}'
doneShip in 5 minutes.
Generate a key, paste it into your script, run any of the 21 endpoints. Pro plan included.
Get an API key