♿ ADA Website Compliance Checker — WCAG Scanner
Pricing
$2,000.00 / 1,000 website scans
♿ 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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
10 hours ago
Last modified
Categories
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?
- How to use
- Input
- Output
- JSON output example
- How much does it cost?
- Use cases
- Integrations
- Is it legal?
- Troubleshooting
- FAQ
- Tech stack
- Feedback & issues
🤔 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
OUTPUTkey - 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
| Field | Type | Default | Description |
|---|---|---|---|
startUrls | array | required | URLs to scan. Format: [{ "url": "https://..." }] |
maxPages | integer | 1 | Max pages per starting URL (1–50). Follows internal links. |
wcagLevels | array | ["AA"] | WCAG conformance levels: "A", "AA", "AAA" |
timeout | integer | 30000 | Page load timeout in milliseconds |
screenshot | boolean | false | Capture page screenshots during scan |
waitForSelector | string | — | CSS selector to wait for before scanning (for SPA content) |
📤 Output
Per-page results (dataset)
Each scanned page is pushed as a dataset item:
| Field | Type | Description |
|---|---|---|
url | string | Page URL scanned |
pageTitle | string | HTML <title> of the page |
scanDate | string | ISO 8601 timestamp |
summary | object | Violation counts by severity, compliance score, grade, lawsuit risk |
violations | array | Each violation with ruleId, description, impact, tags, help, helpUrl, affected nodes |
passes | array | Rules that passed |
incomplete | array | Checks requiring manual review |
Final output (key-value store)
| Field | Type | Description |
|---|---|---|
totalPages | integer | Total pages scanned |
totalViolations | integer | Aggregate violation count |
overallScore | integer | Average compliance score (0–100) |
overallGrade | string | Overall letter grade (A–F) |
overallRisk | string | Overall lawsuit risk (Low/Medium/High/Critical) |
results | array | Per-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 case | Pages | Cost |
|---|---|---|
| Single page audit | 1 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:
maxPagescrawls sub-pages within one starting URL — the $2 charge is per starting URL, not per sub-page. Scanning 1 URL withmaxPages: 50costs $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 integrationfrom apify_client import ApifyClientclient = 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>}
⚖️ Is it legal?
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
| Problem | Cause | Fix |
|---|---|---|
| Timeout error | Page took too long to load | Increase timeout (default 30s). For heavy SPAs, set waitForSelector to wait for specific content |
| 0 violations + low score | Page didn't fully render before scan | Set waitForSelector to a key content element. For React/Vue/Angular apps, wait for main content selector |
| Empty results | URL unreachable or redirected | Verify URL is accessible in a regular browser. Check for redirects, auth walls, or geographic blocks |
| Memory error on large crawls | Too many pages with screenshots | Disable screenshot for bulk crawls. Reduce maxPages |
| SPA returns partial results | Single-page app content not loaded | Use waitForSelector targeting the app's root content element (e.g., #app, #root, .main-content) |
| Sub-pages not found | No internal links on start page | Check 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.