On-page SEO audit of up to 20 websites or pages
On-page SEO audit of up to 20 websites or pages: a 0-100 SEO score, A to F grade and the issues to fix, worst first (missing title or meta description, H1, noindex, HTTPS, mobile viewport, thin content, image alt text, Open Graph, structured data, sitemap, robots.txt), plus optional broken-link check. $0.005 per website, plus $0.0005 per link allowed when checkLinks is on. A call where no website could be audited is not charged. Runs nerolabs/bulk-seo-audit.
Paid test badge: not yet. The checks above are free: we call the tool without paying and read the payment request it sends back. The Verified badge needs paid calls whose answers match the promised output, and nobody can buy a badge.
Endpoint
POST https://x402-agent-tools.nerolabs.workers.dev/seo-audit
| Category | Image and media |
|---|---|
| Provider host | x402-agent-tools.nerolabs.workers.dev |
| Networks | eip155:8453 |
| Payment schemes | exact |
| Self-reported calls, 30 days | 2 from 1 payers (the provider's figure, not ours) |
Our checks, last 30 days
| Day | Result | HTTP | Asked | Time |
|---|---|---|---|---|
| 2026-10-24 | valid payment request | 402 | $0.005 | 1032 ms |
Example input (from the provider)
{
"body": {
"websites": [
"example.com"
]
},
"bodyType": "json",
"method": "POST",
"type": "http"
}
Promised output schema (from the provider)
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"input": {
"additionalProperties": false,
"properties": {
"body": {
"additionalProperties": false,
"properties": {
"checkLinks": {
"default": false,
"description": "Also test the links on each audited page and list the broken ones (404, 410, 5xx or no answer). Off by default because it takes longer; charged per link checked.",
"type": "boolean"
},
"checkSite": {
"default": true,
"description": "Also check each site once for a robots.txt file and an XML sitemap (from robots.txt, /sitemap.xml or /sitemap_index.xml). Free, a couple of extra requests per site.",
"type": "boolean"
},
"keep": {
"default": "all",
"description": "Filtering happens after each page is audited. 'Only scores below the threshold' is the quick way to pull prospects with weak SEO out of a lead list.",
"enum": [
"all",
"audited",
"below_score",
"problems"
],
"type": "string"
},
"maxLinksPerPage": {
"default": 20,
"description": "With checkLinks on, the first this-many links on each page are tested (at most 20 through this shop).",
"maximum": 20,
"minimum": 1,
"type": "integer"
},
"scoreThreshold": {
"default": 70,
"description": "Used by 'Only scores below the threshold'. Rows scoring below this are kept.",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"websites": {
"description": "Websites or bare domains to check, for example [\"acme.com\", \"https://www.example.org\"].",
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"websites"
],
"type": "object"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"type": {
"const": "http",
"type": "string"
}
},
"required": [
"type",
"method",
"bodyType",
"body"
],
"type": "object"
},
"output": {
"properties": {
"example": {
"properties": {
"count": {
"type": "number"
},
"rows": {
"items": {
"properties": {
"auditStatus": {
"type": "string"
},
"auditedAt": {
"type": "string"
},
"auditedUrl": {
"type": "string"
},
"brokenLinkCount": {
"type": [
"number",
"null"
]
},
"brokenLinks": {
"items": {
"type": "string"
},
"type": "array"
},
"canonicalIsSelf": {},
"canonicalUrl": {},
"duplicateOf": {},
"externalLinks": {
"type": [
"number",
"null"
]
},
"finalUrl": {
"type": "string"
},
"grade": {
"type": "string"
},
"h1": {},
"h1Count": {
"type": [
"number",
"null"
]
},
"h2Count": {
"type": [
"number",
"null"
]
},
"hasFavicon": {
"type": "boolean"
},
"hasOpenGraph": {
"type": "boolean"
},
"hasTwitterCard": {
"type": "boolean"
},
"hasViewport": {
"type": "boolean"
},
"hreflangCount": {
"type": [
"number",
"null"
]
},
"httpStatus": {
"type": [
"number",
"null"
]
},
"imageCount": {
"type": [
"number",
"null"
]
},
"imagesMissingAlt": {
"type": [
"number",
"null"
]
},
"internalLinks": {
"type": [
"number",
"null"
]
},
"isHttps": {
"type": "boolean"
},
"issueCount": {
"type": [
"number",
"null"
]
},
"issueSummary": {
"type": "string"
},