For agents and developers
API and MCP server
Everything on the report pages, as JSON. Read-only, no key, no rate card, CORS open. The same data is exposed as tools by a hosted MCP server, so an agent can ask for a score instead of scraping for it.
REST API
Base URL https://agentfriendlyrank.com/api/v1. Responses are JSON; errors are RFC 9457 problem details with a detail that says what to do. Report and leaderboard responses are cached for five minutes, the same window as the HTML pages.
| Endpoint | Returns |
|---|---|
GET / | Index: links to everything below. |
GET /rubric | The published rubric, v1.0.1: pillars, checks, weights, grade bands, changelog. |
GET /leaderboard?category=&limit=&offset= | Every published site ranked by score. Category is one of ecommerce, saas, content, other. |
GET /sites/{domain} | Full report for a domain: score, grade, pillars, ranked fixes, all 27 checks with evidence. |
GET /compare/{a}/{b} | Two sites side by side, check by check. Order does not matter. |
GET /scans/{id} | Progress of a scan in flight, for polling. Never cached. |
GET /openapi.json | This API as an OpenAPI 3.1 document. |
The full contract, with schemas, is the OpenAPI document at /api/v1/openapi.json.
Example
curl https://agentfriendlyrank.com/api/v1/sites/agentfriendlyrank.com{
"domain": "agentfriendlyrank.com",
"reportUrl": "https://agentfriendlyrank.com/site/agentfriendlyrank.com",
"scan": { "scoreTotal": 100, "grade": "A+", "pillars": { "A": 25, "B": 25, "C": 25, "D": 25 }, … },
"topFixes": [],
"checks": [ { "id": "A1", "status": "pass", "evidence": { … } }, … ]
}Getting a site scanned
The API is read-only on purpose: a scan crawls someone else’s site, so requesting one stays a deliberate act with a rate limit behind it. Submit the form at /scan (it works without JavaScript, so an agent can drive it) and you are redirected to /scan/{id}. Poll /api/v1/scans/{id} until status is complete; results are cached for seven days per domain.
MCP server
A hosted Model Context Protocol server at https://agentfriendlyrank.com/mcp exposes the same data as tools. Streamable HTTP transport, stateless, no authentication: POST JSON-RPC and get JSON back. Add it to a client with:
{
"mcpServers": {
"agentfriendlyrank": { "url": "https://agentfriendlyrank.com/mcp" }
}
}| Tool | Arguments |
|---|---|
get_site_report | domain |
get_leaderboard | category?, limit?, offset? |
compare_sites | a, b |
get_scan_status | scan_id |
get_rubric | none |
Or by hand:
curl https://agentfriendlyrank.com/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"get_site_report","arguments":{"domain":"agentfriendlyrank.com"}}}'Terms
Free, for any use that respects the terms: cite the report URL when you republish a score, and do not present a score as current without its scan date. Scores are measured, not opinions — the methodology explains exactly how — and a hidden or robots.txt-opted-out site is absent from every endpoint, not just the HTML.
Machine surfaces
Something off?
A wrong score is a bug in a published rubric, and we treat it as one. Write to hello@agentfriendlyrank.com.