Unadhi Guides

Accessibility fix list sheet for web agencies: a WCAG score, the worst problem and a fix date for every client page

Updated 25 Oct 2026 · Disclosure: the scanner linked below is an Unadhi product on the Apify Store. This guide is free, and the sheet layout works with any scanner that exports a score and issue counts per page. Current Apify pricing is only on the Store page. This page has no affiliate links and nobody paid to be mentioned. Not legal advice.

What you get: an accessibility fix list in one Google Sheet for every client site you look after, with one row per page: the client, the page, a 0-100 score, how many critical, serious, moderate and minor problems the automated check found, the worst problem in plain English with a one-line fix, an owner, a due date and a re-check date. A summary tab gives each client one line (pages checked, average score, pages with critical problems), which is what you paste into the monthly client report. The example rows and numbers are made up.

The finished sheet

fixlist tab (example rows are made up)

ClientPageScoreCriticalSeriousWorst problemOwnerDueStatus
Example Dental/book-appointment7812Form fields have no labelsDev1 NovFix this week
Example Dental/9101Text colour contrast too lowDesigner15 NovFix this month
Example Bakery/shop8411Images have no alt textClient1 NovFix this week
Example Bakery/contact10000Next review

summary tab (example rows are made up)

ClientPages checkedAverage scorePages with a critical problemLast check
Example Dental1287225 Oct 2026
Example Bakery890125 Oct 2026

Who this is for

Small web agencies, freelancers and in-house web teams who look after several sites and want a repeatable monthly accessibility check without paying for a per-site subscription. It also suits teams working for US cities, counties and school districts: the US Department of Justice ADA Title II web rule asks state and local governments to meet WCAG 2.1 Level AA by 26 April 2027 (populations of 50,000 or more) or 26 April 2028 (smaller ones), per ada.gov.

Step 1: the pages tab

Add a tab named pages with A Client and B Page URL in row 1, then one row per page you want checked. Start with the pages that matter most to each client: home, contact, booking or checkout, the top product or service pages, and any form. Use the full address including https://.

Step 2: run the check on every page at once

Open the Website Accessibility Scanner (WCAG 2.1 AA, axe-core) on the Apify Store. It loads each page in a real Chromium browser and runs the open-source axe-core rules for WCAG 2.0 and 2.1 Level A and AA. To build its input from your sheet, put this in any empty cell of a tab named settings, then copy the result into the input's JSON view:

="{""startUrls"": [" & TEXTJOIN(",", TRUE, ARRAYFORMULA(IF(pages!B2:B="", "", "{""url"": """ & TRIM(pages!B2:B) & """}"))) & "], ""maxPages"": " & COUNTA(pages!B2:B) & ", ""respectRobotsTxt"": true}"

When the run finishes, export the dataset as CSV and import it into the same Google Sheet (File → Import → Upload, "Insert new sheet"). Name the tab results. Apify's CSV export turns nested fields into columns with slashes in their names, such as byImpact/critical and issues/0/help. Issues are listed worst first, so issues/0/… is the most serious problem on that page.

Step 3: the fixlist tab

Add a tab named fixlist with these headers: A Client, B Page, C Score, D Critical, E Serious, F Moderate, G Minor, H Worst problem, I How to fix, J Owner, K Due, L Re-check, M Status. Put =pages!A2:B in A2 to pull the list across. CSV column positions can change between runs, so each column is looked up by its header name. In C2 put the score, then copy the same formula to the other columns, changing only the header text in quotes:

=IF($B2="", "", IFERROR(INDEX(results!A:ZZ, MATCH($B2, INDEX(results!A:ZZ, 0, MATCH("url", results!1:1, 0)), 0), MATCH("score", results!1:1, 0)), "not checked"))

Status in M2, a working rule of ours rather than any legal standard (change it to suit your clients):

=IF($B2="", "", IF(D2="not checked", "Check address", IF(D2>0, "Fix this week", IF(E2>0, "Fix this month", "Next review"))))

Due date in K2: =IF(M2="Fix this week", TODAY()+7, IF(M2="Fix this month", TODAY()+30, "")). Re-check in L2: =IF(K2="", "", K2+1). Fill J Owner by hand: dev, designer, content writer or the client.

The score comes from the scanner: 100 minus 10 for each critical rule failed, 6 for each serious, 3 for each moderate and 1 for each minor, never below 0. It is a way to sort pages, not a compliance grade.

Step 4: the summary tab

Put the client names in column A (=UNIQUE(FILTER(pages!A2:A, pages!A2:A<>"")) in A2), then:

Step 5: re-check after fixes

Before the next run, copy the fixlist score column into a new column headed with today's date (paste values only). Run the same input again, import the new CSV over the results tab, and the score column updates. The dated columns show each client their progress month by month.

A note you can send each client

Hi, this month's accessibility check covered [pages] pages on your site. Average score: [score]/100. [n] pages have a problem we rate as critical, mostly [worst problem]. We plan to fix these by [date] and re-check on [date]. This is an automated check: it finds common problems but does not certify the site as accessible, so we also do a short keyboard-only test on your booking and contact pages.

What an automated check cannot tell you

Automated rules catch only part of WCAG. Keyboard navigation order, whether a screen reader announces things in a way that makes sense, captions and transcripts, and PDFs need a person to review them. A clean score does not make a site "ADA compliant", does not certify WCAG conformance and does not prevent complaints. For the official success criteria, see the W3C WCAG 2.1 quick reference.

Related

Questions

Does a score of 100 mean the page is accessible?

No. It means none of the automated rules failed on that page. Keyboard use, screen-reader meaning, captions and documents still need a manual review.

How many pages should I check per client?

Start with the pages people must use to become customers: home, contact, booking or checkout and any form. Add the top content pages once those are clean.

Can I use this sheet with a different scanner?

Yes. Change the header names in quotes in the Step 3 formulas to match the columns your scanner exports.

Partner programme opening soon: join the free waitlist. Planned terms are 50% of each referred sale (75% once you have 5+ paying customers), single level, paid through Gumroad only from revenue received. Join the partner waitlist

← All guides

Unadhi Guides are free, independent explainers. We correct errors as soon as we find them: write to mininglife7@gmail.com.