Website Accessibility Checker avatar

Website Accessibility Checker

Pricing

$3.00 / 1,000 page auditeds

Go to Apify Store
Website Accessibility Checker

Website Accessibility Checker

Crawl any website for WCAG accessibility problems and get a page-by-page fix list: images with no alt text, form fields with no label, links and buttons with no accessible name, skipped heading levels, untitled iframes and missing page language. Each issue names its WCAG criterion.

Pricing

$3.00 / 1,000 page auditeds

Rating

0.0

(0)

Developer

Peach O

Peach O

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Website Accessibility Checker: The WCAG Fix List for Any Site

Crawl a site and get a page-by-page list of accessibility barriers: images with no alt attribute, form fields with no label, links and buttons a screen reader cannot announce, skipped heading levels, untitled iframes and missing page language. Every issue names the WCAG criterion it fails.

Built for teams facing the European Accessibility Act, ADA complaints, or a procurement questionnaire asking for a VPAT.

How it works

flowchart LR
A["Your website"] --> B["Crawl pages"]
B --> C["Extract the facts:<br/>images, fields, links,<br/>headings, landmarks"]
C --> D["Apply WCAG rules"]
D --> E[("Fix list,<br/>worst pages first")]

It tells you what it cannot check

This is the part most tools skip. A static checker reads the HTML your server sends, which decides many WCAG criteria and cannot decide others. Every run states this plainly in its summary:

  • Colour contrast (1.4.3) needs computed styles from a rendered page
  • Keyboard operability and focus order (2.1.1, 2.4.3) need real interaction
  • Whether alt text is meaningful (1.1.1) needs a human; only its presence is checked
  • Captions and audio description (1.2.x) need the media itself

So "0 issues" here means "no issues this method can detect", not "this site is accessible". Anyone selling you the second thing from a crawler is overselling.

What it checks

SeverityIssueWCAG
CriticalImage with no alt attribute1.1.1
CriticalForm field with no label3.3.2
CriticalLink with no announceable text2.4.4
CriticalButton with no accessible name4.1.2
CriticalPage with no title · no lang2.4.2, 3.1.1
SeriousIframe with no title · data table with no headers4.1.2, 1.3.1
SeriousPositive tabindex · autoplaying media2.4.3, 1.4.2
ModerateSkipped heading level · vague link text · no main · no skip link1.3.1, 2.4.4, 2.4.1

alt="" is not an error. An empty alt is the correct way to mark a decorative image, so only a genuinely missing attribute counts. On one real site that distinction was the difference between 104 reported problems and zero actual ones.

Built for

  • Anyone in scope of the European Accessibility Act, in force since June 2025
  • US organisations managing ADA exposure across a large site
  • Agencies auditing a client site before a build or a handover
  • Developers who want the specific elements to fix, not a score

Input

{
"startUrls": ["example.com"],
"maxPages": 100,
"minSeverity": "serious"
}
SettingWhat it does
startUrlsThe site to check
maxPagesHow many pages to crawl. This is what the run is charged on
minSeverityReport only serious and critical issues, or only critical
onlyPagesWithIssuesLeave clean pages out of the output
excludePatternsSkip areas like /admin

Output

{
"url": "https://example.com/contact",
"title": "Contact us",
"lang": "en",
"imageCount": 8,
"formFieldCount": 5,
"issueCount": 3,
"criticalCount": 2,
"affectedElements": 11,
"wcagCriteria": ["3.3.2", "2.4.4", "1.3.1"],
"issueCodes": ["input-label-missing", "link-name-missing", "heading-level-skipped"],
"issues": [
{
"code": "input-label-missing",
"severity": "critical",
"wcag": "3.3.2",
"count": 4,
"message": "4 form fields have no label, aria-label or aria-labelledby."
}
],
"auditedAt": "2026-09-17T18:02:41.550Z"
}

affectedElements is the number worth prioritising on: one issue on one page can cover eleven broken elements. The run summary ranks pages by that, not by issue count.

Run it as an API

curl -X POST "https://api.apify.com/v2/acts/arched_friend~accessibility-checker/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"startUrls": ["example.com"],
"maxPages": 100,
"minSeverity": "critical"
}'

Pricing

You pay $0.003 for each page checked. Every rule on that page is included.

Auditing a 500-page site monthlyMonthly cost
A manual accessibility audit£3,000 to £15,000 one-off
Accessibility monitoring suites$99 to $500 per month
This Actor$1.50 per run

Common questions

Does this make my site legally compliant? No, and be wary of anything that claims to. It finds the machine-detectable barriers quickly and cheaply, which is the right first pass before a manual audit — not a replacement for one.

Why is a link flagged when it clearly has text? Check whether the text is "click here" or "read more". Screen-reader users often navigate by pulling up a list of links with no surrounding context, so a page of "read more" links is a page of unlabelled links.

Does it render JavaScript? No. It checks the HTML your server sends. If your content only exists after hydration, this checks what arrives first — which is also what a search engine and a slow connection see.

Why no colour contrast? Because it cannot be done honestly from static HTML, and reporting it from inline styles alone would miss almost everything real. It is listed as not-checked rather than silently omitted.

  • SEO Meta & Content Auditor for titles, descriptions and duplicate content on the same crawl
  • Broken Link Checker for the dead links on the same pages
  • Website Change Monitor to catch it when a fixed page regresses
  • Tech Stack Checker to profile the sites you audit