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
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)
| Step | Page | Score | Critical | Serious | Worst problem | Keyboard test | Status |
|---|---|---|---|---|---|---|---|
| Product | /products/linen-shirt | 78 | 1 | 2 | Buttons must have discernible text (size picker) | No | Fix before next sale |
| Cart | /cart | 88 | 0 | 2 | Elements must meet minimum colour contrast | Yes | Fix this month |
| Checkout | /checkout | not checked | No | Check address or test by hand | |||
| Contact | /pages/contact | 100 | 0 | 0 | Yes | OK for now |
Who this is for
- Small online shops selling to EU consumers on Shopify, WooCommerce or any other cart, including shops based outside the EU: the Directive defines a service provider as anyone who provides a service on the Union market "or makes offers to provide such a service to consumers in the Union" (Article 3(4)).
- Exporters and D2C brands (for example from India, the UK or the US) shipping to EU customers from their own site.
- Web agencies and freelancers who build shops and want a one-page answer for a client who asks "do we need to do anything about the EAA?"
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:
| Cell | Question | Answer |
|---|---|---|
| B2 | Do consumers in the EU buy from your site or app? (Yes/No) | Yes |
| B3 | Number of people employed | 14 |
| B4 | Annual turnover in EUR | 1,200,000 |
| B5 | Annual balance sheet total in EUR | 600,000 |
| B6 | Microenterprise? | =AND(B3<10, OR(B4<=2000000, B5<=2000000)) |
| B7 | Result | formula 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:
- A general description of the service in accessible formats (Annex V 1(a))
- Descriptions and explanations needed to understand how the service works (Annex V 1(b))
- A description of how the Annex I accessibility requirements are met (Annex V 1(c)): this is where the path tab results and your fixes go, in plain words
- Published in your terms and conditions or an equivalent page, linked from the footer
- Available in written and oral form (for example a phone or voice option on request), and the page itself passes the scan
- Accessibility information about the products you sell, where the brand or maker gives it to you (Annex I Section IV(g)(i))
- Re-checked after every theme, checkout or payment-provider change (Article 13(3) asks you to take such changes into account)
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
- Automated rules catch only part of WCAG. Keyboard order, whether a screen reader makes sense of the page, captions and documents need a person.
- Cart and checkout often need a session. The scanner opens each address fresh, so it may see an empty cart or a redirect. Add an item, copy the checkout address, and still do the keyboard test by hand.
- Payment widgets and pages behind a login may not be reached by the scan. Test them by hand; the Directive names payment and identification steps explicitly.
- A clean score does not certify conformance and does not make a site "compliant". Overlays that promise that have drawn regulator action in the US: see the FTC press release of 22 April 2025, FTC order against accessiBe.
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
- How to run the accessibility scanner
- Accessibility fix list sheet for web agencies
- EU 30-day lowest price log for Black Friday
- Google Shopping product listing check sheet
- Unadhi accessibility guides
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
Unadhi Guides are free, independent explainers. We correct errors as soon as we find them: write to mininglife7@gmail.com.