WCAG Accessibility Audit
Last updated October 19, 2026
Audit any website for WCAG 2.1 and 2.2 AA accessibility issues with axe-core in a real browser. One row per domain: issues by severity, top failing rules, sample elements, a score, and European Accessibility Act exposure signals. Optional statement, Impressum, and privacy checks.
Features
- Audit any website for WCAG 2.1 and 2.2 AA accessibility issues with axe-core in a real browser.
- One row per domain: issues by severity, top failing rules, sample elements, a score, and European Accessibility Act exposure signals.
- Optional statement, Impressum, and privacy checks.
- Pay per event: Domain audited at $0.01.
Input
domainstringoptionalDomain. One website domain, for example mambabuilt.com. Protocol and path are stripped and the homepage is audited. Required unless the Domains list is filled.
domainsarrayoptionalDomains (batch). Optional. A list of domains, one per line. One row per domain. When this list is filled it is used instead of the single Domain field.
standardstringoptionalStandard. Which rule set axe-core runs. ADA runs the WCAG 2.1 AA set, the level the ADA Title II rule names. EN 301 549 runs the rules axe maps to the European standard the EAA points to.
pagesstringoptionalPages per domain. 1 audits the homepage only. 2 to 5 adds pages from the sitemap, or from the homepage navigation when there is no sitemap. Each page after the first is charged as page-audited. Sent as a string so Clay columns work as is.
viewportstringoptionalViewport. Desktop renders at 1280 by 800. Mobile renders at 390 by 844 with touch, which is where reflow and target size issues show.
compliance_checksarrayoptionalCompliance checks. Optional page checks, charged once per domain as compliance-checked when any is selected. Presence only, never a legal verdict.
skipCachestringoptionalSkip cache. Leave as false to reuse an identical audit from the last 24 hours. Set to true to audit fresh, for example right after a fix ships.
max_charge_usdstringoptionalMaximum charge for this run (USD). Optional, in USD, for example 1.50. The run stops before starting a domain that could take its charges past this amount, so no row is cut in half. Leave empty to rely only on the maximum cost per run you set in Apify. The run also stops cleanly when that Apify maximum is reached.
Output schema
{
"domain": "string",
"url_audited": "string",
"standard": "string",
"viewport": "string",
"pages_requested": "integer",
"pages_audited": "integer",
"urls_audited": "array",
"violations_total": "integer",
"violations_critical": "integer",
"violations_serious": "integer",
"violations_moderate": "integer",
"violations_minor": "integer",
"violation_nodes_total": "integer",
"passes": "integer",
"incomplete": "integer",
"top_rules_json": "string",
"sample_selectors_json": "string",
"score": "integer",
"eaa_exposure": "boolean",
"eaa_signals": "array",
"compliance_checks_requested": "array",
"accessibility_statement_found": "boolean",
"accessibility_statement_url": "string",
"overlay_detected": "null",
"overlay_vendor": "null",
"privacy_policy_found": "null",
"privacy_policy_url": "null",
"impressum_found": "null",
"impressum_url": "null",
"impressum_fields_present": "null",
"us_privacy_choice_link_found": "null",
"gpc_well_known_found": "null",
"render_status": "string",
"render_ms": "integer",
"axe_version": "string",
"from_cache": "boolean",
"row_status": "string",
"error_reason": "null",
"billable_events_json": "string",
"checked_at": "string"
}Pricing
Pay-per-event billing on the Apify platform. You are charged only when the actor returns a result. No subscription, no seat license.
Free-tier Apify accounts include monthly free compute. Upgrade for higher concurrency and volume.