WCAG 2.2 Accessibility Auditor โ€” Bulk axe-core avatar

WCAG 2.2 Accessibility Auditor โ€” Bulk axe-core

Pricing

from $50.00 / 1,000 url auditeds

Go to Apify Store
WCAG 2.2 Accessibility Auditor โ€” Bulk axe-core

WCAG 2.2 Accessibility Auditor โ€” Bulk axe-core

Bulk WCAG 2.2 accessibility auditor. Render sites with Chrome, scan with axe-core, return violations, severity, and score.

Pricing

from $50.00 / 1,000 url auditeds

Rating

0.0

(0)

Developer

NexGenData

NexGenData

Maintained by Community

Actor stats

0

Bookmarked

10

Total users

1

Monthly active users

5 days ago

Last modified

Share

โ™ฟ WCAG 2.2 Accessibility Auditor โ€” bulk axe-core

Give it a list of page URLs. Each page is rendered in headless Chrome, scanned with axe-core 4.10.0, and returned as a structured WCAG 2.2 report.

๐Ÿ“Š Sample Output

1 real rows delivered by WCAG 2.2 Accessibility Auditor โ€” Bulk axe-core โ€” run ciYlYZJVljq0lfVYM on build 0.0.15

urlaudit_enginewcag_versiontotal_violationstotal_passesseverity_breakdown
https://en.wikipedia.org/wiki/Web_accessibilityaxe-core 4.10.02.2432{'critical': 0, 'serious': 4, 'moderate': 0, 'minor': 0}

Real rows from run ciYlYZJVljq0lfVYM on build 0.0.15 (2026-09-24), unedited apart from masked emails/phones and shortened long text; fields the source does not publish are empty.

โš™๏ธ Sample inputs

This is the Store example input โ€” the same input Apify's automated check runs โ€” so it is proven to return rows on the current build. Paste it into the input form, or send it through the API, CLI or a schedule:

{
"urls": [
"https://example.com/",
"https://www.python.org/"
],
"wcagTags": [
"wcag2a",
"wcag2aa",
"wcag21aa",
"wcag22aa"
],
"timeoutMs": 25000
}

๐Ÿงพ JSON sample record

One real record from run ciYlYZJVljq0lfVYM (emails/phones masked, long text shortened):

