WCAG Accessibility Audit Crawler avatar

WCAG Accessibility Audit Crawler

Pricing

from $20.00 / 1,000 audited pages

Go to Apify Store
WCAG Accessibility Audit Crawler

WCAG Accessibility Audit Crawler

Crawls a list of URLs (or a start URL up to a depth/page limit) and runs an axe-core WCAG audit on each page, returning only rule violations: no page text, no form data, no cookies.

Pricing

from $20.00 / 1,000 audited pages

Rating

0.0

(0)

Developer

Pavel Staurouski

Pavel Staurouski

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 days ago

Last modified

Share

Scans a list of URLs (or crawls from one start URL) and runs a full axe-core WCAG 2.1 AA audit on each page.

What you get

One record per audited page, containing only the accessibility rule violations found: rule ID, impact level (critical/serious/moderate/minor), a human-readable description, a link to the official rule documentation, how many elements are affected, and CSS selectors pointing to them.

What it does not do

No screenshots, no page text, no form data, no cookies. Output is limited to the rule violations themselves, so it's safe to point at pages that contain sensitive or personal content — this Actor never reads or stores it.

Why you might need this

The European Accessibility Act's compliance deadline (28 June 2025) has already passed. EU member states can now fine non-compliant private-sector sites (e-commerce, banking, transport) and exclude them from public contracts that require a WCAG 2.1 AA conformance statement. A one-off manual audit goes stale the moment a developer ships the next redesign; agencies and in-house teams responsible for ongoing compliance need a recurring, automatable check they can run on every deploy or on a schedule, not a point-in-time report.

Input

A list of URLs, or a single start URL with a crawl depth and page limit.

{
"startUrls": [{ "url": "https://example.com/" }],
"maxPages": 20
}

Sample output

One real record (this Actor's own axe-core scan, run against its test fixture, test/fixtures/broken.html, through its own buildPageRecord() field mapping; a live run reports the real page URL you gave it, and whatever violations and selectors axe-core finds on that page's own markup):

{
"url": "https://example.com/contact",
"auditedAt": "2026-10-13T20:33:05.273Z",
"violationCount": 2,
"violations": [
{
"id": "image-alt",
"impact": "critical",
"description": "Images must have alternative text",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.13/image-alt?application=playwright",
"nodeCount": 1,
"selectors": ["img"]
},
{
"id": "label",
"impact": "critical",
"description": "Form elements must have labels",
"helpUrl": "https://dequeuniversity.com/rules/axe/4.13/label?application=playwright",
"nodeCount": 1,
"selectors": ["input"]
}
]
}

A page that fails to load (navigation timeout, DNS failure, and similar) pushes a different-shaped record instead, { "url", "auditedAt", "error" }, with no violations key at all -- it never pushes a record with "error": null alongside a violations array.

Pricing

Pay per run started, plus per page audited. See the Pricing tab for exact rates.