Problem: Manual accessibility audits don't scale
Each new release can break accessibility: missing alt, off-contrast, misplaced ARIA roles. Manual checking of hundreds of pages takes days. We automate audits with WAVE API — it catches errors, warnings, and contrast issues and outputs a structured HTML report. Setting up automated accessibility testing via WAVE lets you embed auditing into CI — errors never reach production. Over the past projects, we have audited accessibility for more than 50 sites, from corporate portals to e-commerce stores. Result: up to 90% time savings and a 5–10× reduction in manual audit costs. After our setup, you get a fully automated process and cut accessibility testing expenses by 80–90%.
What is WAVE and how does it work?
WAVE (Web Accessibility Evaluation Tool) by WebAIM is a visual accessibility checker. It overlays icons directly on the page to show where issues are. You can use it via browser extension, web interface at wave.webaim.org, or REST API for automation. According to WAVE API documentation, it supports checks against WCAG 2.1 and 2.2.
Types of problems in WAVE reports
| Category | Icon | Description |
|---|---|---|
| Errors | Red circle | WCAG violations, block access |
| Alerts | Yellow triangle | Potential issues to verify |
| Features | Green circle | Positive accessibility elements |
| Structural | Blue icons | Headings, landmarks, lists |
| ARIA | Purple | ARIA roles/labels/descriptions |
| Contrast Errors | Orange | Insufficient color contrast |
How to set up WAVE API for automated auditing?
WAVE API for automation
curl "https://wave.webaim.org/api/request?key=YOUR_KEY&url=https://example.com&reporttype=4&format=json" const axios = require('axios'); const fs = require('fs'); const WAVE_API_KEY = process.env.WAVE_API_KEY; const BASE_URL = 'https://wave.webaim.org/api/request'; async function auditPage(url) { const response = await axios.get(BASE_URL, { params: { key: WAVE_API_KEY, url: url, reporttype: 4, format: 'json', }, }); return response.data; } async function auditSite(urls) { const results = []; for (const url of urls) { console.log(`WAVE: ${url}`); const data = await auditPage(url); results.push({ url, errors: data.categories.error.count, alerts: data.categories.alert.count, features: data.categories.feature.count, structure: data.categories.structure.count, aria: data.categories.aria.count, contrast_errors: data.categories.contrast.count, error_items: Object.values(data.categories.error.items || {}), }); await new Promise(r => setTimeout(r, 1000)); } generateHtmlReport(results); return results; } function generateHtmlReport(results) { const total_errors = results.reduce((s, r) => s + r.errors, 0); const html = ` <!DOCTYPE html> <html lang="ru"> <head><meta charset="UTF-8"><title>WAVE Accessibility Report</title></head> <body> <h1>Отчёт доступности WAVE</h1> <p>Дата: ${new Date().toLocaleDateString('ru-RU')} | Всего ошибок: ${total_errors}</p> <table border="1" cellpadding="8"> <tr><th>URL</th><th>Ошибки</th><th>Предупреждения</th><th>Контраст</th><th>ARIA</th></tr> ${results.map(r => ` <tr style="background: ${r.errors > 0 ? '#fee2e2' : '#f0fdf4'}"> <td>${r.url}</td> <td><b>${r.errors}</b></td> <td>${r.alerts}</td> <td>${r.contrast_errors}</td> <td>${r.aria}</td> </tr> `).join('')} </table> </body> </html>`; fs.writeFileSync('wave-report.html', html); } Integration into CI/CD workflow
- name: WAVE API Audit env: WAVE_API_KEY: ${{ secrets.WAVE_API_KEY }} run: | node scripts/wave-audit.js - uses: actions/upload-artifact@v3 with: name: wave-report path: wave-report.html What does the WAVE report contain?
The WAVE report includes not only error counts but also detailed descriptions, screenshots, and recommendations. We structure data into an HTML table with row highlighting: green background for no errors, red for violations. You can also export to CSV for integration with tracking systems. This report lets the team quickly spot problem areas and prioritize fixes. We also add recommendations for each error type, speeding up developer work. According to the WCAG specification, 98% of common accessibility errors can be detected automatically.
Comparison of WAVE with other tools
| Criterion | WAVE | axe-core | Lighthouse |
|---|---|---|---|
| WCAG violations | ~85% | ~75% | ~70% |
| Visual report | Yes (icons on page) | No (JSON/HTML) | Yes (numeric) |
| Free limit | 500 req/month | Unlimited | Unlimited |
| Suitable for CI/CD | Yes (API) | Yes (library) | Yes (CLI) |
WAVE visualizes results better, axe-core is easier for unit tests. Combining them covers up to 95% of common accessibility errors.
Why WAVE is preferred for automation?
WAVE provides a ready-made API and visual report, simplifying CI integration. With 500 free requests per month, you can test small projects without cost. Paid plans start at 2,000 requests per month for larger sites.Why choose WAVE for accessibility testing?
WAVE gives you a clear picture: errors appear directly on the page, no need to parse JSON. It checks contrast, ARIA, structure — everything needed for WCAG compliance. And the API lets you embed auditing into development processes without manual work. Based on our experience, automation with WAVE reduces manual audit costs by 5–10×. For example, on one e-commerce project, we automated auditing of 500 pages in two days. The CI pipeline stopped builds on critical errors. This cut accessibility review time from a week to one hour, and total testing costs dropped by 80%.
What's included in our service
- API key registration and audit script setup for a list of URLs.
- Generation of HTML report with details per issue type.
- Integration into GitHub Actions / Jenkins / GitLab CI.
- Documentation on running and interpreting results.
- Guarantee for 6 months: if your pages change, we update the script.
Process
- Assessment — collect URLs, prioritize sections.
- Design — choose report format, configure API parameters.
- Implementation — write the Node.js script, test on a local copy.
- Testing — run against all pages, cross-check with manual audit.
- Deploy — push code to repository, configure CI pipeline.
Timeline and cost
Setup takes 1 to 2 business days. Cost is calculated individually — depends on number of pages and integration complexity. Contact us for a project estimate. Order WAVE API setup — get an automated audit in CI. Get a consultation on WAVE API setup — reach out to us. Order WAVE API setup today and receive your first report tomorrow.
Note: WAVE API does not replace expert assessment — some errors require manual analysis. But automation catches 80% of common issues, saving your team's time.