{
"url": "https://en.wikipedia.org/wiki/Web_accessibility",
"audit_engine": "axe-core 4.10.0",
"wcag_version": "2.2",
"total_violations": 4,
"total_passes": 32,
"total_incomplete": 3,
"total_inapplicable": 30,
"severity_breakdown": {
"critical": 0,
"serious": 4,
"moderate": 0,
"minor": 0
},
"wcag_tag_coverage": {
"wcag2aa": 1,
"wcag143": 1,
"TTv5": 3,
"EN-301-549": 3,
"ACT": 2,
"wcag2a": 2,
"wcag141": 1,
"wcag244": 1,
"wcag412": 1,
"section508": 1,
"wcag22aa": 1,
"wcag258": 1,
"cat.color": 2,
"TT13.c": 1,
"EN-9.1.4.3": 1,
"TT13.a": 1,
"EN-9.1.4.1": 1,
"cat.name-role-value": 1,
"section508.22.a": 1,
"TT6.a": 1,
"EN-9.2.4.4": 1,
"EN-9.4.1.2": 1,
"cat.sensory-and-visual-cues": 1
},
"accessibility_score": 0,
"top_violations": [
{
"rule_id": "color-contrast",
"impact": "serious",
"description": "Ensure the contrast between foreground and background colors meets WCAG 2 AA minimum contrast ratio thresholds",
"help": "Elements must meet minimum color contrast ratio thresholds",
"help_url": "https://dequeuniversity.com/rules/axe/4.10/color-contrast?application=axeAPI",
"wcag_tags": [
"wcag2aa",
"wcag143"
],
"affected_nodes": 15,
"sample_selectors": [
"tr:nth-child(2) > .sidebar-content > .sidebar-list.mw-collapsed.mw-collapsible > .mw-collapsible-toggle-collapsed.mw-collapsible-toggle.mw-collapsible-toggle-default > .mw-collapsible-text",
"tr:nth-child(3) > .sidebar-content > .sidebar-list.mw-collapsed.mw-collapsible > .mw-collapsible-toggle-collapsed.mw-collapsible-toggle.mw-collapsible-toggle-default > .mw-collapsible-text",
"tr:nth-child(4) > .sidebar-content > .sidebar-list.mw-collapsed.mw-collapsible > .mw-collapsible-toggle-collapsed.mw-collapsible-toggle.mw-collapsible-toggle-default > .mw-collapsible-text"
],
"sample_html": [
"<span class=\"mw-collapsible-text\">show</span>",
"<span class=\"mw-collapsible-text\">show</span>",
"<span class=\"mw-collapsible-text\">show</span>"
],
"failure_summary": "Fix any of the following:\n Element has insufficient color contrast of 4.05 (foreground color: #3366cc, background color: #ddddff, font size: 10.6pt (14.08px), font weight: normal). Expected contrast ratio of 4.5:1"
},
{
"rule_id": "target-size",
"impact": "serious",
"description": "Ensure touch targets have sufficient size and space",
"help": "All touch targets must be 24px large, or leave sufficient space",
"help_url": "https://dequeuniversity.com/rules/axe/4.10/target-size?application=axeAPI",
"wcag_tags": [
"wcag22aa",
"wcag258"
],
"affected_nodes": 11,
"sample_selectors": [
"a[title=\"Template:Disability sidebar\"]",
".sidebar-navbar > .navbar.navbar-mini.plainlinks > ul > .nv-talk > a[rel=\"mw:WikiLink\"]",
".sidebar-navbar > .navbar.navbar-mini.plainlinks > ul > .nv-edit > a[rel=\"mw:WikiLink\"]"
],
"sample_html": [
"<a rel=\"mw:WikiLink\" href=\"https://en.wikipedia.org/wiki/Template:Disability_sidebar\" title=\"Template:Disability sidebar\"><abbr title=\"View this template\">v</abbr></a>",
"<a rel=\"mw:WikiLink\" href=\"https://en.wikipedia.org/wiki/Template_talk:Disability_sidebar\" title=\"Template talk:Disability sidebar\"><abbr title=\"Discuss this template\">t</abbr></a>",
"<a rel=\"mw:WikiLink\" href=\"https://en.wikipedia.org/wiki/Special:EditPage/Template:Disability_sidebar\" title=\"Special:EditPage/Template:Disability sidebar\"><abbr title=\"Edit this template\">e</abbr></a"
],
"failure_summary": "Fix any of the following:\n Target has insufficient size (6.8px by 16px, should be at least 24px by 24px)\n Target has insufficient space to its closest neighbors. Safe clickable space has a diameter of 12.4px instead of at least 24px."
},
{
"rule_id": "link-name",
"impact": "serious",
"description": "Ensure links have discernible text",
"help": "Links must have discernible text",
"help_url": "https://dequeuniversity.com/rules/axe/4.10/link-name?application=axeAPI",
"wcag_tags": [
"wcag2a",
"wcag244",
"wcag412"
],
"affected_nodes": 6,
"sample_selectors": [
"#mwAss",
"#mwA0I",
"#mwA2s"
],
"sample_html": [
"<a href=\"#cite_ref-sec1095_1-1\" id=\"mwAss\"><span class=\"mw-linkback-text\" id=\"mwAsw\">2</span></a>",
"<a href=\"#cite_ref-Shawn_Lawton_Henry_14-1\" id=\"mwA0I\"><span class=\"mw-linkback-text\" id=\"mwA0M\">2</span></a>",
"<a href=\"#cite_ref-w3.org_18-1\" id=\"mwA2s\"><span class=\"mw-linkback-text\" id=\"mwA2w\">2</span></a>"
],
"failure_summary": "Fix all of the following:\n Element is in tab order and does not have accessible text\n\nFix any of the following:\n Element does not have text that is visible to screen readers\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element has no title attribute"
},
{
"rule_id": "link-in-text-block",
"impact": "serious",
"description": "Ensure links are distinguished from surrounding text in a way that does not rely on color",
"help": "Links must be distinguishable without relying on color",
"help_url": "https://dequeuniversity.com/rules/axe/4.10/link-in-text-block?application=axeAPI",
"wcag_tags": [
"wcag2a",
"wcag141"
],
"affected_nodes": 3,
"sample_selectors": [
"#mwAdA",
"#mwAeg",
"#mwAe0"
],
"sample_html": [
"<a rel=\"mw:WikiLink\" href=\"https://en.wikipedia.org/wiki/Anti-discrimination_Accessibility_Act?action=edit&amp;redlink=1\" title=\"Anti-discrimination Accessibility Act (page does not exist)\" class=\"new",
"<a rel=\"mw:WikiLink\" href=\"https://en.wikipedia.org/wiki/Biwako_Millennium_Framework?action=edit&amp;redlink=1\" title=\"Biwako Millennium Framework (page does not exist)\" class=\"new\" typeof=\"mw:Localiz",
"<a rel=\"mw:WikiLink\" href=\"https://en.wikipedia.org/wiki/Manila_Accessible_Information_and_Communications_Technologies_Design_Recommendations?action=edit&amp;redlink=1\" title=\"Manila Accessible Inform"
],
"failure_summary": "Fix any of the following:\n The link has insufficient color contrast of 2.99:1 with the surrounding text. (Minimum contrast is 3:1, link text: #bf3c2c, surrounding text: #202122)\n The link has no styling (such as underline) to distinguish it from the surrounding text"
}
]
}

