Scores any website on how legible it is to AI agents, and tells the owner what to fix. Scoring version 1.
Same, quick mode (no rendering)
GET /audit?url=https://example.com
| Parameter | Meaning |
|---|---|
url | Required. The page to audit. A missing scheme is treated as https. |
quick | true skips the rendering step. Much faster, but extractability comes back as unavailable. |
fields | Comma list of categories, checks, redirects to trim the response. The score, grade, urls, timestamp, scoring version and unavailable list are always returned. |
Every check is worth a fixed number of points within its category. A
check we could not run (the site blocked us, a service was down, a
prerequisite was missing) is excluded from the maths rather than counted
as a failure, and its category is listed in unavailable.
Can an agent find your content in the first place.
| Check | What it looks for | Weight |
|---|---|---|
robots-txt | robots.txt present and parseable | 3 |
robots-ai-agents | Which AI agents your robots.txt allows (reported, never scored) | not scored |
sitemap | XML sitemap present | 4 |
sitemap-fresh | Sitemap has entries and looks maintained | 2 |
feed | RSS or Atom feed advertised in the page head | 2 |
Is your content shaped so a machine can read it.
| Check | What it looks for | Weight |
|---|---|---|
llms-txt | llms.txt present at the site root | 8 |
llms-full-txt | llms-full.txt present | 2 |
llms-txt-quality | llms.txt follows the spec and its links resolve | 5 |
json-ld | Valid JSON-LD structured data | 6 |
json-ld-types | Structured data uses core schema.org types | 4 |
heading-outline | One h1 and no skipped heading levels | 5 |
Does readable content survive when something that is not a browser reads the page.
| Check | What it looks for | Weight |
|---|---|---|
readability | Readable article content can be extracted | 8 |
extract-words | Extracted content is substantial | 4 |
title-match | Extracted title matches the page title | 3 |
raw-vs-rendered | Content exists without JavaScript | 15 |
Does an agent learn who you are.
| Check | What it looks for | Weight |
|---|---|---|
title-tag | Page has a title tag | 3 |
meta-description | Page has a meta description | 3 |
canonical | Canonical URL declared | 2 |
og-basics | Open Graph title, description and image | 3 |
lang | Language declared on the html element | 2 |
contact | Contact or about route discoverable | 2 |
{
"url": "https://example.com",
"finalUrl": "https://www.example.com/",
"redirects": ["https://example.com/ -> https://www.example.com/"],
"timestamp": "2026-07-22T09:00:00.000Z",
"scoringVersion": "1",
"score": 62,
"grade": "C",
"categories": { "discoverability": 80, "structure": 45, "extractability": 70, "identity": 55 },
"unavailable": [],
"checks": [
{
"id": "llms-txt",
"category": "structure",
"status": "fail",
"weight": 8,
"detail": "No llms.txt at this site.",
"fix": "Add a plain-text llms.txt file at your site root..."
}
],
"cached": false
}
Check status is one of pass (full credit),
warn (half), fail (none), info
(reported, never scored), skip (a prerequisite was missing)
or unavailable (we could not find out). Grades: A from 90,
B from 75, C from 60, D from 40, F below.
Every error has the same shape with a stable code:
{ "error": "Site unreachable", "code": "unreachable", "hint": "Could not load that page, so there is nothing to score." }
Codes: invalid_url, private_url,
unreachable, rate_limited,
queue_full, invalid_fields, internal.
X-RateLimit-Remaining header.cached: true, an age in seconds and X-Cache: HIT.User-Agent of AgentBeacon and we obey your robots.txt. If you disallow us, checks come back as unavailable rather than being run anyway.