# Accessibility Evidence EU - Static WCAG Signals (`brocoswork/omniapi-a11y-evidence`) Actor

Audit public pages for common accessibility signals and return actionable WCAG evidence for QA and recurring monitoring.

- **URL**: https://apify.com/brocoswork/omniapi-a11y-evidence.md
- **Developed by:** [Anxo Brocos](https://apify.com/brocoswork) (community)
- **Categories:** Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$20.00 / 1,000 page auditeds

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### Find reviewable accessibility issues on public web pages

Accessibility Evidence EU checks public HTML pages for common static accessibility signals and returns structured evidence for QA, release checks, agency reporting, and recurring monitoring. Every issue includes a rule, severity, selector, WCAG reference, and practical remediation so teams can move from a score to an actionable backlog.

This Actor is designed as a fast first-line audit. It is **not** a legal WCAG or European Accessibility Act compliance certificate and it does not replace testing with people with disabilities, assistive technologies, or qualified accessibility specialists.

### Importable n8n workflow

The public [OmniAPI Apify examples repository](https://github.com/BrocosHub/omniapi-apify-examples) includes a ready-to-import [Accessibility Evidence n8n workflow](https://github.com/BrocosHub/omniapi-apify-examples/blob/main/n8n/accessibility-evidence-monitor.json), a monitoring tutorial, and a verified W3C demonstration summary. The workflow applies a configurable QA threshold and prepares findings for alerts, tickets, and human review.

### What it checks

The current deterministic rules cover frequently missed static signals such as:

- Missing or empty document language.
- Missing or unclear page title.
- Images without alternative text.
- Links and buttons without accessible names.
- Form controls without associated labels.
- Invalid or skipped heading structure.
- Iframes without descriptive titles.

Each successful page produces a dataset item containing `score`, `summary`, structured `issues`, the audited `url`, and `processedAt` for traceability.

### Typical use cases

#### Website accessibility monitoring

Schedule daily or weekly audits for important pages and compare the score or issue count over time. Trigger an alert when a release introduces a new high-severity signal.

#### Agency and client QA evidence

Audit landing pages before delivery, export the dataset as JSON, CSV, or Excel, and attach the findings to a human review. The structured output makes it easier to assign each issue to a developer or content editor.

#### Pre-release accessibility checks

Run the Actor from n8n, Make, Zapier, GitHub Actions, or another automation tool. Use a minimum score or maximum issue count as a review gate while keeping final compliance decisions with your accessibility team.

#### European Accessibility Act preparation

Use repeatable static checks to identify obvious issues and build an evidence trail during remediation. Regulatory scope and legal obligations vary by organization and service, so obtain professional advice for compliance decisions.

### Input example

```json
{
  "urls": [
    { "url": "https://example.com" },
    { "url": "https://example.com/contact" }
  ],
  "maxIssues": 100
}
```

Start with representative public pages such as the home page, navigation, contact form, checkout, account entry point, and key conversion pages.

### Output example

```json
{
  "success": true,
  "url": "https://example.com/contact",
  "score": { "value": 84 },
  "summary": { "images": 4, "imagesWithoutAlt": 1, "controls": 8, "unnamedControls": 0 },
  "issues": [
    {
      "id": "image-alt-missing",
      "severity": "error",
      "selector": "main img.hero",
      "wcag": "1.1.1",
      "remediation": "Add meaningful alternative text or mark the image as decorative."
    }
  ],
  "processedAt": "2026-08-13T12:00:00.000Z"
}
```

The exact score and issue object can contain additional fields. Use the published dataset schema when building a typed integration.

### Use with n8n, Make, Zapier, or the API

A practical monitoring workflow is:

1. Schedule Trigger.
2. HTTP Request to the Apify synchronous dataset endpoint.
3. Calculate whether `score.value` is below your threshold.
4. Send the structured issues to email, Slack, Teams, a ticketing system, or a database.
5. Route the result to a human reviewer before making compliance claims.

Store the Apify token in a credential or secret environment variable. Do not include it directly in a workflow exported for customers.

### Pricing and cost control

The launch price is **$0.02 per successfully audited page**. Failed URL items are returned for diagnosis without charging the `page-audited` event. Your own Apify platform usage follows the plan and estimated cost shown in the Console.

Test a small set first, confirm that the evidence matches your workflow, and use a maximum run charge before scheduling large recurring audits.

### Important limitations

- Static HTML checks cannot prove conformance with WCAG, EN 301 549, or the European Accessibility Act.
- The Actor does not test keyboard navigation, focus order, screen-reader announcements, color contrast, captions, cognitive accessibility, authenticated flows, or every WCAG success criterion.
- Client-rendered interfaces may require additional browser-based testing.
- Automated tools produce false positives and false negatives; findings require human review.
- Website layouts change, so recurring jobs should be monitored.

Only audit pages you are authorized to access. You remain responsible for source-site terms, privacy, retention, regulatory interpretation, and remediation decisions.

### FAQ

#### Is the score a compliance percentage?

No. It is a deterministic QA indicator for comparing runs and prioritizing review. It is not a legal compliance score.

#### Can this replace an accessibility audit?

No. Use it to find obvious static issues faster and to monitor regressions. Complete audits require manual and assistive-technology testing.

#### Can I export the results?

Yes. Apify datasets can be consumed by API or exported to common formats such as JSON and CSV for reporting and automation.

#### Will failed pages be charged?

No paid event is emitted for a failed page. The diagnostic item remains in the dataset so you can investigate the URL or network error.

# Actor input Schema

## `urls` (type: `array`):

Public HTTP(S) pages to audit. One dataset item is emitted per successful page.

## `maxIssues` (type: `integer`):

Limits the returned issue list while retaining the aggregate score.

## Actor input object example

```json
{
  "urls": [
    {
      "url": "https://example.com"
    }
  ],
  "maxIssues": 100
}
```

# Actor output Schema

## `results` (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 = {
    "urls": [
        {
            "url": "https://example.com"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("brocoswork/omniapi-a11y-evidence").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 = { "urls": [{ "url": "https://example.com" }] }

# Run the Actor and wait for it to finish
run = client.actor("brocoswork/omniapi-a11y-evidence").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 '{
  "urls": [
    {
      "url": "https://example.com"
    }
  ]
}' |
apify call brocoswork/omniapi-a11y-evidence --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,brocoswork/omniapi-a11y-evidence"
        }
    }
}

```

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/YPtAKHycqoSKfhDuy/builds/6OylVEkcxspYQg1at/openapi.json