More from the NexGenData Social, video & reviews family:

6 more in this family on the NexGenData Store page.

๐Ÿ’ต Pricing

EventPrice
URL audited (one page rendered and successfully scanned)$0.05 โ€” about 20 audits per $1
Actor start$0.005 per run, per GB of memory (minimum 1)

You are charged only for pages that were actually rendered and audited. A page that could not be loaded โ€” blocked, timed out, DNS failure โ€” is not charged and is not written to the dataset; it is listed in the run's OUTPUT record and in the run status message instead.

๐Ÿ“Š What you get

One dataset row per audited page, with these exact fields:

FieldTypeMeaning
urlstringThe page audited
audit_enginestringaxe-core 4.10.0
wcag_versionstring2.2
total_violationsintNumber of failing axe rules
total_passesintNumber of rules that passed
total_incompleteintRules axe could not decide (needs human review)
total_inapplicableintRules with nothing on the page to test
severity_breakdownobject{critical, serious, moderate, minor} rule counts
wcag_tag_coverageobjectCount of failing rules per WCAG tag (wcag2aa, wcag22aa, โ€ฆ)
accessibility_scoreint0โ€“100, derived from violation severity ร— affected nodes
top_violationsarrayUp to 25 failing rules, worst first โ€” see below

Each entry in top_violations:

rule_id, impact, description, help, help_url, wcag_tags, affected_nodes, sample_selectors (up to 3 CSS selectors), sample_html (up to 3 snippets, 200 chars each), failure_summary.

Note on accessibility_score: it is this actor's own heuristic (critical โˆ’15, serious โˆ’8, moderate โˆ’3, minor โˆ’1, per affected node, capped at 20 nodes per rule, clamped to 0). It is a triage aid, not a certification, and it is not produced by axe-core. Nothing here is a legal conformance audit โ€” axe-core catches roughly the automatable subset of WCAG; manual testing is still required for a conformance claim.

โš™๏ธ Input

FieldTypeNotes
urlsarray of stringsRequired. One URL per line. Bare hostnames are upgraded to https://. Also accepts startUrls with {"url": โ€ฆ} objects.
wcagTagsarray of stringsOptional. Leave empty for the WCAG 2.2 AA set: wcag2a, wcag2aa, wcag21aa, wcag22aa. Other values: wcag21a, best-practice.
timeoutMsintegerOptional. Per-page load timeout, 5000โ€“120000. Default 25000.
proxyCountrystringOptional. Two-letter country used only for residential retries after a block.

An empty input ({}) does no work and charges nothing โ€” the run succeeds with 0 rows and a message naming urls.

๐Ÿ” Blocked pages

A page that refuses the direct request (connection reset, timeout, TLS failure) is retried up to 3 more times through the Apify residential proxy, with a fresh session on each attempt. Only after all attempts fail is the page recorded as unaudited โ€” and never charged.

๐Ÿšฆ How runs end

  • Rows delivered โ€” status message reports how many pages were audited and charged, and how many were not.
  • Every requested page unreachable โ€” the run FAILS with the first cause named. A blocked site is never reported as a clean audit.
  • Browser could not start โ€” the run FAILS; nothing is charged.
  • Run time limit reached โ€” the run stops cleanly before the platform timeout, keeps the pages already audited, and says "stopped early at the run time limit". Remaining URLs are listed in OUTPUT.skipped_urls.
  • Nothing to do โ€” missing urls succeeds with 0 rows and says which field to fill in.

โฐ Schedule it

Run on a schedule (0 8 * * 1) to watch accessibility regressions over time.

๐Ÿค– Use with AI agents

Point Claude, the OpenAI Agents SDK, an n8n flow, or any MCP-aware client at it.

Run WCAG 2.2 Accessibility Auditor on my input and return the structured results.

Agentic payments (x402): supports agentic payment via USDC.

Lighthouse Bulk Checker ยท Page Speed Analyzer


A NexGenData utility actor. axe-core is MPL-2.0, ยฉ Deque Systems.