DataForSEO On-Page Site Audit
Crawl a site and get the technical SEO punch list: queue a DataForSEO On-Page crawl, read the summary of 60+ checks, then drill into non-indexable pages, duplicate titles and descriptions, broken links and redirect chains. One-off checks run live with instant_pages or a Lighthouse audit.
Connect this API to an AI agent Browse all specs
What you can do with DataForSEO On-Page Site Audit via MCP
Every endpoint below becomes a governed tool your AI agent (Claude, ChatGPT, or a customer-facing VX agent) can call — with scoped permissions, sandbox testing, and audit logs.
| Method | Path | Operation | Description |
|---|---|---|---|
| POST | /v3/on_page/task_post |
createCrawlTask | Start a crawl of a website (billed per crawled page) |
| GET | /v3/on_page/tasks_ready |
listReadyCrawls | List finished crawls whose results you have not collected |
| GET | /v3/on_page/summary/{id} |
getCrawlSummary | Get crawl progress and the count of each on-page issue |
| POST | /v3/on_page/pages |
listCrawledPages | List crawled pages with their checks, filtered by issue |
| POST | /v3/on_page/non_indexable |
listNonIndexablePages | List pages search engines cannot index, and why |
| POST | /v3/on_page/duplicate_tags |
listDuplicateTags | List pages sharing the same title or meta description |
| POST | /v3/on_page/duplicate_content |
listDuplicateContent | List pages with near-duplicate content to a given page |
| POST | /v3/on_page/links |
listLinks | List internal and external links, including broken ones |
| POST | /v3/on_page/redirect_chains |
listRedirectChains | List redirect chains and loops found in the crawl |
| POST | /v3/on_page/resources |
listResources | List images, scripts and stylesheets with their issues |
| POST | /v3/on_page/instant_pages |
instantPageAudit | Audit one URL live without a crawl |
| POST | /v3/on_page/lighthouse/live/json |
lighthouseAudit | Run a Google Lighthouse audit on one URL live |
Authentication
basicAuth
HTTP Basic
DataForSEO uses HTTP basic auth with your API login and API password (not your dashboard password).
How to get a credential
- Sign up at https://app.dataforseo.com/register (pay-as-you-go; new accounts get trial credit).
- Open API Access in the dashboard (https://app.dataforseo.com/api-access).
- Copy the API login (your email) and the API password shown there.
Permissions used
DataForSEO has no scopes: every call is billed per task or page from your balance.
| Access | Operations |
|---|---|
| Billed crawl / live check | createCrawlTask (per crawled page), instantPageAudit, lighthouseAudit |
| Results of your own tasks | listReadyCrawls, getCrawlSummary, listCrawledPages, listNonIndexablePages, listDuplicateTags, listDuplicateContent, listLinks, listRedirectChains, listResources |
Common errors
DataForSEO answers HTTP 200 and puts the real result in status_code (20000 = ok) inside the body and each task.
| Code | Meaning | Fix |
|---|---|---|
| 401 / 40100 | Wrong login or API password | Copy both again from API Access. |
| 40200 / 40210 | Balance too low | Top up the account balance. |
| 40203 | Daily cost limit reached | Raise the limit under API Settings in the dashboard. |
| 40401 / 40501 / 40503 | Unknown task id, or invalid field | Use ids from createCrawlTask; target is a domain without https:// or www. |
| 40202 | Per-minute rate limit exceeded | Slow down and retry. |
Store the login and API password as a VX Agents basic-auth credential.
Usage guide
Setup
Add your DataForSEO API login and API password (dashboard > API Access) as a basic-auth credential. Crawls and live checks are billed from your balance; set a daily cost limit in the dashboard's API Settings.
Audit a website
- Confirm the domain and page budget with the user, then
createCrawlTaskwith a one-item array:[{"target": "example.com", "max_crawl_pages": 200}](targetwithout https:// or www). Optional:load_resources: truefor images/scripts checks,enable_javascript: truefor JS sites (costs more). Keep the returned taskid. - Poll
getCrawlSummarywith theidevery minute or two:crawl_progressturnsfinishedwhen done;listReadyCrawlslists finished crawls too. The summary gives theonpage_score, page counts and how many pages fail each check. - Drill into what the summary flags, always as a one-item array with the task
id:listNonIndexablePages: pages blocked by robots.txt, noindex or canonicals.listDuplicateTagswithtypeduplicate_titleorduplicate_description;listDuplicateContentwith aurlto compare.listLinkswithfilterse.g.[["is_broken", "=", true]];listRedirectChainsfor chains and loops.listCrawledPageswithfilterson checks, e.g.[["checks.no_h1_tag", "=", true]], andorder_by.listResourcesfor oversized or broken images, scripts and stylesheets.
- Report a prioritised punch list (indexing first, then broken links, duplicates, then performance).
Quick checks
instantPageAuditwith[{"url": "https://example.com/page"}]audits one URL live without a crawl.lighthouseAuditwith[{"url": "...", "for_mobile": true}]returns Lighthouse scores and audits. Both are billed per call: confirm first.
Good to know
- Every body is a JSON array of task objects; results are under
tasks[0].result. Checkstatus_code20000 in the body, not just HTTP 200. - Result lists take
limit(max 1000) andoffset;filtersallow up to 8 conditions joined by"and"/"or". - Crawl results expire after a month (40403).
max_crawl_pagesis the main cost driver: start small.
Source: DataForSEO On-Page API reference (https://docs.dataforseo.com/v3/on_page/overview/), checked 2026-10-23.
How to use this spec
- Create a free VX Agents account (sandbox tools included).
- Open the marketplace and connect “DataForSEO On-Page Site Audit” to an agent.
- Expose it as an MCP server for Claude/ChatGPT, or chat with it directly.