{
"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.
The SEO Audit endpoint returns an overall score, grade, category scores, individual checks, and a prioritized fix list. The AI Readability Score endpoint provides an AI readability score, grade, category scores, checks, and recommendations. Both return data in JSON format.
Key fields include "url," "score," "grade," "audit" (for the SEO Audit), and "categories" (for AI Readability). Each category contains scores and checks detailing the status and recommendations for improvements.
The response is structured in a JSON format with a top-level object containing the URL, score, grade, and detailed audit or category information. Each category includes scores and checks, with recommendations for fixes clearly outlined.
The SEO Audit endpoint provides insights on meta tags, technical SEO, performance, and more. The AI Readability Score endpoint focuses on AI accessibility, structural markup, and content extractability, helping assess how well AI can read the page.
Users can customize requests by specifying the URL to analyze. The SEO Audit endpoint allows additional parameters like "cwv" for Core Web Vitals and "include" for tracking options, enabling tailored audits based on user needs.
Data is sourced live from the URL provided by the user. The API runs its own checks on the page, and when Core Web Vitals are requested, it pulls data from Google PageSpeed Insights, ensuring real-time accuracy.
Typical use cases include optimizing website performance, improving SEO strategies, enhancing AI content accessibility, and identifying technical issues. Marketers, developers, and content creators can leverage the insights for better online visibility.
If a page cannot be loaded, the API returns a 422 status with a reason. Users should check the URL for accuracy. For partial results, review the available checks and recommendations to address the most critical issues first.
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