Unadhi Guides

European Accessibility Act check sheet for online shops: a WCAG score for every page on the way to checkout, a microenterprise test and the information you must publish

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. General information, not legal advice.

What you get: a European Accessibility Act (EAA) checkout-path sheet in one Google Sheet for an online shop that sells to consumers in the EU. Tab 1 answers "does the EAA apply to my shop?" with a microenterprise test built from the Directive's own definition. Tab 2 has one row per page a customer must get through to buy (home, category, product, search, cart, checkout, payment, account, contact, returns) with a 0-100 automated WCAG score, critical and serious problem counts, the worst problem with a one-line fix, a keyboard-test column and a status. Tab 3 is the accessibility information checklist (Annex V), and tab 4 is the record you must keep if you rely on the "disproportionate burden" exception. The example rows and numbers are made up.

The finished sheet

path tab (example rows are made up)

StepPageScoreCriticalSeriousWorst problemKeyboard testStatus
Product/products/linen-shirt7812Buttons must have discernible text (size picker)NoFix before next sale
Cart/cart8802Elements must meet minimum colour contrastYesFix this month
Checkout/checkoutnot checkedNoCheck address or test by hand
Contact/pages/contact10000YesOK for now

Who this is for

Step 1: the scope tab (does the EAA apply to you?)

Directive (EU) 2019/882 applies to e-commerce services provided to consumers after 28 June 2025 (Article 2(2)(f)). It defines e-commerce services as "services provided at a distance, through websites and mobile device-based services by electronic means and at the individual request of a consumer with a view to concluding a consumer contract" (Article 3(30)). Microenterprises providing services are exempt from the service accessibility requirements (Article 4(5)). A microenterprise "employs fewer than 10 persons and ... has an annual turnover not exceeding EUR 2 million or an annual balance sheet total not exceeding EUR 2 million" (Article 3(23)).

Add a tab named scope and type these labels in column A, your answers in column B:

CellQuestionAnswer
B2Do consumers in the EU buy from your site or app? (Yes/No)Yes
B3Number of people employed14
B4Annual turnover in EUR1,200,000
B5Annual balance sheet total in EUR600,000
B6Microenterprise?=AND(B3<10, OR(B4<=2000000, B5<=2000000))
B7Resultformula below
=IF(B2<>"Yes", "No EU consumer sales: the e-commerce part of the EAA probably does not apply",
 IF(B6, "Microenterprise: exempt from the service requirements (Art. 4(5)). Fixing the checkout still wins sales",
 "In scope since 28 June 2025: work through the path, info and burden tabs"))

The Directive is put into force through each EU country's own law, and the authority that checks shops differs by country. If your numbers sit close to the limits, or you sell only to businesses, ask a local adviser.

Step 2: the path tab (every page between "I want this" and "paid")

Annex I of the Directive asks services to make "websites, including the related online applications, and mobile device-based services, including mobile applications, accessible in a consistent and adequate way by making them perceivable, operable, understandable and robust" (Section III(c)). Those four words are the four principles of WCAG. For e-commerce it also names "the functionality for identification, security and payment" and "identification methods, electronic signatures, and payment services" (Section IV(g)), so the login and payment steps matter as much as the product page.

Add a tab named path with headers A Step, B Page URL, C Score, D Critical, E Serious, F Worst problem, G How to fix, H Keyboard test, I Status, J Fix by. Fill A and B with one row per step: home, one category page, your two best-selling product pages, search results, cart, checkout, account login, contact, returns or delivery info, and any app web view. Use full addresses with https://.

Run the scan 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. Its README lists pricing as $0.004 per page scanned, with pages that fail to load or are blocked by robots.txt not charged; check the Store page for the current price. To build the input from your sheet, put this in any empty cell of a tab named settings and copy the result into the input's JSON view:

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

When the run finishes, export the dataset as CSV and import it into the same Google Sheet as a new tab named results. Apify's CSV export turns nested fields into columns such as byImpact/critical and issues/0/help; issues are listed worst first.

Pull the results into the path tab

In C2 (copy down, and across to D to G 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"))

D2 "byImpact/critical", E2 "byImpact/serious", F2 "issues/0/help", G2 "issues/0/howToFix".

H2 is a manual Yes/No: can you reach and use every control on that page with the Tab, Enter, Space and arrow keys only, and can you always see where you are? Status in I2 is a working rule of ours, not a legal standard:

=IF($B2="", "", IF(C2="not checked", "Check address or test by hand", IF(D2>0, "Fix before next sale", IF(E2>0, "Fix this month", IF(H2<>"Yes", "Do keyboard test", "OK for now")))))

Fix by in J2: =IF(I2="Fix before next sale", TODAY()+7, IF(I2="Fix this month", TODAY()+30, "")).

The score is the scanner's own: 100 minus 10 per critical rule failed, 6 per serious, 3 per moderate and 1 per minor, never below 0. It sorts pages; it is not a compliance grade.

Step 3: the info tab (what you must publish)

Service providers "shall prepare the necessary information in accordance with Annex V and shall explain how the services meet the applicable accessibility requirements", make it available "in written and oral format, including in a manner which is accessible to persons with disabilities", and keep it "for as long as the service is in operation" (Article 13(2)). Annex V says it goes in "the general terms and conditions, or equivalent document". Add a tab named info with columns Item, Done? (Yes/No), Where (URL), Last updated:

Count of open items: =COUNTIF(B2:B, "No").

Step 4: the burden tab (only if you rely on an exception)

The requirements apply only to the extent they do not cause a "fundamental alteration" of the service or a "disproportionate burden" (Article 14(1)). If you rely on this you must document the assessment, keep the results for five years after the service was last provided, renew it when the service changes, when an authority asks, "and in any event, at least every five years", and (unless you are a microenterprise) send information to the authority of each country where you provide the service (Article 14(2), (3), (5), (8)). You cannot claim disproportionate burden if you received outside funding meant for improving accessibility (Article 14(6)).

Columns: Requirement or page, Why it would be a disproportionate burden (facts and cost), Assessed on, Renew by =IF(C2="", "", EDATE(C2, 60)), Authority informed (country, date). A failing checkout button is rarely a credible burden case; the tab is for genuinely large items such as rebuilding a custom app.

Transitional rule worth knowing

Article 32(1): service contracts agreed before 28 June 2025 "may continue without alteration until they expire, but no longer than five years from that date", and countries provide a transition until 28 June 2030 for products already used to provide similar services before then. This does not cover a new customer buying on your site today.

What an automated scan cannot tell you

Sources checked today (25 Oct 2026): the text of Directive (EU) 2019/882 as published on legislation.gov.uk (Articles 2, 3, 4, 13, 14, 32, Annex I and Annex V; EUR-Lex returned a robot check to our fetch, so check the official copy there too), and the scanner's README and input schema on Apify.

Related

Questions

My shop is outside the EU. Does the EAA apply?

If you offer your shop to consumers in the EU, the Directive's definition of service provider includes you (Article 3(4)), unless you are a microenterprise. Enforcement is by each EU country's authority.

Which WCAG version does the EAA require?

The Directive itself does not name a WCAG version. It asks for websites and apps to be perceivable, operable, understandable and robust, and lets providers use harmonised standards published in the Official Journal. Many teams test against WCAG 2.1 AA as a practical baseline.

We have 8 staff and EUR 3 million turnover. Are we a microenterprise?

By Article 3(23), yes if your balance sheet total is EUR 2 million or less: the test is fewer than 10 people and turnover or balance sheet total not over EUR 2 million. Check your country's law and ask an adviser if unsure.

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.