# Accessibility Statement Generator (`vizellie/accessibility-statement-generator`) Actor

Writes a ready-to-publish accessibility statement for the European Accessibility Act, in English or Dutch, as HTML, Markdown and text. One statement per run, so agencies can call it from the API or a schedule for every site they manage. $0.25 per statement. Not legal advice.

- **URL**: https://apify.com/vizellie/accessibility-statement-generator.md
- **Developed by:** [Vi Zellie](https://apify.com/vizellie) (community)
- **Categories:** Business, SEO tools, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $250.00 / 1,000 statement generateds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Accessibility Statement Generator

Built for agencies and site owners with many websites. Each run writes one ready-to-publish statement, in English or Dutch, and the same job can be scheduled or called from the API across a whole portfolio.

General information only, not legal advice.

The statement follows the European Accessibility Act, which has applied since 28 June 2025. When the country is the Netherlands, the statement also names the Implementatiewet toegankelijkheidsvoorschriften producten en diensten. EN 301 549 v3.2.1 uses WCAG 2.1 level AA. WCAG 2.2 level AA also covers the WCAG 2.1 AA criteria used by EN 301 549.

### What you get

The key-value store receives the same statement in three forms:

- `STATEMENT_HTML`
- `STATEMENT_MD`
- `STATEMENT_TXT`

When the HTML record is opened inline in the Apify console, the platform adds its own script to the page. Download it with the download link, which adds `?attachment=1`, to get the clean file.

The dataset has one row with counts and the choices you made: language, conformance, standard, how many limitations you listed, how many were skipped, how many the optional page check suggested, and whether that check ran, succeeded, or failed. It does not contain the statement text, the organisation name, or the feedback contact.

### How to use it

1. Enter the organisation or brand name and the public website URL.
2. Set the statement date as `YYYY-MM-DD`.
3. Choose full, partial, or not for conformance, and choose WCAG 2.1 AA or WCAG 2.2 AA. EN 301 549 v3.2.1 uses WCAG 2.1 level AA. WCAG 2.2 level AA also covers those criteria.
4. Add known limitations as short items: area, issue, workaround, and a planned fix date when you have one.
5. Say whether the assessment was done by you or by an external party.
6. Give a feedback contact. A contact page URL or a role mailbox such as `accessibility@example.com` is recommended.
7. Choose the enforcement country. The list is Netherlands (ACM), Belgium (FPS Economy) and Ireland (CCPC). These bodies supervise e-commerce accessibility. Another service in the same country can fall under a different authority.
8. Choose English or Dutch.
9. Leave **Check one page** off unless you want a light look at that one URL. It can suggest limitations for a missing page language, a missing title, images without alt text, form fields without a label, and heading order. It does not judge colour contrast.
10. Run the Actor and copy the statement into your site.

### Pricing

You pay a small fee when the run starts, plus a fee when a statement is saved. A run that does not produce a statement is not charged the statement fee.

| Event | Price |
| --- | --- |
| Run start | $0.00005 |
| Statement generated | $0.25 |

### What is not collected

The statement is stored only as this run's output. Logs contain the website domain and the language. They do not contain the organisation name, the limitations, or the feedback contact. The dataset row does not contain those fields either.

### Limits

One statement per run. The optional check reads one public page, follows a limited number of redirects, and stops at a size cap. Only `http` and `https` on ports 80 and 443 are accepted. Private and internal addresses are refused.

# Actor input Schema

## `organisationName` (type: `string`):

The name that should appear in the statement.

## `websiteUrl` (type: `string`):

The public website this statement is about. Use http or https.

## `statementDate` (type: `string`):

The date of the statement, as YYYY-MM-DD.

## `conformance` (type: `string`):

Whether the website fully conforms, partially conforms, or does not conform.

## `standard` (type: `string`):

EN 301 549 with WCAG 2.1 level AA, or EN 301 549 with WCAG 2.2 level AA.

## `limitations` (type: `array`):

Optional. Each item has area, issue, workaround and plannedFixDate (YYYY-MM-DD). Keep every field short.

## `assessment` (type: `string`):

Whether you assessed the website yourself or an external party did.

## `feedbackContact` (type: `string`):

A contact page URL, or a role mailbox such as accessibility@example.com. A role address or a contact page is recommended.

## `enforcementCountry` (type: `string`):

The country whose e-commerce accessibility authority is named in the statement. Netherlands, Belgium or Ireland.

## `language` (type: `string`):

Language of the statement.

## `scanUrl` (type: `boolean`):

Look at the website URL once and suggest limitations for a missing language, a missing title, images without alt text, form fields without a label, and heading order. Colour contrast is not checked.

## Actor input object example

```json
{
  "organisationName": "Example Shop",
  "websiteUrl": "https://example.com/",
  "statementDate": "2026-01-15",
  "conformance": "full",
  "standard": "wcag21aa",
  "limitations": [],
  "assessment": "self",
  "feedbackContact": "accessibility@example.com",
  "enforcementCountry": "NL",
  "language": "en",
  "scanUrl": false
}
```

# Actor output Schema

## `run` (type: `string`):

One dataset row with the run counts.

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

The OUTPUT record in the default key-value store.

## `statementHtml` (type: `string`):

The STATEMENT_HTML record in the default key-value store.

## `statementMarkdown` (type: `string`):

The STATEMENT_MD record in the default key-value store.

## `statementText` (type: `string`):

The STATEMENT_TXT record in the default key-value store.

# 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 = {
    "organisationName": "Example Shop",
    "websiteUrl": "https://example.com/",
    "statementDate": "2026-01-15",
    "conformance": "full",
    "limitations": [],
    "feedbackContact": "accessibility@example.com"
};

// Run the Actor and wait for it to finish
const run = await client.actor("vizellie/accessibility-statement-generator").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 = {
    "organisationName": "Example Shop",
    "websiteUrl": "https://example.com/",
    "statementDate": "2026-01-15",
    "conformance": "full",
    "limitations": [],
    "feedbackContact": "accessibility@example.com",
}

# Run the Actor and wait for it to finish
run = client.actor("vizellie/accessibility-statement-generator").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 '{
  "organisationName": "Example Shop",
  "websiteUrl": "https://example.com/",
  "statementDate": "2026-01-15",
  "conformance": "full",
  "limitations": [],
  "feedbackContact": "accessibility@example.com"
}' |
apify call vizellie/accessibility-statement-generator --silent --output-dataset

```

## MCP server setup

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

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/yIH2baH8D2UIdMWoc/builds/YvCx54ud0O4BIvTFz/openapi.json
