Scan any URL for WCAG 2.2 AA accessibility violations in CI. Fails the build if your accessibility score drops below a threshold you set.
- name: WCAG 2.2 scan
uses: accesspulse/scan@v1
with:
url: https://your-site.com
threshold: 80That's it. The step fails if the accessibility score is below 80. No API key required for free scans (25/month per IP).
name: Accessibility
on:
pull_request:
push:
branches: [main]
jobs:
a11y:
runs-on: ubuntu-latest
steps:
- name: WCAG 2.2 scan
id: scan
uses: accesspulse/scan@v1
with:
url: ${{ vars.SITE_URL }}
threshold: 80
api-key: ${{ secrets.ACCESSPULSE_API_KEY }}
- name: Print score
run: echo "Score ${{ steps.scan.outputs.score }}/100"name: Accessibility
on: [pull_request]
jobs:
a11y:
runs-on: ubuntu-latest
steps:
- name: Wait for Vercel preview
uses: patrickedqvist/wait-for-vercel-preview@v1.3.1
id: vercel
with:
token: ${{ secrets.GITHUB_TOKEN }}
max_timeout: 120
- name: WCAG 2.2 scan
uses: accesspulse/scan@v1
with:
url: ${{ steps.vercel.outputs.url }}
threshold: 80
api-key: ${{ secrets.ACCESSPULSE_API_KEY }}| Input | Required | Default | Description |
|---|---|---|---|
url |
Yes | — | URL to scan for WCAG 2.2 AA violations. Must be publicly reachable. |
threshold |
No | 80 |
Minimum passing score (0–100). The step fails if the score is below this. |
api-key |
No | — | AccessPulse API key. Omit for free scans (25/month). Get one at accesspulse.dev. |
| Output | Description |
|---|---|
score |
Accessibility score (0–100). |
violations |
Number of WCAG violations found. |
passed |
'true' if score ≥ threshold, 'false' otherwise. |
- Sends your URL to the AccessPulse API
- A headless Chromium browser loads your page and waits for JavaScript to render
- axe-core v4.10 runs all WCAG 2.2 AA rules against the live DOM
- Results are returned as a score + violation list
- The action writes a summary table to the GitHub Actions job summary
- If score < threshold, the step fails with an error listing the top violations
Zero dependencies — this action uses only Node.js built-ins. No npm install on your runner.
Every run writes a Markdown summary to the Actions UI with score, violation count, and a table of all violations by severity.
Score = passes / (passes + weighted_violations) × 100
Severity weights: critical 10×, serious 5×, moderate 2×, minor 1×. A single critical violation (e.g., unlabeled form field) impacts the score more than several minor issues.
| Plan | Scans/month | Price |
|---|---|---|
| Free (no key) | 25 | $0 |
| Developer | 500 | $29/mo |
| Team | 2,000 | $149/mo |
| Agency | 10,000 | $399/mo |
MIT. Built on axe-core (MPL-2.0) by Deque Systems. Not affiliated with Deque.