# Accessibility Statement Checker (EAA / WCAG) (`mrdexter4/accessibility-statement-checker`) Actor

Find the accessibility statement on any website and check it against the EU model statement: compliance status, WCAG / EN 301 549, non-accessible content, review date, feedback contact and complaints procedure. EN, NL, DE, FR, ES, IT, PT. Pay per site.

- **URL**: https://apify.com/mrdexter4/accessibility-statement-checker.md
- **Developed by:** [Mateus Correia](https://apify.com/mrdexter4) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $14.00 / 1,000 website checkeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### What does Accessibility Statement Checker do?

**Accessibility Statement Checker** finds the **accessibility statement** on any list of websites and checks whether it covers what the **EU model accessibility statement** asks for. It's an API-friendly way to audit accessibility statements for the **European Accessibility Act (EAA)** and the **Web Accessibility Directive** in bulk.

For each website it:

1. 🔎 **Finds the statement.** It looks for footer and menu links in 10 languages ("Accessibility statement", "Toegankelijkheidsverklaring", "Erklärung zur Barrierefreiheit", "Déclaration d'accessibilité", …), follows one level of "Accessibility" hub pages, and tries common URL paths.
2. ✅ **Checks the content.** It looks for:
   - compliance status (fully / partially / not compliant)
   - the standard used (WCAG 2.1/2.2, EN 301 549)
   - a description of non-accessible content
   - the preparation or review date
   - a feedback contact (email or form)
   - a complaints or enforcement procedure
   - a reference to the EAA or national law
   - for Dutch sites, a link to the toegankelijkheidsverklaring.nl register
3. 📊 **Scores it.** You get a 0–100 score, a prioritised fix list and an optional HTML report.

### Who is it for?

- 🏢 **Web agencies:** check every client site for an EAA-ready statement before or after a redesign.
- 🛒 **E-commerce and service companies** in scope of the EAA (applies since 28 June 2025): verify that the accessibility information is published and complete.
- 🏛️ **Public sector auditors:** check large lists of government sites against the model statement.
- 🤖 **AI agents and automations:** one URL in, structured JSON out. Works with Claude, ChatGPT and other agents through the Apify MCP server, and with Make, Zapier and n8n.

It complements the [EU Accessibility Scanner](https://apify.com/mrdexter4/eu-accessibility-scanner), which tests the pages themselves for WCAG issues. This Actor checks the **statement**; the scanner checks the **website**.

### What does it return?

| Field | Description |
|---|---|
| `statementFound`, `statementUrl`, `foundVia` | Whether a statement was found, where, and how |
| `score` | 0–100 completeness score |
| `complianceStatus` | `full`, `partial`, `non` or `unknown` |
| `standardsMentioned` | e.g. `["WCAG 2.1", "EN 301 549"]` |
| `hasNonAccessibleSection` | Describes known non-accessible content |
| `latestDateInStatement`, `monthsSinceLatestDate` | Most recent date found in the statement |
| `hasFeedbackMechanism`, `hasEnforcementInfo` | Contact option and complaints procedure present |
| `mentionsEaa`, `linksToNlRegister` | Legal framework named; Dutch register link |
| `topFixes` | Plain-language list of what to add or fix |
| `checks` | Every check with status, finding, fix and legal reference |

### How to check accessibility statements in bulk

1. Click **Try for free**.
2. Paste the websites, one per line.
3. Click **Start**. Each site usually takes 2–10 seconds.
4. Open the **Overview** table, or download `report.html` from the key-value store.

### How much does it cost?

Pay per event: you pay **per website checked** (see the Pricing tab), and platform usage is included. Websites whose homepage can't be loaded are **free**. It uses plain HTTP requests (no browser), so runs are fast and cheap.

### Output example

```json
{
  "domain": "www.example.nl",
  "statementFound": true,
  "statementUrl": "https://www.example.nl/toegankelijkheid",
  "score": 81,
  "complianceStatus": "partial",
  "standardsMentioned": ["WCAG 2.1"],
  "latestDateInStatement": "2026-03-12",
  "hasFeedbackMechanism": true,
  "hasEnforcementInfo": false,
  "topFixes": ["Explain what users can do if they are not satisfied with your response (e.g. the national enforcement body or ombudsman)."]
}
```

### FAQ

**Does a high score mean my website is accessible?** No. This Actor checks the **statement**, not the site. Use the [EU Accessibility Scanner](https://apify.com/mrdexter4/eu-accessibility-scanner) for page-level WCAG testing.

**Which elements are checked?** The elements of the EU model accessibility statement in Commission Implementing Decision (EU) 2018/1523: compliance status, non-accessible content, preparation date, feedback mechanism and enforcement procedure. Under the EAA (Directive (EU) 2019/882, Annex V), businesses have to publish information on how their service meets the accessibility requirements, and many do this with a statement modelled on the same template.

**My site uses JavaScript to render the footer.** The Actor reads server-rendered HTML. If your links only appear after JavaScript runs, it falls back to common URL paths. You can also enter the statement URL directly.

**Is it legal advice?** No. The checks are automated text analysis and are indicative only.

Questions or a false result? Open an issue on the **Issues** tab.

# Actor input Schema

## `websites` (type: `array`):

Homepage URLs or domains, one per line, e.g. example.com.

## `maxPagesPerSite` (type: `integer`):

Upper limit of candidate pages fetched while looking for the statement (the homepage is extra).

## `generateReport` (type: `boolean`):

Save a client-ready report.html to the key-value store.

## `maxConcurrency` (type: `integer`):

How many websites to check at the same time.

## `timeoutSecs` (type: `integer`):

Timeout per page request.

## Actor input object example

```json
{
  "websites": [
    "https://www.rijksoverheid.nl",
    "https://www.w3.org"
  ],
  "maxPagesPerSite": 6,
  "generateReport": true,
  "maxConcurrency": 4,
  "timeoutSecs": 20
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `checks` (type: `string`):

No description

## `report` (type: `string`):

No description

## `summary` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "websites": [
        "https://www.rijksoverheid.nl",
        "https://www.w3.org"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("mrdexter4/accessibility-statement-checker").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "websites": [
        "https://www.rijksoverheid.nl",
        "https://www.w3.org",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("mrdexter4/accessibility-statement-checker").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "websites": [
    "https://www.rijksoverheid.nl",
    "https://www.w3.org"
  ]
}' |
apify call mrdexter4/accessibility-statement-checker --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,mrdexter4/accessibility-statement-checker"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/8lstsQrwdHblDAxSS/builds/zvvoKmRfYgzFSFJRA/openapi.json
