Build with WebAnalyzer
Everything on this page is free, open and keyless: a REST API, an MCP server for AI agents, and a set of machine-readable files. No signup, no API key, no OAuth — abuse is handled with per-IP rate limits. Analyses run 290+ deterministic checks and score 0–100 on a deliberately demanding curve.
Quickstart
One request. Typically completes in 5–20 seconds.
curl -X POST https://webanalyzer.dev/api/v1/analyze \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com"}'Response (abridged):
{
"id": "cm0x…",
"url": "https://example.com/",
"score": 62,
"grade": "C",
"dimensions": [
{ "key": "seo", "label": "SEO", "score": 71, "grade": "B" },
{ "key": "geo", "label": "AI readiness", "score": 55, "grade": "C" }
],
"topIssues": [ { "dimension": "SEO", "title": "Meta description missing" } ],
"badgeUrl": "https://webanalyzer.dev/api/badge/cm0x…",
"reportUrl": "https://webanalyzer.dev/report/cm0x…"
}Endpoints
The full contract lives in the OpenAPI spec at /openapi.json — flat schemas, typed errors, ready for function-calling. Index at /api/v1.
POST /api/v1/analyze— analyze a public URL, get score, grade, per-dimension breakdown and top issues. SupportsIdempotency-Keyfor safe retries, anddryRun: trueas a sandbox mode: a deterministic sample response, no analysis spent, no site touched — build and test your integration risk-free.POST /api/v1/analyses— the async twin: returns202 Acceptedwith a job id immediately; pollGET /api/v1/analyses/{id}until it reportscomplete. Also the batch endpoint: passurls: […](up to 3) to fan out one job per URL in a single request.POST /api/v1/sandbox/analyze— the sandbox environment as its own base path: always the sample response, never a real run.GET /api/v1/leaderboard— highest-scoring analyzed sites, cursor-paginated (?limit=&cursor=).GET /ask?query=…— NLWeb endpoint: ask a natural-language question about WebAnalyzer, get schema.org-shaped results (add&streaming=truefor SSE).
SDK & CLI
The official package is @webanalyzer/cli (npm, zero dependencies, Node 18+) — CLI and SDK in one, MIT-licensed, source at github.com/Gechu03/webanalyzer-js (with ready-made agent configs: AGENTS.md, CLAUDE.md, .cursorrules, plugin.json).
npx @webanalyzer/cli https://example.com # score a page from the terminal
import { analyze } from "@webanalyzer/cli";
const report = await analyze("https://example.com");MCP server (for AI agents)
A Model Context Protocol server runs at https://mcp.webanalyzer.dev (also at https://webanalyzer.dev/.well-known/mcp) over Streamable HTTP with tools analyze_website, get_leaderboard and get_analysis. A separate docs server answers questions about how scoring works at https://webanalyzer.dev/mcp/docs. Listed in the official MCP registry as dev.webanalyzer/webanalyzer. Claude Desktop / Cursor config:
{
"mcpServers": {
"webanalyzer": {
"type": "http",
"url": "https://mcp.webanalyzer.dev"
}
}
}Rate limits
Analysis endpoints allow 8 runs per minute per IP (shared across the website form, the API and the MCP server); read endpoints allow more. Every API response carries standard RateLimit-Limit / RateLimit-Remaining / RateLimit-Reset headers, and 429s include Retry-After — pace yourself by the headers instead of discovering the limit.
Errors
Every non-2xx response is structured JSON — never an HTML error page: {"error": {"code", "message", "status"}}. Codes: invalid_request (400), blocked_host / fetch_failed (422 — the target URL is unreachable, private or not allowed), rate_limited (429), not_found (404), internal_error (500). The code values are stable — branch on them, not on messages.
Versioning & deprecation policy
The API is path-versioned. /api/v1 is stable: fields are only ever added, never renamed or removed. Backwards-incompatible changes ship under /api/v2, and v1 keeps working for at least 6 months after a deprecation notice is published on this page. During that grace period, deprecated operations also announce themselves in-band with Deprecation and Sunset response headers, so unattended integrations learn about the change before it breaks them. Nothing is deprecated today. Full policy: /deprecation-policy.md.
Authentication
None required, deliberately — every endpoint works with no credential at all. For agent stacks that insist on an OAuth flow, a real optional one exists: register at POST /api/v1/oauth/register (RFC 7591), exchange for a bearer token at POST /api/v1/oauth/token (client_credentials) — it grants no extra privilege. Discovery: /auth.md, /.well-known/oauth-protected-resource (RFC 9728) and /.well-known/oauth-authorization-server (RFC 8414). The full report behind the email gate is a human product feature; everything agent-facing is open.
Machine-readable index
- /openapi.json — OpenAPI 3 spec for the REST API
- /.well-known/api-catalog — RFC 9727 catalog of every API here
- /.well-known/mcp — MCP server (+ server card)
- /.well-known/ard.json — Agentic Resource Discovery catalog
- /llms.txt — curated content map for LLMs
- /agents.md — how agents should use this site
- /auth.md — agent auth walkthrough (anonymous by design)
- /license.xml — RSL machine-readable reuse terms
Questions or something broken? Contact us or email hello@webanalyzer.dev.