♿ ADA Website Compliance Checker — WCAG Scanner avatar

♿ ADA Website Compliance Checker — WCAG Scanner

Pricing

$2,000.00 / 1,000 website scans

Go to Apify Store
♿ ADA Website Compliance Checker — WCAG Scanner

♿ ADA Website Compliance Checker — WCAG Scanner

Check any website for ADA/WCAG violations in seconds. 90+ axe-core rules, compliance score, lawsuit risk, element-level details. Bulk scan hundreds of sites. $2/scan, no subscription.

Pricing

$2,000.00 / 1,000 website scans

Rating

0.0

(0)

Developer

Alexander Maksimchuk

Alexander Maksimchuk

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

10 hours ago

Last modified

Share

♿ ADA Website Compliance Checker

Scan any website for ADA/WCAG accessibility violations in seconds. Get every violation with severity, element-level details, fix recommendations, and a compliance score — all powered by axe-core (Deque's industry-standard engine, 90+ rules).

📋 Table of Contents

🤔 What is this?

ADA Website Compliance Checker is an Apify Actor that automatically tests websites against WCAG 2.1 accessibility standards. It detects violations (missing alt text, poor color contrast, keyboard navigation issues, ARIA errors, etc.) using axe-core — the same engine trusted by Microsoft, Google, and Deque. You get a structured compliance report with severity levels, CSS selectors for every broken element, and direct links to remediation guides.

Perfect for: agencies auditing client sites, developers pre-checking before launch, legal teams assessing lawsuit risk, and anyone who needs ADA compliance verification at scale.

🚀 How to use

Step 1: Add your URLs

In the Apify Console, enter one or more starting URLs you want to scan. You can scan a single page or enable multi-page crawling.

Step 2: Configure options (optional)

  • Max pages — How many pages to crawl per starting URL (default: 1, max: 50)
  • WCAG levels — Which conformance levels to test (A, AA, AAA)
  • Screenshot — Capture page screenshots during scan
  • Wait for selector — CSS selector to wait for before scanning (for SPAs)

Step 3: Run the Actor

Click Start. The Actor launches a headless Chromium browser, loads each page, runs axe-core, and pushes results to the dataset.

Step 4: Export results

  • Dataset — Download as JSON, CSV, Excel, or XML from the Output tab
  • Key-value store — Final aggregated output in OUTPUT key
  • Screenshots — If enabled, saved as PNG files in key-value store

Quick start (API)

{
"startUrls": [
{ "url": "https://example.com" },
{ "url": "https://yoursite.com/pricing" }
],
"maxPages": 5,
"screenshot": false
}

📥 Input

FieldTypeDefaultDescription
startUrlsarrayrequiredURLs to scan. Format: [{ "url": "https://..." }]
maxPagesinteger1Max pages per starting URL (1–50). Follows internal links.
wcagLevelsarray["AA"]WCAG conformance levels: "A", "AA", "AAA"
timeoutinteger30000Page load timeout in milliseconds
screenshotbooleanfalseCapture page screenshots during scan
waitForSelectorstringCSS selector to wait for before scanning (for SPA content)

📤 Output

Per-page results (dataset)

Each scanned page is pushed as a dataset item:

FieldTypeDescription
urlstringPage URL scanned
pageTitlestringHTML <title> of the page
scanDatestringISO 8601 timestamp
summaryobjectViolation counts by severity, compliance score, grade, lawsuit risk
violationsarrayEach violation with ruleId, description, impact, tags, help, helpUrl, affected nodes
passesarrayRules that passed
incompletearrayChecks requiring manual review

Final output (key-value store)

FieldTypeDescription
totalPagesintegerTotal pages scanned
totalViolationsintegerAggregate violation count
overallScoreintegerAverage compliance score (0–100)
overallGradestringOverall letter grade (A–F)
overallRiskstringOverall lawsuit risk (Low/Medium/High/Critical)
resultsarrayPer-page results

📄 JSON output example

Here's real output from scanning example.com:

{
"url": "https://example.com",
"pageTitle": "Example Domain",
"scanDate": "2026-07-04T02:15:33.841Z",
"summary": {
"totalViolations": 0,
"critical": 0,
"serious": 0,
"moderate": 0,
"minor": 0,
"passes": 12,
"incomplete": 0,
"complianceScore": 100,
"grade": "A",
"lawsuitRisk": "Low"
},
"violations": [],
"passes": [
{ "ruleId": "color-contrast", "description": "Ensures the contrast between foreground and background colors meets WCAG 2 AA contrast ratio thresholds" },
{ "ruleId": "image-alt", "description": "Ensures <img> elements have alternate text or a role of none or presentation" }
],
"incomplete": []
}

And here's output from a site with violations (redacted for brevity):

{
"url": "https://example-broken-site.com",
"pageTitle": "ACME Corp — Home",
"scanDate": "2026-07-04T02:20:15.123Z",
"summary": {
"totalViolations": 4,
"critical": 1,
"serious": 2,
"moderate": 1,
"minor": 0,
"passes": 8,
"incomplete": 2,
"complianceScore": 62,
"grade": "D",
"lawsuitRisk": "High"
},
"violations": [
{
"ruleId": "html-has-lang",
"description": "Ensures every HTML document has a lang attribute",
"impact": "serious",
"tags": ["cat.language", "wcag2a", "wcag311", "ACT", "TTv5", "TT6.a"],
"help": "The <html> element must have a lang attribute",
"helpUrl": "https://dequeuniversity.com/rules/axe/html-has-lang",
"nodes": [
{
"target": ["html"],
"html": "<html>",
"failureSummary": "Fix any of the following:\n The <html> element does not have a lang attribute"
}
]
},
{
"ruleId": "image-alt",
"description": "Ensures <img> elements have alternate text or a role of none or presentation",
"impact": "critical",
"tags": ["cat.text-alternatives", "wcag2a", "wcag111", "section508", "section508.22.a", "TTv5", "TT7.a"],
"help": "Images must have alternate text",
"helpUrl": "https://dequeuniversity.com/rules/axe/image-alt",
"nodes": [
{
"target": ["img.hero-logo"],
"html": "<img src=\"/logo.png\" class=\"hero-logo\">",
"failureSummary": "Fix any of the following:\n Element does not have an alt attribute"
}
]
},
{
"ruleId": "color-contrast",
"description": "Ensures the contrast between foreground and background colors meets WCAG 2 AA contrast ratio thresholds",
"impact": "serious",
"tags": ["cat.color", "wcag2aa", "wcag143", "ACT", "TTv5", "TT8.c"],
"help": "Elements must meet minimum color contrast ratio thresholds",
"helpUrl": "https://dequeuniversity.com/rules/axe/color-contrast",
"nodes": [
{
"target": [".cta-button"],
"html": "<a href=\"/contact\" class=\"cta-button\">Contact Us</a>",
"failureSummary": "Fix any of the following:\n Element has insufficient color contrast of 2.8:1 (foreground: #999999, background: #f5f5f5, font-size: 14pt, font-weight: normal). Expected contrast ratio of 4.5:1"
}
]
},
{
"ruleId": "label",
"description": "Ensures every form element has a label",
"impact": "moderate",
"tags": ["cat.forms", "wcag2a", "wcag332", "wcag412", "section508", "section508.22.n", "ACT", "TTv5", "TT5.c"],
"help": "Form elements must have labels",
"helpUrl": "https://dequeuniversity.com/rules/axe/label",
"nodes": [
{
"target": ["#newsletter-email"],
"html": "<input type=\"email\" id=\"newsletter-email\" placeholder=\"Email\">",
"failureSummary": "Fix any of the following:\n Form element does not have an explicit label\n Form element does not have an implicit label"
}
]
}
]
}

💰 How much does it cost?

$2 per website scan. No subscription, no monthly fees. Pay only when results are returned.

Cost examples

Use casePagesCost
Single page audit1 page$2
Full website scan (10 pages)10 pages$2 (counted as 1 starting URL, 10 sub-pages crawled)
Agency portfolio check (5 clients × 1 page)5 URLs$10
Bulk compliance audit (50 URLs)50 URLs$100
Monthly monitoring (1 site × 12 months)12 scans$24/year

Note: maxPages crawls sub-pages within one starting URL — the $2 charge is per starting URL, not per sub-page. Scanning 1 URL with maxPages: 50 costs $2, not $100.

🎯 Use cases

  • ADA compliance audits — Scan client websites before/after remediation to measure improvement
  • Lead generation — Scan prospects' sites, identify violations, pitch remediation services
  • Pre-launch checks — Catch accessibility issues before deploying to production
  • Risk assessment — Evaluate lawsuit exposure before demand letters arrive
  • Ongoing monitoring — Schedule recurring runs to catch accessibility regressions
  • Agency bulk checks — Scan portfolios of 50+ client sites in one run
  • Legal compliance — Document WCAG conformance efforts for ADA, Section 508, EAA compliance

🔗 Integrations

AI agents (MCP)

This Actor works with the Apify MCP server (https://mcp.apify.com). AI agents like Claude, ChatGPT, and LlamaIndex can discover, configure, and run this Actor autonomously.

# LangChain + Apify integration
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("upstanding_biobot/ada-wcag-compliance-scan").call(run_input={
"startUrls": [{"url": "https://example.com"}]
})
dataset = client.dataset(run["defaultDatasetId"]).list_items()

Automation platforms

  • Zapier — Trigger on new scan results → send to Google Sheets, Slack, email
  • Make (Integromat) — Chain with other Apify Actors for full SEO audit pipelines
  • n8n — Self-hosted automation workflows
  • Custom webhooks — Use Apify webhooks to trigger downstream processing on completion

Chain with remediation report

Feed scan results directly into our companion Actor — ADA Website Fix-It Report — to generate developer-ready remediation reports with code snippets, cost estimates, and fix timelines.

// Scanner output → Report Actor input
{
"scanResult": <scanner_dataset_items>
}

Yes. This Actor performs automated accessibility scans using axe-core, an open-source testing engine developed by Deque Systems — the same tool used by accessibility auditors and compliance consultants worldwide.

  • What it does: Loads public web pages in a browser, runs axe-core WCAG rules, reports violations
  • What it doesn't do: It does not modify, hack, or breach any website. It simply visits public pages and tests them
  • ADA / WCAG context: Automated accessibility testing is a recognized best practice for WCAG conformance. The Web Content Accessibility Guidelines (WCAG) are the global standard referenced in ADA compliance litigation
  • Not legal advice: Automated testing detects ~30-40% of WCAG violations. Manual testing is recommended for full compliance audits. This tool does not constitute legal advice or guarantee legal compliance

🔧 Troubleshooting

ProblemCauseFix
Timeout errorPage took too long to loadIncrease timeout (default 30s). For heavy SPAs, set waitForSelector to wait for specific content
0 violations + low scorePage didn't fully render before scanSet waitForSelector to a key content element. For React/Vue/Angular apps, wait for main content selector
Empty resultsURL unreachable or redirectedVerify URL is accessible in a regular browser. Check for redirects, auth walls, or geographic blocks
Memory error on large crawlsToo many pages with screenshotsDisable screenshot for bulk crawls. Reduce maxPages
SPA returns partial resultsSingle-page app content not loadedUse waitForSelector targeting the app's root content element (e.g., #app, #root, .main-content)
Sub-pages not foundNo internal links on start pageCheck that the starting URL has <a href> links to sub-pages. JavaScript-rendered nav may need waitForSelector

❓ FAQ

🛠️ Tech stack

  • axe-core — Deque's WCAG testing engine (90+ rules, industry standard)
  • Playwright — Headless Chromium browser automation
  • TypeScript — Type-safe Actor code
  • Apify SDK — Platform integration, dataset, key-value store

💬 Feedback & issues

Found a bug? Have a feature request? Want a custom integration?

  • Apify Console — Use the Issues tab on this Actor's page
  • Review — Leave a rating/review on the Actor's Store page
  • Direct — We monitor all feedback through the Apify platform

This Actor is not affiliated with Deque Systems. axe-core is an open-source project licensed under MPL 2.0.