google_rank
Google position for a keyword, plus AI Overview presence.
POST https://geondex.com/api/v1/rank- Cost: 1 credit
- MCP tool:
google_rank - Auth:
Authorization: Bearer gx_…(see Authentication) - Try it: Open google_rank in the playground
Google organic position of your domain for the keyword (US, desktop, top 20), plus whether an AI Overview appears and whether it cites your domain — data no LLM API returns. 1 credit. Pair with check_visibility to see Google rank next to AI citations for the same question.
Not available on every deployment: returns 404 not_found when this server is not configured for it. GET /me lists what is configured.
Request
Request body (JSON)
keyword·string· required — The search phrase, e.g. best table tennis blade. 1–200 charactersdomain·string· required — Your site, e.g. ttsensei.com (no scheme). 3–253 characters
Example request
curl -s https://geondex.com/api/v1/rank -H "Authorization: Bearer gx_YOUR_KEY" -H "content-type: application/json" -d '{"keyword":"best table tennis blade for beginners","domain":"ttsensei.com"}'Response
200 with the envelope every tool returns: a one-line summary, the full data, and credits: { charged, remaining }. On a free call charged is 0 and remaining is null.
Fields of data
keyword·stringdomain·stringrankGroup·number | null— 1-based organic rank group; null when the domain is not in the top 20rankAbsolute·number | null— Position counting every SERP block, not just organic resultsurl·string | null— The ranking page; null when not rankedaiOverviewPresent·boolean— An AI Overview box was on the page at all, whoever it citesaiOverviewCitesDomain·boolean
Example response
Real-shaped, checked against the output schema by a test. Long lists are shortened.
{
"summary": "\"best table tennis blade for beginners\": ttsensei.com #4 on Google; AI Overview present, does not cite you.",
"data": {
"keyword": "best table tennis blade for beginners",
"domain": "ttsensei.com",
"rankGroup": 4,
"rankAbsolute": 7,
"url": "https://ttsensei.com/blades/beginner",
"aiOverviewPresent": true,
"aiOverviewCitesDomain": false
},
"credits": {
"charged": 1,
"remaining": 185
}
}Errors
Every error has the body {"error":{"code":"…","message":"…"}} and is not charged.
| HTTP | When |
|---|---|
400 | Bad input |
401 | Missing or invalid key |
402 | Out of credits |
404 | Tool not available on this server |
429 | Rate limited |
502 | Upstream failure |
Every error.code and what to do about it: Errors & rate limits.