ranked_keywords
The keywords a domain ranks for on Google, by traffic.
POST https://geondex.com/api/v1/ranked-keywords- Cost: 7 credits
- MCP tool:
ranked_keywords - Auth:
Authorization: Bearer gx_…(see Authentication) - Try it: Open ranked_keywords in the playground
The keywords your domain actually ranks for in Google's organic results, with position, the ranking page, monthly search volume and estimated monthly visits from each, highest traffic first — measured rankings an agent cannot see by searching. Works on any domain. Default United States, English; set location and language to change that. 7 credits per call, up to 100 keywords. Run it on a competitor, then check_visibility on its top keywords to see whether AI engines cite them too.
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)
domain·string· required — Any site, yours or a competitor's, e.g. ttsensei.com (no scheme). 3–253 characterslocation·string· optional — Country or city by name, e.g. United States, Germany, or London,England,United Kingdom. 2–100 characters. Default"United States"language·string· optional — Language by name, e.g. English, German. 2–50 characters. Default"English"limit·integer· optional — 1-100 keywords, highest traffic first. Same price for any limit. 1–100. Default50
Example request
curl -s https://geondex.com/api/v1/ranked-keywords -H "Authorization: Bearer gx_YOUR_KEY" -H "content-type: application/json" -d '{"domain":"ttsensei.com","limit":3}'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
domain·stringtotal·number— How many keywords the domain ranks for;keywordsholds the toplimitkeywords·object[]keywords[].keyword·stringkeywords[].volume·number | null— Average monthly Google searches; null when unknownkeywords[].position·number | null— 1-based organic position on Google; null if unknownkeywords[].url·string | null— The page that rankskeywords[].etv·number | null— Estimated monthly visits this keyword sends the domain
Example response
Real-shaped, checked against the output schema by a test. Long lists are shortened.
{
"summary": "ttsensei.com ranks for 318 keywords on Google in United States; top by traffic \"table tennis blade\" at #4.",
"data": {
"domain": "ttsensei.com",
"total": 318,
"keywords": [
{
"keyword": "table tennis blade",
"volume": 6600,
"position": 4,
"url": "https://ttsensei.com/blades",
"etv": 363
},
{
"keyword": "butterfly viscaria review",
"volume": 720,
"position": 3,
"url": "https://ttsensei.com/blades/butterfly-viscaria",
"etv": 72
},
{
"keyword": "best table tennis blade for beginners",
"volume": 390,
"position": 4,
"url": "https://ttsensei.com/blades/beginner",
"etv": 27.3
}
]
},
"credits": {
"charged": 7,
"remaining": 153
}
}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.