geondex
Docs

google_rank

Google position for a keyword, plus AI Overview presence.

POST https://geondex.com/api/v1/rank

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 characters
  • domain · 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 · string
  • domain · string
  • rankGroup · number | null — 1-based organic rank group; null when the domain is not in the top 20
  • rankAbsolute · number | null — Position counting every SERP block, not just organic results
  • url · string | null — The ranking page; null when not ranked
  • aiOverviewPresent · boolean — An AI Overview box was on the page at all, whoever it cites
  • aiOverviewCitesDomain · 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.

HTTPWhen
400Bad input
401Missing or invalid key
402Out of credits
404Tool not available on this server
429Rate limited
502Upstream failure

Every error.code and what to do about it: Errors & rate limits.

On this page