Runs multiple accessibility analysis tools (axe-core and Pa11y) in parallel on the same target and combines the results. Issues are deduplicated based on WCAG criterion and element location, providing maximum coverage while avoiding duplicate reports.
Best For
Complete accessibility overview
Cross-validation between multiple engines
Comparing tool outputs for the same page
Parameters
URL of the page to analyze Either url or html is required, but not both.
Raw HTML content to analyze (alternative to URL) Useful for analyzing HTML snippets with multiple validation engines.
tools
array
default: "[\"axe-core\", \"pa11y\"]"
Tools to run: "axe-core", "pa11y", "lighthouse" Lighthouse requires a live URL — it will be skipped if you provide raw HTML.
Configuration options for the analysis WCAG conformance level: "A", "AA", or "AAA"
Remove duplicate issues found by multiple tools Issues are considered duplicates if they:
Reference the same WCAG criterion
Target the same or similar DOM element
Report the same type of violation
Browser behavior options CSS selector to wait for before analysis (useful for SPAs)
Milliseconds to wait before analysis (max 60,000ms)
Viewport dimensions Viewport height in pixels
Ignore HTTPS certificate errors (for local dev servers)
Response
Whether all analyses completed successfully
The analyzed URL or "[html content]"
List of tools that were run (e.g., ["axe-core", "pa11y"])
Number of unique issues (after deduplication)
Total issues before deduplication Compare this with issueCount to see how many duplicates were removed.
Combined and deduplicated issues from all tools See individual tool documentation for issue object structure.
Issues grouped by WCAG criterion {
"1.1.1" : [
{ "tool" : "axe-core" , "ruleId" : "image-alt" },
{ "tool" : "axe-core" , "ruleId" : "input-image-alt" }
],
"1.3.1" : [
{ "tool" : "pa11y" , "ruleId" : "WCAG2AA.Principle1..." }
]
}
Aggregated statistics Total number of unique issues
Issue counts by severity level {
"critical" : 2 ,
"serious" : 4 ,
"moderate" : 2 ,
"minor" : 0
}
Issue counts by POUR principle {
"perceivable" : 5 ,
"operable" : 3 ,
"understandable" : 0 ,
"robust" : 0
}
Issue count per tool {
"axe-core" : 5 ,
"pa11y" : 3
}
Raw results from each tool Tool name (e.g., "axe-core", "pa11y")
Whether that tool succeeded
Issues found by that tool (before deduplication)
Duration for that tool in milliseconds
Total analysis duration in milliseconds (tools run in parallel)
Examples
Natural Language
JSON Input
Without Deduplication
All Three Tools
Mobile Viewport
Wait for SPA Content
Raw HTML Analysis
Analyze the accessibility of https://example.com using all available tools
Response Example
{
"success" : true ,
"target" : "https://example.com" ,
"toolsUsed" : [ "axe-core" , "pa11y" ],
"issueCount" : 8 ,
"deduplicatedCount" : 12 ,
"issues" : [
{
"id" : "axe-core:image-alt:a3f8b9" ,
"ruleId" : "image-alt" ,
"tool" : "axe-core" ,
"severity" : "critical" ,
"message" : "Images must have alternate text" ,
"humanContext" : "**Non-text content (WCAG 1.1.1 - Level A)**..." ,
"affectedUsers" : [ "screen-reader" , "low-vision" ],
"priority" : "critical" ,
"remediationEffort" : "low"
}
],
"issuesByWCAG" : {
"1.1.1" : [
{
"tool" : "axe-core" ,
"ruleId" : "image-alt"
},
{
"tool" : "axe-core" ,
"ruleId" : "input-image-alt"
}
],
"1.3.1" : [
{
"tool" : "pa11y" ,
"ruleId" : "WCAG2AA.Principle1.Guideline1_3..."
}
],
"2.1.1" : [
{
"tool" : "axe-core" ,
"ruleId" : "button-name"
}
]
},
"summary" : {
"total" : 8 ,
"bySeverity" : {
"critical" : 2 ,
"serious" : 4 ,
"moderate" : 2 ,
"minor" : 0
},
"byPrinciple" : {
"perceivable" : 5 ,
"operable" : 3 ,
"understandable" : 0 ,
"robust" : 0
},
"byTool" : {
"axe-core" : 5 ,
"pa11y" : 3
}
},
"individualResults" : [
{
"tool" : "axe-core" ,
"success" : true ,
"issues" : [],
"duration" : 2340
},
{
"tool" : "pa11y" ,
"success" : true ,
"issues" : [],
"duration" : 1890
}
],
"duration" : 2500
}
How Deduplication Works
When deduplicateResults: true (default), issues are considered duplicates if they:
Reference the same WCAG criterion (e.g., both report WCAG 1.1.1)
Target the same or similar DOM element (normalized selector matching)
Report the same type of violation (e.g., missing alt text)
The tool with higher confidence or more detailed information is kept. The deduplicatedCount field shows how many issues were found before deduplication.
axe-core reports:
{
"tool" : "axe-core" ,
"ruleId" : "image-alt" ,
"location" : { "selector" : "img:nth-child(2)" }
}
Pa11y reports:
{
"tool" : "pa11y" ,
"ruleId" : "WCAG2AA.Principle1.Guideline1_1.1_1_1.H37" ,
"location" : { "selector" : "html > body > img:nth-child(2)" }
}
After deduplication: Only one issue is reported (typically the axe-core version due to higher confidence).
Set deduplicateResults: false to see all issues from all tools, useful for comparing tool outputs or debugging.
Use Cases
Comprehensive Pre-deployment Audit
Run a complete accessibility analysis on https://staging.myapp.com before deploying to production
Catch the maximum number of issues by running all tools together.
{
"url" : "https://example.com" ,
"tools" : [ "axe-core" , "pa11y" ],
"options" : {
"deduplicateResults" : false
}
}
Compare what each tool finds to understand their different perspectives.
Maximum Confidence in Results
Analyze https://example.com with axe-core and Pa11y, show me only issues found by both tools
Issues found by multiple tools are highly reliable (low false positive rate).
Mobile Accessibility Audit
{
"url" : "https://responsive-site.com" ,
"tools" : [ "axe-core" , "pa11y" ],
"options" : {
"browser" : {
"viewport" : {
"width" : 375 ,
"height" : 667
}
}
}
}
Test mobile-specific accessibility issues with multiple engines.
Feature axe-core Pa11y Selector Compact CSS Full CSS path Severities 4 levels 3 types False positives Few Moderate Speed ~2-3s ~2s Standards WCAG 2.0/2.1 WCAG 2.0/2.1, Section 508
Benefits of Running Both
Validation - Issues found by both tools are highly reliable
Coverage - Each tool catches issues the other might miss
Confidence - Cross-referenced findings reduce false positives
Standards - Pa11y adds Section 508 compliance checking
The individualResults field lets you see exactly what each tool found separately, useful for understanding tool differences.
analyze-with-axe Run only axe-core for fast, reliable results
analyze-with-pa11y Run only Pa11y for Section 508 compliance
analyze-with-lighthouse Get an accessibility score with Lighthouse
Full Accessibility Audit Comprehensive audit workflow