The SeeGeo API
Everything the web audit does, as JSON: start an AI-visibility audit of any domain, poll it, read the graded report with every finding, and check which AI crawlers can reach a site. Built for scripts and for agents — the OpenAPI 3.1 description loads as a tool definition.
Get a key
Sign in, open your account, and create a key under API. It is shown once. Send it as a bearer token on every request. Keys can be revoked there at any time; audits they started stay on your account.
Run an audit
Audits are asynchronous. Start one:
curl -X POST https://see-geo.com/api/v1/audits \
-H "Authorization: Bearer $SEEGEO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"domain": "example.com"}'You get 202 and the audit to poll:
{
"id": "6f1c0d2e-3b4a-4c5d-8e9f-0a1b2c3d4e5f",
"domain": "example.com",
"status": "queued",
"progress": { "phase": "queued", "note": null, "done": 0, "total": 0 },
"summary": null,
"links": {
"self": "https://see-geo.com/api/v1/audits/6f1c0d2e-…",
"html": "https://see-geo.com/audits/6f1c0d2e-…",
"share": null
},
"usage": { "used": 1, "limit": 10 }
}Poll every few seconds until status is done:
curl https://see-geo.com/api/v1/audits/6f1c0d2e-3b4a-4c5d-8e9f-0a1b2c3d4e5f \
-H "Authorization: Bearer $SEEGEO_API_KEY"{
"id": "6f1c0d2e-…",
"status": "done",
"summary": {
"seoScore": 71, "geoScore": 64, "combined": 67, "grade": "C",
"gated": false, "ungraded": null, "walled": null,
"engineVersion": "1.8.1",
"categories": [
{ "category": "access", "label": "AI crawler access", "score": 100, "evaluated": true },
{ "category": "extractability", "label": "Content extractability", "score": 48, "evaluated": true },
…
],
"findingCount": 14
},
"report": { … every finding with severity, evidence and fix … }
}summary is the grade and category scores; report is the full report the web page renders, findings included. Add ?report=0 to poll without the report body. A second audit of the same domain from the same account within ten minutes returns the first with 200 and deduplicated: true rather than crawling again.
Check crawler access
Synchronous, a few seconds: robots.txt read for each of the 15 AI crawlers, then the homepage fetched as GPTBot, OAI-SearchBot, ClaudeBot and PerplexityBot to see what a bot wall does.
curl "https://see-geo.com/api/v1/crawler-check?domain=example.com" \
-H "Authorization: Bearer $SEEGEO_API_KEY"From Python
import os, time, requests
KEY = os.environ["SEEGEO_API_KEY"]
H = {"Authorization": f"Bearer {KEY}"}
r = requests.post("https://see-geo.com/api/v1/audits", headers=H, json={"domain": "example.com"})
audit = r.json()
while audit["status"] in ("queued", "running"):
time.sleep(4)
audit = requests.get(audit["links"]["self"], headers=H).json()
print(audit["summary"]["grade"], audit["summary"]["combined"])
for f in audit["report"]["findings"]:
print(f["severity"], f["title"])Use it from an AI agent (MCP)
The same tools are exposed over the Model Context Protocol, so Claude Desktop, Claude Code, Cursor, VS Code and any MCP client can audit a site mid-conversation.
Try it in one click, no account
https://see-geo.com/mcp/anonymous serves crawler_check freely and one full audit_site per network per day, with a public report link in the result. Nothing to sign up for:
Add to CursorAdd to VS CodeAdd to claude.aiChatGPT
# Claude Code — no account needed
claude mcp add --transport http seegeo https://see-geo.com/mcp/anonymous
# Cursor / VS Code / Claude Desktop config (mcp.json)
{ "mcpServers": { "seegeo": { "url": "https://see-geo.com/mcp/anonymous" } } }Hosted connectors (claude.ai, ChatGPT) share one network, so they use the account endpoint below with OAuth instead — the Add to claude.ai button opens the connector dialog with the URL filled in, and you sign in to SeeGeo once.
With your account
Remote, no install — the server at https://see-geo.com/mcp with the key as a bearer token (your plan's monthly allowance, history via list_audits, and usage):
claude mcp add --transport http seegeo https://see-geo.com/mcp \
--header "Authorization: Bearer $SEEGEO_API_KEY"Local — the seegeo-mcp package on npm (MIT, source in the repo):
# Claude Code
claude mcp add seegeo -e SEEGEO_API_KEY=sg_… -- npx -y seegeo-mcp
# Claude Desktop / Cursor (claude_desktop_config.json, .cursor/mcp.json)
{
"mcpServers": {
"seegeo": { "command": "npx", "args": ["-y", "seegeo-mcp"], "env": { "SEEGEO_API_KEY": "sg_…" } }
}
}Tools: audit_site (full graded audit, waits for the result), get_audit, crawler_check, list_audits, usage. Each returns a readable summary plus structured JSON; the same limits as the REST API apply.
Connect from claude.ai or ChatGPT
Connectors in claude.ai and ChatGPT cannot send a bearer key, so the remote server also speaks OAuth 2.1: discovery at /.well-known/oauth-authorization-server, dynamic client registration at /oauth/register, PKCE (S256), and a consent page where you sign in to SeeGeo and click Allow.
- claude.ai — Settings → Connectors → Add custom connector, URL
https://see-geo.com/mcp. Claude registers itself, sends you to the consent page, and the tools appear in every chat. - ChatGPT — Settings → Apps & Connectors → Advanced → Developer mode → Create, MCP server URL
https://see-geo.com/mcp, authentication OAuth. Same consent page.
The token a connector receives is an ordinary API key named after it — visible on your account page as “Claude (connector)” or similar, counted against your plan like any key, and revoked there to disconnect. No refresh tokens: the key does not expire; you are the revocation.
Limits
- 60 requests per minute per key, 10 crawler checks per minute per key.
- API audits per calendar month by plan: Free 10, Starter 100, Growth 500, Done-For-You 1000. Polling and crawler checks are not counted.
- Up to 5 active keys per account. A platform-wide ceiling on concurrent crawls returns
503withRetry-Afterwhen hit.
Errors
Every error is JSON with a stable code: missing_key, invalid_key (401), invalid_domain (422), rate_limited and monthly_cap (429, with Retry-After where it applies), not_found (404), busy (503).
What is audited
The same engine and rubric as the site, documented on the methodology page: six categories scored 0–100, a grade calibrated against 107 real small-business sites, and a report where every finding says what was measured and how to fix it. The engine version is in every report.
Frequently asked questions
Is the SeeGeo API free?
Every plan includes API access. The free plan allows 10 API audits a month, Starter 100, Growth 500, Done-For-You 1000. Crawler checks and polling do not count against the audit cap.
How long does an API audit take?
Most finish in 20 to 40 seconds. The POST returns immediately with an id; poll GET /api/v1/audits/{id} every few seconds until status is done, then read summary and report.
Can an AI agent use the SeeGeo API?
Yes — that is what it is for. The OpenAPI 3.1 description at /openapi.json can be loaded as a tool definition by agent frameworks; responses are plain JSON with stable field names, and errors carry a machine-readable code.
Does SeeGeo have an MCP server?
Yes. A remote one at https://see-geo.com/mcp (Streamable HTTP, bearer key or OAuth), a no-account trial endpoint at https://see-geo.com/mcp/anonymous (a crawler check any time and one full audit per network per day), and a local one on npm as seegeo-mcp. They expose audit_site, get_audit, crawler_check, list_audits and usage to Claude Desktop, Claude Code, Cursor, VS Code and any MCP client.
What does the API audit measure?
The same six categories as the web audit: access for 15 AI crawlers, technical foundation, structured data, content extractability, off-site presence and entity clarity, each scored 0–100 and combined into a grade calibrated against 107 real small-business websites.