Deep Audit is an AI-assisted, 9-dimension site audit — the one built for the AI-search era and delivered as an API you can automate, not a dashboard you log into. This guide takes you from zero to a scored report, in whatever tool you work in — cURL, Python, Node, n8n, or an AI agent — and shows you how to read the results and wire them into CI/CD.
- Base URL:
https://engine.seoscoreapi.com - Interactive API docs:
https://engine.seoscoreapi.com/docs - Plan required: Pro or Ultra
1. Prerequisites
You need a Pro or Ultra API key (Deep Audit is the heavy, AI-backed
analysis, so it's a paid feature). Your existing SEO Score API key works — send it
as the X-API-Key header.
| Plan | Price | Deep Audits / month | SERP / month |
|---|---|---|---|
| Pro | $39/mo | 20 | 250 |
| Ultra | $99/mo | 100 | 1,000 |
Check your remaining quota anytime:
curl https://engine.seoscoreapi.com/usage -H "X-API-Key: $KEY"
# {"tier":"ultra","site_audit":{"used":3,"remaining":97}, ...}
2. The 60-second quickstart
The SDKs wrap the whole submit-and-wait flow in a single call:
Python
pip install seoscoreapi
import seoscoreapi as seo
result = seo.deep_audit("https://yoursite.com", "YOUR_KEY", business_type="saas")
print(result["scores"]["lai_score"], result["scores"]["lai_grade"])
Node
npm install seoscoreapi
const seo = require("seoscoreapi");
const result = await seo.deepAudit("https://yoursite.com", "YOUR_KEY", { business_type: "saas" });
console.log(result.scores.lai_score, result.scores.lai_grade);
That's it. Everything below is for when you want more control.
3. How the async flow works
A Deep Audit renders the page in a real browser, runs thousands of checks, and does an AI analysis pass — so it takes ~1–2 minutes. It runs as a background job:
- Submit → get a
job_idinstantly. - Poll the job until it's
completed.
# 1) Submit
curl -X POST https://engine.seoscoreapi.com/site-audit \
-H "X-API-Key: $KEY" -H "Content-Type: application/json" \
-d '{"url":"https://yoursite.com"}'
# → {"job_id":"a1b2c3","status":"queued","poll":"/site-audit/a1b2c3"}
# 2) Poll
curl https://engine.seoscoreapi.com/site-audit/a1b2c3 -H "X-API-Key: $KEY"
The poll response tells you where things stand:
| Status | You get |
|---|---|
queued |
queue_position, eta_seconds — your place in line and an estimate |
running |
progress (0–100), stage (e.g. "Section 6") |
completed |
result — the full report |
failed |
error |
Doing it by hand? Poll every ~5 seconds. Respect these signals:
- On submit, a
429means either your monthly quota is used up or the queue is full (a burst-protection measure). Check theRetry-Afterheader and retry later. No quota is consumed on a queue-full 429. - Prefer not to poll at all? Pass a
webhook_urland we'll POST the finished job to it.
4. Submit options
POST /site-audit accepts:
| Field | Type | Notes |
|---|---|---|
url |
string | required |
business_type |
string | saas | local_service | ecommerce | storefront | blog | publisher. Tunes which checks apply — set this for the fairest score. |
is_local |
bool | Force local-business checks (NAP, LocalBusiness schema) |
webhook_url |
string | POSTed with the finished job |
connected_integrations |
string[] | Enabled data integrations |
Why business_type matters: the engine won't score a SaaS homepage against
Event, Product, or Recipe schema, or a blog against e-commerce checks. Setting it
avoids misleading "critical" findings for things that don't apply to you.
5. Reading the result
A completed audit's result looks like this:
{
"website_url": "https://yoursite.com",
"scores": {
"lai_score": 3.87, "lai_grade": "good", // headline, 0–5
"ai_score": 3.75, // AI-readability
"seo_score": 2.70, // classic on-page SEO
"section_scores": { "1": 4.31, "2": 4.76, "...": "...", "9": 3.04 }
},
"sections": [ { "name": "Technical Foundation & Rendering", "score": 4.31 }, ... ],
"findings": [
{ "task_id": "7.5.02", "section": 7, "severity": "high",
"weight": "critical", "evidence": "No CSP", "count": 3 }, ...
],
"coverage": {
"scored_tasks": 6022, "not_applicable_tasks": 330,
"hybrid_ai_tasks": 150, "coverage_pct": 41.9
}
}
How to read it:
lai_score(0–5) is your headline.ai_scoreandseo_scoresplit it into "how well AI can read you" vs "classic SEO."section_scores(1–9) show where you're strong and weak. The nine sections: 1 Technical Foundation · 2 Crawlability · 3 Content & Entity Semantics · 4 Core Web Vitals · 5 Technical SEO · 6 Schema/Trust · 7 Security · 8 Media · 9 Off-Site.findingsare your to-do list, each with a plain-Englishevidencestring, aseverity(high/…), and aweight(critical/heavy/medium). Start withweight: critical+severity: high.coverageis your honesty check: how many tasks were scored, how many werenot_applicable(correctly skipped for your business type), and how manyhybrid_ai_tasksthe AI evaluated.
Fixing the common ones: missing schema → add the relevant JSON-LD
(Organization, Service, FAQPage, etc.); No CSP / missing security headers →
set them at your app or CDN; thin content → deepen the page and tighten entity
coverage. Re-audit to confirm the lift.
6. Use it in your workflow
CI/CD quality gate (synchronous)
Fail a build when SEO regresses — gate-scan runs synchronously and returns
pass/fail:
curl -X POST https://engine.seoscoreapi.com/gate-scan \
-H "X-API-Key: $KEY" -H "Content-Type: application/json" \
-d '{"url":"https://staging.yoursite.com","min_score":3.5}'
# → {"passed":true,"score":3.87,"blockers":[...]}
passed is false if the score is below min_score or there are high-severity
blockers — wire that into your pipeline's exit code.
n8n (no-code)
Install n8n-nodes-seoscoreapi, add the SEO Score API node, pick the
Deep Audit operation, set the URL (and optionally Business Type). The node
submits and waits, returning the full result to the next step. Great for
"schedule → Deep Audit → if score drops → Slack."
AI agents (MCP)
Add the MCP server so Claude, Cursor, or any MCP client can run audits as a tool:
{
"mcpServers": {
"seoscoreapi": {
"command": "npx",
"args": ["-y", "seoscoreapi-mcp"],
"env": { "SEO_SCORE_API_KEY": "YOUR_KEY" }
}
}
}
Then just ask: "Run a deep audit on example.com and summarize the top fixes."
The deep_audit tool submits, waits, and returns the report.
Webhooks
Pass webhook_url on submit and skip polling entirely — you'll get a POST with the
finished job when it completes.
7. Beyond the audit
Your key also unlocks:
POST /serp/search— live SERP results + your ranking for a queryPOST /serp/compare— head-to-head SERP gap analysis vs competitorsPOST /engine-radar— how AI answer engines describe your brandGET /catalog— browse every check the engine runs (no key needed)
(SERP endpoints draw on your monthly SERP quota.)
8. Errors & limits
| Status | Meaning | What to do |
|---|---|---|
401 |
Missing/invalid key | Send a valid X-API-Key |
403 |
Key isn't Pro/Ultra | Upgrade to run Deep Audits |
404 |
Unknown job_id |
Check the ID |
429 |
Rate limit, quota, or queue full | Honor Retry-After; retry later |
- Rate limit: default 60 requests/min per key.
- Quota: Deep Audits are metered monthly by plan (see §1). A queue-full
429does not consume quota. - Timeouts: audits typically finish in 1–2 minutes; the SDK helpers wait up to 10 minutes by default and handle backpressure for you.
Full reference
Interactive, always-current API docs: https://engine.seoscoreapi.com/docs