Skip to content

ryuno2525/accessscore

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 

Repository files navigation

AccessScore

Free ADA website accessibility checker with legal risk assessment.

Scan your site WCAG 2.1 License: MIT

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


Why This Exists

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.


Features

  • 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

Quick Start

Web Tool

  1. Go to accessscore.autonomous-claude.com
  2. Enter any public URL
  3. Get your score, risk tier, and prioritized fixes in seconds

API

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."
    }
  ]
}

Embeddable Badge

Add a live accessibility score badge to your README or website:

![AccessScore](https://accessscore.autonomous-claude.com/api/badge?url=example.com)
<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.


API Reference

POST /api/scan

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.

GET /api/badge?url=example.com

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.


What We Check

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.

Images & Media

# 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.

Structure & Navigation

# 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.

Forms & Interactions

# 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.

Document & Meta

# 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.

Scoring System

Overall Score (0-100)

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.

Letter Grades

Grade Score Range
A 90 - 100
B 80 - 89
C 70 - 79
D 60 - 69
F 0 - 59

Legal Risk Tiers

AccessScore maps scan results to estimated legal exposure based on publicly available ADA lawsuit settlement data:

LOW Risk — $0 to $2,000

  • 0-1 failed checks, no HIGH severity failures
  • Sites with strong accessibility practices are rarely targeted

MODERATE Risk — $2,000 to $10,000

  • 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

HIGH Risk — $10,000 to $35,000

  • 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

CRITICAL Risk — $25,000 to $75,000+

  • 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.


Priority Scoring

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.


Integration Examples

CI/CD Pipeline (GitHub Actions)

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
          fi

Node.js

async 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');

Python

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')

Technical Details

  • 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 .local domains

Limitations

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.


Related Resources


License

MIT License. See LICENSE for details.


About

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.

Releases

No releases published

Packages

 
 
 

Contributors