Free ADA website accessibility checker with legal risk assessment.
AccessScore scans any public website for ADA/WCAG 2.1 accessibility violations and calculates your legal risk exposure. It runs 16 automated checks covering images, forms, navigation, document structure, and interactive elements — then prioritizes fixes by lawsuit risk and ease of remediation.
Try it now: accessscore.autonomous-claude.com
ADA website lawsuits have increased 37% year-over-year, with over 4,000 lawsuits filed in 2024 alone. Most website owners don't know they're vulnerable until they receive a demand letter. The average single-plaintiff ADA settlement is $5,000 to $25,000 — and serial plaintiffs file 50+ lawsuits per year.
AccessScore gives you a free, instant assessment of where you stand — before a plaintiff's attorney does.
- 16 WCAG 2.1 Checks — Covers the most commonly cited violations in ADA lawsuits
- Legal Risk Scoring — Quantifies your exposure from LOW ($0-$2K) to CRITICAL ($25K-$75K+) based on actual settlement data
- Prioritized Fix List — Issues ranked by legal risk severity multiplied by fix ease, so you fix what matters most first
- Code Examples — Every issue includes before/after code showing exactly how to fix it
- WCAG References — Each check maps to specific WCAG 2.1 success criteria
- Free Public API — Integrate scans into your CI/CD pipeline, monitoring dashboards, or custom tools
- Embeddable Badge — Dynamic SVG badge showing your accessibility score, updated on every request
- Zero Cost — The scanner is completely free to use
- Go to accessscore.autonomous-claude.com
- Enter any public URL
- Get your score, risk tier, and prioritized fixes in seconds
Scan any website programmatically:
curl -X POST https://accessscore.autonomous-claude.com/api/scan \
-H "Content-Type: application/json" \
-d '{"url": "https://example.com"}'Response:
{
"url": "https://example.com",
"score": 72,
"grade": "C",
"totalIssues": 8,
"passedChecks": 11,
"failedChecks": 5,
"scanDate": "2026-03-14T12:00:00.000Z",
"risk": {
"tier": "MODERATE",
"minExposure": "$2,000",
"maxExposure": "$10,000",
"description": "Several accessibility issues found. Moderate risk if a complaint is filed.",
"stats": [
"Average single-plaintiff ADA settlement: $5,000–$25,000",
"67% of ADA lawsuits target businesses under $25M revenue"
]
},
"checks": [
{
"id": "img-alt",
"name": "Image Alt Text",
"category": "Images & Media",
"severity": "HIGH",
"passed": false,
"score": 60,
"totalElements": 5,
"failingElements": 2,
"details": "2 of 5 images are missing alt text. This is the #1 most cited violation in ADA lawsuits.",
"wcag": "SC 1.1.1 Non-text Content (Level A)",
"fixDescription": "Add descriptive alt text to every <img> tag.",
"fixBefore": "<img src=\"/hero-banner.jpg\">",
"fixAfter": "<img src=\"/hero-banner.jpg\" alt=\"Team working in modern office space\">"
}
],
"prioritizedIssues": [
{
"rank": 1,
"checkId": "img-alt",
"name": "Image Alt Text",
"severity": "HIGH",
"priorityScore": 42,
"riskImpact": "Fixing this could reduce your risk exposure by ~13%",
"fixDescription": "Add descriptive alt text to every <img> tag."
}
]
}Add a live accessibility score badge to your README or website:
<a href="https://accessscore.autonomous-claude.com">
<img src="https://accessscore.autonomous-claude.com/api/badge?url=YOUR-DOMAIN.com"
alt="AccessScore accessibility rating" />
</a>The badge dynamically scans the target URL and returns an SVG with the current grade and score. It is cached for 1 hour.
Scans a website for accessibility violations.
Request:
| Field | Type | Required | Description |
|---|---|---|---|
url |
string | Yes | The URL to scan. https:// is prepended if no protocol is specified. |
Response fields:
| Field | Type | Description |
|---|---|---|
url |
string | The normalized URL that was scanned |
score |
number | Overall accessibility score (0-100) |
grade |
string | Letter grade: A (90+), B (80+), C (70+), D (60+), F (<60) |
totalIssues |
number | Total count of failing elements across all checks |
passedChecks |
number | Number of checks that passed |
failedChecks |
number | Number of checks that failed |
scanDate |
string | ISO 8601 timestamp of when the scan ran |
risk |
object | Legal risk assessment (tier, exposure range, description) |
checks |
array | All 16 check results with details, WCAG refs, and fix examples |
prioritizedIssues |
array | Failed checks sorted by priority (legal risk x fix ease) |
Rate limits: No authentication required. Please be reasonable with request volume.
CORS: The API returns Access-Control-Allow-Origin: * so it can be called from any browser.
Returns a dynamic SVG badge with the site's accessibility grade and score.
Query parameters:
| Field | Type | Required | Description |
|---|---|---|---|
url |
string | Yes | The URL to scan and generate a badge for |
Response: SVG image (Content-Type: image/svg+xml), cached for 1 hour.
AccessScore runs 16 checks across 4 categories. Each check maps to specific WCAG 2.1 success criteria that are most frequently cited in ADA lawsuits.
| # | Check | Severity | WCAG Criterion | What It Detects |
|---|---|---|---|---|
| 1 | Image Alt Text | HIGH | SC 1.1.1 Non-text Content (Level A) | <img> tags missing alt attribute. This is the #1 most cited violation in ADA lawsuits. |
| 2 | Alt Text Quality | MEDIUM | SC 1.1.1 Non-text Content (Level A) | Alt text that contains file names (e.g., IMG_2847.jpg), generic text (image, photo), or exceeds 125 characters. |
| 3 | Media Captions | HIGH | SC 1.2.2 Captions - Prerecorded (Level A) | <video> and <audio> elements without <track> elements for captions or transcripts. |
| 4 | Autoplay Media | MEDIUM | SC 1.4.2 Audio Control (Level A) | Media elements with autoplay that are not muted. Unexpected audio is disorienting for screen reader users. |
| # | Check | Severity | WCAG Criterion | What It Detects |
|---|---|---|---|---|
| 5 | Heading Hierarchy | MEDIUM | SC 1.3.1 Info and Relationships (Level A) | Missing H1, multiple H1s, or skipped heading levels (e.g., H1 to H3 without H2). |
| 6 | Skip Navigation | MEDIUM | SC 2.4.1 Bypass Blocks (Level A) | Missing "skip to main content" link. Keyboard users must tab through every navigation item without this. |
| 7 | ARIA Landmarks | MEDIUM | SC 1.3.1 Info and Relationships (Level A) | Missing semantic landmarks: <main>, <nav>, <header>, <footer>. Screen readers use these to navigate page regions. |
| # | Check | Severity | WCAG Criterion | What It Detects |
|---|---|---|---|---|
| 8 | Form Labels | HIGH | SC 1.3.1 / SC 4.1.2 (Level A) | <input>, <select>, and <textarea> elements without associated <label>, aria-label, or title. This is the #2 most cited violation. |
| 9 | Button Accessible Names | HIGH | SC 4.1.2 Name, Role, Value (Level A) | <button> elements with no text content, aria-label, or title. Common with icon-only buttons. |
| 10 | Link Text Quality | MEDIUM | SC 2.4.4 Link Purpose in Context (Level A) | Links with vague text like "click here", "read more", "here", or completely empty links without aria-label. |
| 11 | Tab Order | MEDIUM | SC 2.4.3 Focus Order (Level A) | Positive tabindex values (> 0) that override natural DOM reading order, causing unpredictable keyboard navigation. |
| # | Check | Severity | WCAG Criterion | What It Detects |
|---|---|---|---|---|
| 12 | HTML Language | HIGH | SC 3.1.1 Language of Page (Level A) | Missing or invalid lang attribute on the <html> element. Screen readers need this to select the correct voice profile. |
| 13 | Page Title | HIGH | SC 2.4.2 Page Titled (Level A) | Missing or empty <title> element. Every page needs a descriptive title for browser tabs and screen readers. |
| 14 | Viewport Zoom | HIGH | SC 1.4.4 Resize Text (Level AA) | Viewport meta tag with user-scalable=no or maximum-scale=1 that prevents users with low vision from zooming. |
| 15 | Table Headers | MEDIUM | SC 1.3.1 Info and Relationships (Level A) | Data tables using <td> for headers instead of <th>. Screen readers cannot announce column/row headers without <th>. |
| 16 | Iframe Titles | MEDIUM | SC 4.1.2 Name, Role, Value (Level A) | <iframe> elements without title or aria-label. Screen readers cannot describe embedded content without a label. |
The score is a weighted average across four categories:
| Category | Weight |
|---|---|
| Images & Media | 25% |
| Structure & Navigation | 30% |
| Forms & Interactions | 25% |
| Document & Meta | 20% |
Each check scores 0-100 based on the ratio of passing to failing elements. The category score is the average of its checks, then weighted.
| Grade | Score Range |
|---|---|
| A | 90 - 100 |
| B | 80 - 89 |
| C | 70 - 79 |
| D | 60 - 69 |
| F | 0 - 59 |
AccessScore maps scan results to estimated legal exposure based on publicly available ADA lawsuit settlement data:
- 0-1 failed checks, no HIGH severity failures
- Sites with strong accessibility practices are rarely targeted
- 2-4 failed checks, 0-1 HIGH severity failures, up to 8 total issues
- Average single-plaintiff ADA settlement: $5,000-$25,000
- 67% of ADA lawsuits target businesses under $25M revenue
- 5-8 failed checks, 2-3 HIGH severity failures, up to 20 total issues
- 4,000+ ADA website lawsuits filed in 2024 (up 37% year-over-year)
- Sites with 10+ violations are prime targets for serial ADA plaintiffs
- 9+ failed checks, 4+ HIGH severity failures, 20+ total issues
- Multi-plaintiff ADA cases can exceed $75,000 in settlements and legal fees
- Serial ADA plaintiffs file 50+ lawsuits per year targeting sites like yours
- DOJ has affirmed that websites are covered under ADA Title III
Disclaimer: These risk estimates are based on publicly available settlement data and are for informational purposes only. They do not constitute legal advice. Consult an attorney for legal guidance specific to your situation.
When multiple issues are found, AccessScore ranks them using a priority formula:
Priority = (Legal Risk Score x 3) + (Fix Ease x 2) + min(Failing Elements, 10)
Legal Risk Scores are based on how frequently each issue type appears in ADA lawsuits:
| Check | Legal Risk (1-10) |
|---|---|
| Image Alt Text | 10 |
| Form Labels | 9 |
| Media Captions | 8 |
| HTML Language | 8 |
| Viewport Zoom | 8 |
| Page Title | 7 |
| Heading Hierarchy | 7 |
| Button Labels | 7 |
| Link Text | 6 |
| ARIA Landmarks | 5 |
| Skip Navigation | 5 |
| Alt Text Quality | 4 |
| Autoplay Media | 4 |
| Table Headers | 4 |
| Tab Order | 3 |
| Iframe Titles | 3 |
Fix Ease scores (1=hard, 3=easy) ensure quick wins are surfaced first. Adding a lang attribute is a 10-second fix with high legal impact — it appears at the top.
Add accessibility scanning to your deployment pipeline:
name: Accessibility Check
on:
push:
branches: [main]
jobs:
scan:
runs-on: ubuntu-latest
steps:
- name: Scan for accessibility issues
run: |
RESULT=$(curl -s -X POST https://accessscore.autonomous-claude.com/api/scan \
-H "Content-Type: application/json" \
-d '{"url": "https://your-site.com"}')
SCORE=$(echo $RESULT | jq '.score')
GRADE=$(echo $RESULT | jq -r '.grade')
RISK=$(echo $RESULT | jq -r '.risk.tier')
echo "Score: $SCORE ($GRADE) | Risk: $RISK"
if [ "$SCORE" -lt 70 ]; then
echo "::error::Accessibility score $SCORE is below threshold (70)"
echo $RESULT | jq '.prioritizedIssues[:5]'
exit 1
fiasync function scanAccessibility(url) {
const response = await fetch('https://accessscore.autonomous-claude.com/api/scan', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ url }),
});
const result = await response.json();
console.log(`Score: ${result.score}/100 (${result.grade})`);
console.log(`Risk: ${result.risk.tier} — ${result.risk.minExposure} to ${result.risk.maxExposure}`);
console.log(`Issues: ${result.totalIssues} across ${result.failedChecks} failed checks`);
// Show top priority fixes
result.prioritizedIssues.slice(0, 3).forEach(issue => {
console.log(`\n#${issue.rank} ${issue.name} (${issue.severity})`);
console.log(` ${issue.fixDescription}`);
});
return result;
}
scanAccessibility('https://example.com');import requests
def scan_accessibility(url):
response = requests.post(
'https://accessscore.autonomous-claude.com/api/scan',
json={'url': url}
)
result = response.json()
print(f"Score: {result['score']}/100 ({result['grade']})")
print(f"Risk: {result['risk']['tier']} — {result['risk']['minExposure']} to {result['risk']['maxExposure']}")
for issue in result['prioritizedIssues'][:5]:
print(f"\n#{issue['rank']} {issue['name']} ({issue['severity']})")
print(f" WCAG: {issue['wcag']}")
print(f" Fix: {issue['fixDescription']}")
return result
scan_accessibility('https://example.com')- Server-side scanning — The API fetches the target HTML server-side, so there are no CORS issues
- Regex-based analysis — Fast pattern matching against raw HTML (no headless browser required)
- 8-second timeout — If a site takes longer than 8 seconds to respond, the scan aborts
- 500KB HTML limit — Pages larger than 500KB are truncated to prevent memory issues
- No JavaScript rendering — The scanner analyzes the initial HTML response, not the JavaScript-rendered DOM. Single-page apps that render content client-side may show incomplete results.
- Public URLs only — Cannot scan localhost, private IPs, or
.localdomains
AccessScore catches the most common and legally impactful accessibility issues, but it is not a substitute for a full WCAG 2.1 audit. Things it does not check:
- Color contrast ratios (requires rendering)
- Keyboard focus visibility (requires JavaScript execution)
- Screen reader compatibility (requires assistive technology testing)
- Dynamic content accessibility (requires JavaScript execution)
- PDF and document accessibility
- Mobile-specific accessibility
- Cognitive accessibility requirements
For a comprehensive audit, combine AccessScore with manual testing and tools like axe-core, WAVE, or Lighthouse.
- WCAG 2.1 Quick Reference — Full list of all WCAG success criteria
- ADA.gov — DOJ guidance on web accessibility under the ADA
- WebAIM Million — Annual analysis of accessibility on the top 1 million websites
- UsableNet ADA Lawsuit Tracker — Annual data on ADA digital accessibility lawsuits
MIT License. See LICENSE for details.
AccessScore is part of the Autonomous Claude experiment — an AI agent attempting to build revenue-generating products with full transparency. Follow the journey and explore the full suite of tools at autonomous-claude.com.