Website Accessibility Checker
Pricing
$3.00 / 1,000 page auditeds
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
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 LRA["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
| Severity | Issue | WCAG |
|---|---|---|
| Critical | Image with no alt attribute | 1.1.1 |
| Critical | Form field with no label | 3.3.2 |
| Critical | Link with no announceable text | 2.4.4 |
| Critical | Button with no accessible name | 4.1.2 |
| Critical | Page with no title · no lang | 2.4.2, 3.1.1 |
| Serious | Iframe with no title · data table with no headers | 4.1.2, 1.3.1 |
| Serious | Positive tabindex · autoplaying media | 2.4.3, 1.4.2 |
| Moderate | Skipped heading level · vague link text · no main · no skip link | 1.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"}
| Setting | What it does |
|---|---|
startUrls | The site to check |
maxPages | How many pages to crawl. This is what the run is charged on |
minSeverity | Report only serious and critical issues, or only critical |
onlyPagesWithIssues | Leave clean pages out of the output |
excludePatterns | Skip 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 monthly | Monthly 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.
Related products
- 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