{
"url": "https://seoscoreapi.com",
"score": 91.546,
"grade": "A+",
"response_code": 200,
"response_time": "0.22s",
"html_truncated": false,
"audit": {
"meta": {
"score": 87.75,
"checks": [
{
"name": "title",
"status": "warning",
"value": "SEO Score API — Free SEO Audit API, 80+ Checks per URL, JSON in Seconds",
"score": 60,
"recommendation": "Title may be truncated (71 chars). Keep under 60."
}
]
},
"technical": {
"score": 91.111,
"checks": [
{
"name": "response_time",
"status": "pass",
"value": "0.22s",
"score": 100
},
{
"name": "https",
"status": "pass",
"value": true,
"score": 100
}
]
},
"social": {
"score": 100,
"checks": [
{
"name": "open_graph",
"status": "pass",
"value": {
"og:title": "SEO Score API — Free SEO Audit API, 80+ Checks per URL, JSON in Seconds",
"og:description": "A free SEO audit API for developers. One call, 80+ checks per URL, JSON back in seconds. SDKs for Python, Node, n8n, and GitHub Actions.",
"og:image": "https://seoscoreapi.com/og-image.png",
"og:type": "website",
"og:url": "https://seoscoreapi.com"
},
"score": 100
}
]
},
"performance": {
"score": 90,
"checks": [
{
"name": "html_size",
"status": "warning",
"value": "101.7 KB",
"score": 60,
"recommendation": "HTML is getting large. Consider reducing inline resources."
},
{
"name": "dom_size",
"status": "pass",
"value": 701,
"score": 100
}
]
},
"accessibility": {
"score": 100,
"checks": [
{
"name": "lang",
"status": "pass",
"value": "en",
"score": 100
},
{
"name": "image_alt_coverage",
"status": "info",
"value": "100%",
"score": 100
}
]
}
},
"priorities": [
{
"severity": "high",
"category": "technical",
"issue": "Schema missing required fields",
"fix": "Add required schema.org properties to make items eligible for Google rich results",
"plain_english": "The page's machine-readable labels are missing required details, so it isn't eligible for rich results.",
"who_fixes_it": "developer"
},
{
"severity": "high",
"category": "technical",
"issue": "Schema policy violations",
"fix": "Make FAQ/HowTo content visible to users, remove self-serving reviews, consolidate duplicate Organization blocks",
"plain_english": "The page's machine-readable labels break Google's rules, which can cost the site its rich results.",
"who_fixes_it": "developer"
}
],
"ai_readability": {
"url": "https://seoscoreapi.com",
"ai_readability_score": 95,
"ai_readability_grade": "A+",
"categories": {
"crawl_accessibility": {
"score": 25,
"max": 25,
"checks": [
{
"name": "ssr_content",
"status": "pass",
"score": 8,
"max": 8,
"detail": "Server-rendered content detected"
}
]
},
"structural_markup": {
"score": 24,
"max": 25,
"checks": [
{
"name": "schema_jsonld",
"status": "pass",
"score": 8,
"max": 8,
"detail": "Types: SoftwareApplication, Organization, FAQPage, Product, WebSite"
}
]
},
"content_extractability": {
"score": 26,
"max": 30,
"checks": [
{
"name": "answer_first",
"status": "pass",
"score": 6,
"max": 6,
"detail": "6/6 sections lead with facts"
}
]
},
"ai_discoverability": {
"score": 20,
"max": 20,
"checks": [
{
"name": "open_graph",
"status": "pass",
"score": 4,
"max": 4,
"detail": "5/5 OG tags present"
}
]
}
},
"recommendations": []
},
"core_web_vitals": {
"status": "unavailable",
"reason": "PSI returned HTTP 429",
"lcp_ms": null,
"inp_ms": null,
"cls": null,
"fcp_ms": null,
"ttfb_ms": null,
"checks": []
},
"sxo": {
"sxo_score": 78,
"sxo_grade": "B",
"checks": [
{
"name": "page_speed",
"status": "pass",
"score": 5,
"max": 5,
"detail": "0.19s — excellent"
},
{
"name": "mobile_viewport",
"status": "pass",
"score": 4,
"max": 4,
"detail": "Responsive viewport configured"
}
],
"summary": "Good experience with a few improvements that could boost engagement."
},
"aeo": {
"aeo_score": 94,
"aeo_grade": "A+",
"checks": [
{
"name": "faq_howto_schema",
"status": "pass",
"score": 4,
"max": 5,
"detail": "FAQPage schema found"
},
{
"name": "question_headings",
"status": "pass",
"score": 4,
"max": 4,
"detail": "6 question-phrased headings — strong AEO signal"
}
],
"summary": "Highly optimised for answer engines — strong schema, Q&A structure, and snippet-ready content."
},
"aio": {
"aio_score": 85,
"aio_grade": "A",
"checks": [
{
"name": "ai_bot_access",
"status": "pass",
"score": 5,
"max": 5,
"detail": "All AI crawlers allowed: GPTBot, ClaudeBot, PerplexityBot"
},
{
"name": "llms_txt",
"status": "pass",
"score": 4,
"max": 4,
"detail": "/llms.txt found — clear instructions for LLM crawlers"
}
],
"summary": "Excellent AI optimisation — content is structured, credible, and accessible to LLM systems."
},
"history": {
"first_audit": false,
"audits_recorded": 27,
"previous_audit_at": 1791297332.2136734,
"days_since_last": 1.14,
"delta": {
"score": -0.04,
"grade_change": null,
"categories": {
"meta": -0.12,
"technical": 0,
"social": 0,
"performance": 0,
"accessibility": 0
}
}
}
}
curl --location --request GET 'https://zylalabs.com/api/14550/seo+score+api/37249/seo+audit+of+one+url?url=https://seoscoreapi.com&cwv=false' --header 'Authorization: Bearer YOUR_API_KEY'
{
"url": "https://seoscoreapi.com",
"ai_readability_score": 95,
"ai_readability_grade": "A+",
"categories": {
"crawl_accessibility": {
"score": 25,
"max": 25,
"checks": [
{
"name": "ssr_content",
"status": "pass",
"score": 8,
"max": 8,
"detail": "Server-rendered content detected"
},
{
"name": "ai_bot_access",
"status": "pass",
"score": 5,
"max": 5,
"detail": "All major AI bots allowed"
}
]
},
"structural_markup": {
"score": 24,
"max": 25,
"checks": [
{
"name": "schema_jsonld",
"status": "pass",
"score": 8,
"max": 8,
"detail": "Types: SoftwareApplication, Organization, FAQPage, Product, WebSite"
},
{
"name": "semantic_html",
"status": "pass",
"score": 5,
"max": 5,
"detail": "46 semantic elements, 22 divs (68% ratio)"
}
]
},
"content_extractability": {
"score": 26,
"max": 30,
"checks": [
{
"name": "answer_first",
"status": "pass",
"score": 6,
"max": 6,
"detail": "6/6 sections lead with facts"
},
{
"name": "chunk_friendly",
"status": "warning",
"score": 3,
"max": 6,
"detail": "3/6 — sections sized for RAG chunking"
}
]
},
"ai_discoverability": {
"score": 20,
"max": 20,
"checks": [
{
"name": "open_graph",
"status": "pass",
"score": 4,
"max": 4,
"detail": "5/5 OG tags present"
},
{
"name": "semantic_urls",
"status": "pass",
"score": 3,
"max": 3,
"detail": "/"
}
]
}
},
"recommendations": []
}
curl --location --request GET 'https://zylalabs.com/api/14550/seo+score+api/37250/get+ai+readability+score?url=https://seoscoreapi.com' --header 'Authorization: Bearer YOUR_API_KEY'
After signing up, every developer is assigned a personal API access key, a unique combination of letters and digits provided to access to our API endpoint. To authenticate with the SEO Score API simply include your bearer token in the Authorization header.
| Header | Description |
|---|---|
Authorization
|
Required
Should be Bearer access_key. See "Your API Access Key" above when you are subscribed.
|
No long-term commitment. Upgrade, downgrade, or cancel anytime. Free Trial includes up to 50 requests.
SEO audit API. Send a URL, get a 0 to 100 score, a grade, category scores, AI readability scores and a prioritized fix list as JSON.
Yes. Every plan starts with Zyla's free trial of up to 50 calls, so you can test both endpoints on your own pages before you pay.
The full audit runs 80+ checks across meta tags, technical SEO, social tags, performance, on-page accessibility, structured data and AI readability, plus SXO, AEO and AIO scores. The exact number depends on the page, for example structured data checks only run when the page has JSON-LD.
JSON with the overall score from 0 to 100 and a letter grade, a score and the individual checks for each category, and priorities: the fix list, where each item has a severity (high, medium or low), the issue, the fix, a plain English sentence and who should fix it (developer, content or marketing).
Both endpoints take url, the page to analyze; https is assumed when no scheme is given. The SEO audit endpoint also takes cwv (true adds measured Core Web Vitals from Google PageSpeed Insights, about 10 seconds slower the first time) and include (trackers, conversion or both, comma separated).
Audits usually return in a few seconds. Slow or very large pages take longer, so set a client timeout of 60 to 120 seconds.
Yes. Pages that need JavaScript to show their content are loaded in a headless browser before they are checked.
No. It audits the one URL you send per request. It does not crawl a site, track rankings, or provide keyword volumes or backlink data. Send each URL you care about.
Every call loads the page you send, live, and runs our own checks on it. Core Web Vitals, when requested with cwv, come from Google PageSpeed Insights. Nothing is taken from a third-party SEO database.
A higher score means fewer known on-page and technical problems. It removes obstacles to being found and shown, but no API can promise a ranking.
To obtain your API key, first sign in to your account and navigate to the API you want to use. From the API's Pricing section, choose a plan and complete the subscription process. Once subscribed, return to the API page and you will see your API Access Key displayed at the top of the documentation page. You can use this key to authenticate your requests.
You can’t switch APIs during the free trial. If you subscribe to a different API, your trial will end and the new subscription will start as a paid plan.
The free trial lasts for 7 days and allows you to make up to 50 API requests.
No, the free trial is available only once, so we recommend using it on the API that interests you the most. Most of our APIs offer a free trial, but some may not include this option.
Yes. If the API offers a free trial, you will see a "Free 7-Day Trial" option in its Pricing section. The trial lasts for 7 days and allows up to 50 API requests, enabling you to evaluate the API before subscribing to a paid plan.
Zyla API Hub is like a big store for APIs, where you can find thousands of them all in one place. We also offer dedicated support and real-time monitoring of all APIs. Once you sign up, you can pick and choose which APIs you want to use. Just remember, each API needs its own subscription. But if you subscribe to multiple ones, you'll use the same key for all of them, making things easier for you.
You can monitor your API usage through the response headers included with every request:
x-zyla-api-calls-monthly-used: Shows the total number of API requests you have used during the current billing period.
x-zyla-api-calls-monthly-remaining: Shows the number of API requests you have remaining for the current billing period.
Yes, you can cancel your subscription at any time. Simply go to the Pricing section of the API you're subscribed to and click the "Unsubscribe" button.
Please note that upgrades, downgrades, and cancellations take effect immediately. Once your subscription is canceled, access to the service will end immediately, regardless of any remaining API calls in your quota.
Please have a look at our Refund Policy: https://zylalabs.com/terms#refund