# Web Accessibility Scanner (`accessibility_team/a11y-scanner-public`) Actor

Looking for an Accessibility Checker API for WCAG compliance? Our tool scans per the latest guidelines, offering bypass login screens, detailed error reports, and automated scanning. Ideal for inclusive design, and accessibility testing. Ensure your site meets accessibility standards.

- **URL**: https://apify.com/accessibility\_team/a11y-scanner-public.md
- **Developed by:** [Equally AI](https://apify.com/accessibility_team) (community)
- **Categories:** Developer tools, AI, Automation
- **Stats:** 141 total users, 4 monthly users, 100.0% runs succeeded, 6 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

$25.00 / 1,000 results

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?

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

### Web Accessibility Scanner

Web Accessibility Scanner is an Actor that scans websites for accessibility issues, ensuring they comply with the **Web Content Accessibility Guidelines (WCAG)**. It can perform both single page scans and domain-wide scans, with the option to bypass login walls for specific pages.

### Features

- **Domain-wide Scanning**: Check all pages within a domain for accessibility issues.
- **Single Page Scanning with Login Bypass**: Allows scanning of a specific page behind a login wall (available for single page scans only).
- **Detailed Reports**: Provides comprehensive output highlighting accessibility errors, contrast issues, and warnings.

### How to Check a Website for Accessibility

1. **Add URLs**: Provide one or more URLs to scan. You can either enter them manually or upload from a `.txt` file or a Google Sheet.
2. **Start the Scan**: Click the "Start" button and the actor will begin scanning.
3. **Download Results**: Once the scan is complete, you can download the data in various formats, including **JSON**, **XML**, **CSV**, **Excel**, or **HTML**.

### Input Parameters

- **Start URLs**: The URLs to be scanned for accessibility issues.
- **Source Options**:
  - Direct input of URLs.
  - Upload a `.txt` file with URLs (one URL per line).
  - Import URLs from a Google Sheet (ensure URLs are in the first column). [Check here for more details](https://docs.apify.com/academy/node-js/scraping-urls-list-from-google-sheets).
- **Login Bypass**: For single page scans, enable this option to bypass login walls (not available for domain-wide scans).
- **Note**: If the option to scan full website or bypass login page is enabled, only the first URL on the Start URLs list will be considered.

For more information, refer to the [**Input tab**](https://apify.com/accessibility_team/a11y-scanner-public/input-schema).

### Output

The results from the accessibility scan is saved in the Apify dataset and can be downloaded in multiple formats such as JSON, HTML, XML, CSV, or Excel.

#### Example JSON Output

```json
[
  {
    "url": "https://www.apify.com/",
    "status": "Scan Successful",
    "criticalErrors": [
      {
        "code": "Principle1.Guideline1_1.1_1_1.H37",
        "message": "Img element missing an alt attribute.",
        "selector": "body > img:nth-child(38)",
        "context": "<img src=\"https://t.co/1/i/adsct?bci=4&amp;eci=3&amp;event=%7B%7D&amp;event_id=b194fd56-60f9-4152-ada9-76f7c38bd264&amp;integration=gtm&amp;p_id=Twitter&amp;p_user_id=0&amp;pl_id=0ccf5eff-d6f8-4f6e-bef3-cfce4b1279b8&amp;tw_document_href=https%3A%2F%2Fapify.com%2F&amp;tw_iframe_status=0&amp;txn_id=omnsj&amp;type=javascript&amp;version=2.3.30\" height=\"1\" width=\"1\" style=\"display: none;\">",
        "type": "error"
      }
    ],
    "contrastErrors": [
      {
        "code": "Principle1.Guideline1_4.1_4_3.G18_or_G145.Fail",
        "message": "Insufficient contrast ratio. Expected 4.5:1, found 3.75:1.",
        "selector": "body > footer > div:nth-child(1) > p",
        "context": "<p>Join our developer community on Discord</p>",
        "type": "contrast error"
      }
    ],
    "warnings": [
      {
        "code": "Principle1.Guideline1_3.1_3_1.H42",
        "message": "Heading markup should be used if this content is intended as a heading.",
        "selector": "#main > div:nth-child(2) > section:nth-child(4) > div > a",
        "context": "<span><strong>Web scraping academy</strong></span>",
        "type": "warning"
      }
    ]
  }
]
```

### Technical Requirements

- **Apify Account**: You need an active Apify account to use this actor.
- **Input URLs**: URLs can be provided via direct input, a `.txt` file, or a Google Sheet (ensure URLs are in the first column).
- **Login Bypass**: This feature works only for single-page scans and is not available for full-domain scanning.

### Troubleshooting

If you encounter any issues while using this actor, consider the following:

- **Verify URLs**: Ensure that the URLs provided are valid and accessible.
- **Input Format**: If using a `.txt` file or Google Sheet, ensure the URLs are in the correct format.
- **Login Bypass**: If scanning behind a login wall, ensure that the correct login credentials are provided, and the page is accessible after logging in.

For more support, visit the [Apify Documentation](https://docs.apify.com/) or contact [Apify Support](https://support.apify.com/).

### Feedback

If you have any technical feedback, suggestions for improvement, or if you've encountered a bug with the Website Accessibility Scanner, please feel free to create an issue in the Actor's [**Issues**](https://apify.com/accessibility_team/a11y-scanner-public/issues/open) tab on the Apify Console.

# Actor input Schema

## `startUrls` (type: `array`):

URLs to start with. You can upload a `.txt` file with URLs (one URL per line) or import URLs from a Google Sheet (ensure URLs are in the first column). To get list of URLs from a Google Sheet document, just add  the /gviz/tq?tqx=out:csv query parameter to the Google Sheet URL base, right after the long document identifier part.

## `scanAllPages` (type: `boolean`):

Scan all pages within the domain. If available, using the sitemap URL will provide better coverage.

## `loginPage` (type: `boolean`):

Bypass login wall. Ensure you provide the necessary and accurate credentials (e.g., username, email, password) and form field selectors (input fields and submit button). This is only available for single page scans

## `usernameOrEmail` (type: `string`):

Login email or username.

## `password` (type: `string`):

Login password.

## `nameOrEmailSelector` (type: `string`):

CSS selector for the usename or email field.

## `passwordSelector` (type: `string`):

CSS selector for the password field.

## `submitBtnSelector` (type: `string`):

CSS selector for the submit button.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://equally.ai/"
    }
  ]
}
```

# 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 = {
    "startUrls": [
        {
            "url": "https://equally.ai/"
        }
    ],
    "scanAllPages": false,
    "loginPage": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("accessibility_team/a11y-scanner-public").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 = {
    "startUrls": [{ "url": "https://equally.ai/" }],
    "scanAllPages": False,
    "loginPage": False,
}

# Run the Actor and wait for it to finish
run = client.actor("accessibility_team/a11y-scanner-public").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 '{
  "startUrls": [
    {
      "url": "https://equally.ai/"
    }
  ],
  "scanAllPages": false,
  "loginPage": false
}' |
apify call accessibility_team/a11y-scanner-public --silent --output-dataset

```

## MCP server setup

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

```

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/ADrtCX6ErB75TaMTm/builds/ySkFY1ghAurCueaiE/openapi.json
