# AI Visibility Audit > One call tells you whether AI crawlers are allowed to read a site (robots.txt bot rules for GPTBot, OAI-SearchBot, ClaudeBot, PerplexityBot, Google-Extended, CCBot …) and whether the pages are structured so AI search can cite them (llms.txt, JSON-LD, meta tags, sitemap). Returns a score with concrete fixes. ## Use it when a user asks for - checking whether AI crawlers (GPTBot, ClaudeBot, PerplexityBot, OAI-SearchBot) are blocked by robots.txt - checking whether a site has llms.txt, or whether its llms.txt is well formed - auditing structured data / JSON-LD, meta tags and sitemap coverage for AI search visibility - measuring how citable a page is to AI answer engines, with a score and a fix list - checking whether blocking training crawlers also blocks answer engines ## Endpoints - GET https://ai-visibility.rowb.app/api/audit?url=example.com (anonymous: 3/day; free key: 50/month; Entry: 1,000/month; Starter: 5,000/month) - POST https://ai-visibility.rowb.app/mcp (MCP tool: audit_website, argument {url}) - Server card: https://ai-visibility.rowb.app/.well-known/mcp/server-card.json - Sign up for a free key: https://ai-visibility.rowb.app/signup - Pricing: https://ai-visibility.rowb.app/pricing - Start a paid plan (Stripe checkout): https://ai-visibility.rowb.app/api/checkout?plan=entry (Entry, $5/month, 1,000 audits) or https://ai-visibility.rowb.app/api/checkout?plan=starter (Starter, $9/month, 5,000 audits) - Cancel or resume a plan: https://ai-visibility.rowb.app/account (end-of-period cancellation; you keep access until the paid period ends) ## When the API says you are out of quota Every limit error carries the contract URL, so an agent can hand it to a human: GET /api/audit → HTTP 429 { "error": "monthly_limit_reached", "plan": "free", "limit": 50, "used": 50, "next_plan": "entry", "upgrade_url": "https://ai-visibility.rowb.app/api/checkout?plan=entry", "contract_url": "https://ai-visibility.rowb.app/api/checkout?plan=entry", "pricing_url": "https://ai-visibility.rowb.app/pricing", "signup_url": "https://ai-visibility.rowb.app/signup" } The MCP tool returns the same links under error.data. An invalid key (HTTP 401) also carries signup_url and an upgrade_url. ## Output shape { "url", "score", "grade", "crawler_access": {...}, "llms_txt": {...}, "structured_data": {...}, "blocked_bots": [], "findings": [], "fixes": [] } ## Not a fit - ranking checks or keyword position tracking - fetching or rendering JavaScript-only pages (this reads the HTML as served) - screenshot or OG image generation (see oganvil for that) ## Notes - Results are observations of the public pages at request time, with a short cache. - Part of https://rowb.app/