One endpoint. Give it a domain and a keyword, get back the exact Google organic position and the top-10 results — real SERP data, not Search Console estimates. Built to drop straight into AI assistants, MCP tools, and dashboards. Unlocked by the API plan ($20/mo) — 5,000 searches a month.
Rankings are Google organic results retrieved in real time.
There are two separate endpoints. They share one API key, but they do different jobs and bill differently — don't mix them up:
| API | What it returns | Cost |
|---|---|---|
Live Rank APIGET /api/rank |
Any domain's live Google position + top-10, right now. | 1 credit / call (metered) |
Tracking APIGET /api/tracking |
Your OWN tracked keywords' current rank, movement & history. | No credits (reads stored data) |
Use Live for on-demand lookups of arbitrary domains/keywords (AI agents, ad-hoc checks). Use Tracking to sync the data RankJot already collects for you into your own dashboards — no credits spent. Your key only ever accesses your own account.
example.com rank for best running shoes?” live, via the ready-made MCP server or a plain function call.# Where does example.com rank for "best running shoes"? curl "https://rankjot.com/api/rank?domain=example.com&keyword=best+running+shoes&country=us" \ -H "Authorization: Bearer rjk_your_key_here"
Pass your key as a bearer token (or the X-API-Key header):
Authorization: Bearer rjk_your_key_here
# — or —
X-API-Key: rjk_your_key_here
Keys are secret — treat them like a password. Rotate or revoke anytime from your account; the old key stops working immediately.
GET https://rankjot.com/api/rank
| Param | Required | Description |
|---|---|---|
domain | yes | The site to look up, e.g. example.com. Scheme/www/path are ignored. |
keyword | yes | The search query to rank for. |
country | no | ISO country code for the Google market (default us), e.g. gb, de, tr. |
{
"domain": "example.com",
"keyword": "best running shoes",
"country": "us",
"found": true,
"position": 7,
"url": "https://example.com/running-shoes",
"checked_at": "2026-07-13T18:20:00+00:00",
"results": [
{ "position": 1, "domain": "nike.com", "url": "…", "title": "…" }
// … up to the top 10 organic results
],
"quota": { "used": 214, "limit": 3600 }
}
position is 1-based, or null when the domain isn’t in the checked depth. found mirrors that as a boolean.
| Status | error | When |
|---|---|---|
| 400 | bad_request / bad_country | Missing domain/keyword, or an unknown country code. |
| 401 | unauthorized | Missing or invalid API key. |
| 403 | upgrade_required | Your plan doesn’t include API access — upgrade to enable it. |
| 429 | rate_limited / quota_exceeded | Per-minute burst limit, or your monthly query quota is used up. |
| 502 | provider_error | The search provider was unreachable — retry. |
Billing is per search. Each API call spends 1 query credit and
returns the live top-10 Google results for your keyword. If your domain is on page one you get its
exact position; if not, found is false — a
real answer, not a failed call. Every response’s quota object shows
where you stand, and the budget resets at the start of each month.
| Plan | Price | API searches / month |
|---|---|---|
| API | $20/mo | 5,000 |
API access is exclusive to the API plan — it includes everything in Pro (dashboard, daily tracking, manual checks) plus 5,000 programmatic searches a month. A short per-minute burst limit keeps traffic smooth. Positions are page-one (top ~10); deeper tracking is coming as an option.
GET https://rankjot.com/api/tracking
Returns the keywords RankJot is already tracking for you — current position, movement, and history — read straight from our stored data. Spends no credits and only ever returns your own account's data. Ideal for syncing into a dashboard, report, or sheet.
| Param | Required | Description |
|---|---|---|
domain | no | Filter to a single tracked site, e.g. example.com. |
history | no | true to include each keyword's recent position history (up to 30 points). |
{
"sites": [
{
"domain": "example.com",
"country": "us",
"keywords": [
{
"keyword": "best running shoes",
"position": 7, // current rank, null if unranked
"previous": 9,
"delta": 2, // positive = improved toward #1
"checked_at": "2026-07-13T06:00:00+00:00"
}
]
}
],
"counts": { "sites": 1, "keywords": 1 }
}
# pull your tracked data, with history, into anything curl "https://rankjot.com/api/tracking?history=true" \ -H "Authorization: Bearer rjk_your_key_here"
RankJot ships a tiny Model Context Protocol
server so assistants like Claude can check rankings as a tool. Point your MCP client at
mcp/rankjot_mcp.py and set your key:
// claude_desktop_config.json → "mcpServers" { "rankjot": { "command": "python", "args": ["mcp/rankjot_mcp.py"], "env": { "RANKJOT_API_KEY": "rjk_your_key_here" } } }
The server exposes one tool, check_rank(domain, keyword, country?),
that returns the same JSON as the endpoint — so the assistant can answer ranking questions on demand.
Related: Free rank checker · vs Semrush · Cheap rank tracker