Storefront scan · 9 checks · 12 pages
EU storefront compliance, checked and watched.
Four EU rules landed on online shops in fifteen months. Paste a store URL and get a pass/fail matrix with evidence, the legal citation and a fix for each.
Conformly reports issues found with citations. It is not legal advice.
nordlicht-home.example
· 11 pages
3 issues2 warnings1 unknown
- 01withdrawal_functionfail
- 02withdrawal_policypass
- 03green_claimsfail
- 04accessibility_statementwarn
- 05a11y_samplewarn
- 06ai_disclosurepass
- 07cookie_parityunknown
- 08legal_noticefail
- 09eu_targetinginfo
Finding 01 · severity high
No on-site withdrawal function
withdrawal_function
Evidence
https://nordlicht-home.example/
“Footer links: Returns, Contact, Imprint”
Citation
Directive (EU) 2023/2673, Art. 11a
Fix
<a href="/account/withdraw">
Withdraw from contract
</a>Shopify: add the link to the footer menu and the order status page, then confirm in two steps.
§ 1
Four rules in fifteen months
Each one changes what a shop has to show on its own pages. Enforcement starts with warning letters from competitors and complaints from consumer groups, which reach small shops first.
European Accessibility Act
Directive (EU) 2019/882
Shops must meet EN 301 549, publish an accessibility statement and offer a way to complain.
Withdrawal function
Directive (EU) 2023/2673
Shops must offer an on-site “withdraw from contract” function with two-step confirmation; an email address is not enough.
AI Act, Article 50
Regulation (EU) 2024/1689
A chatbot must tell people they are talking to an AI system, unless that is obvious.
Green claims
Directive (EU) 2024/825
Generic claims such as “eco-friendly” need recognised proof; offset-based neutrality claims and self-made labels are banned.
Conformly also checks two older duties that scanners rarely bundle: a cookie banner where rejecting is as easy as accepting, and a complete legal notice.
§ 2
Nine checks, each with its citation
Every check returns pass, warn, fail or unknown, with the page and quote it rests on. Eight decide by rule alone. One uses a model, and says so.
01. On-site withdrawal function
withdrawal_functionA link or button labelled as a withdrawal function, in any EU language, on the footer, legal, account or order pages. Fails when there is none; warns when the only route is a downloadable form or an email address.
- Decides by
- rule
- Cites
- Directive (EU) 2023/2673, Art. 11a
02. Withdrawal policy states 14 days
withdrawal_policyA returns or withdrawal policy page that states the 14-day period: 14 days, fourteen, 14 Tage, 14 jours and equivalents.
- Decides by
- rule
- Cites
- Directive 2011/83/EU, Art. 6(1)(h) and Art. 9
03. Generic environmental claims
green_claimsSentences that a multilingual keyword filter marks as environmental. A model sorts each into generic and unsubstantiated, specific and substantiated, or not environmental, and suggests a rewording. Offset-based “carbon neutral” claims and self-made labels are flagged by rule.
- Decides by
- rule + model
- Cites
- Directive (EU) 2024/825, Annex I, points 2a, 4a, 4c
04. Accessibility statement and complaint channel
accessibility_statementA link to an accessibility statement, statement language on that page, and an email address or form for complaints. The report notes the exemption for micro-enterprises providing services.
- Decides by
- rule
- Cites
- Directive (EU) 2019/882, Art. 13(2) and Annex V
05. Accessibility sample
a11y_sampleFive technical checks: a lang attribute, exactly one h1, images without alt text, inputs without labels and links with no text.
A sample, not a WCAG audit. A full audit needs a browser and a person; Conformly does neither.
- Decides by
- rule
- Cites
- EN 301 549 / WCAG 2.1 SC 1.1.1, 1.3.1, 2.4.4, 3.1.1
06. Chatbot disclosure
ai_disclosureChat widgets loaded from known hosts such as Intercom, Tidio, Gorgias or Shopify Inbox. When one is present, it looks for words that tell people they are talking to an AI system, on the page or in the privacy policy.
- Decides by
- rule
- Cites
- Regulation (EU) 2024/1689, Art. 50(1)
07. Reject as easy as accept
cookie_parityA consent banner in the page markup with an accept button and a reject button at the same level. Warns when only accept is offered.
Banners injected by JavaScript are not visible to the crawler and are reported as unknown.
- Decides by
- rule
- Cites
- Directive 2002/58/EC, Art. 5(3); Regulation (EU) 2016/679, Art. 7
08. Legal notice completeness
legal_noticeAn imprint or legal notice page with a postal address, an email address, and a company registration or VAT number.
- Decides by
- rule
- Cites
- Directive 2000/31/EC, Art. 5(1)
09. EU targeting (informational)
eu_targetingPrices in euro, shipping to EU countries and EU-language pages. It explains why the rules above apply to the store; it is never counted as an issue.
- Decides by
- rule
- Cites
- CJEU, Joined Cases C-585/08 and C-144/09 (Pammer)
Stores that render their pages with JavaScript are reported as a limitation of the scan, not as issues.
§ 3
A report you can forward
Each scan produces one page on a private link. It reads like a short audit document, so it can go straight to whoever maintains the store.
nordlicht-home.example
· 11 pages
3 issues2 warnings1 unknown
Matrix
- 01 withdrawal_functionfail
- 02 withdrawal_policypass
- 03 green_claimsfail
- 04 accessibility_statementwarn
- 05 a11y_samplewarn
- 06 ai_disclosurepass
- 07 cookie_parityunknown
- 08 legal_noticefail
- 09 eu_targetinginfo
Finding 03
failrule + modelGeneric environmental claim
“Our eco-friendly packaging is kind to the planet.”
Directive (EU) 2024/825, Annex I, point 4a
Packaging: 80% recycled cardboard, FSC Recycled certified.
Pages crawled · 11
- /home
- /products/linen-throwproduct
- /products/oak-trayproduct
- /cartcart
- /pages/imprintlegal
- /pages/returnslegal
- + 5 more
Limitations
- The cookie banner is injected by JavaScript, so cookie_parity is unknown.
- a11y_sample is a sample of five checks, not a WCAG audit.
A. Summary strip
The store, the scan date, how many pages were read, and the count of issues, warnings and unknowns. Never a percentage, never a pass mark.
B. Matrix
One verdict per check, in the same order and numbering as the list above. On the full page it runs down the left side and links to each finding.
C. Findings
Each issue as a numbered section: the quote and page it came from, the provision it relates to, and a fix as generic HTML with a Shopify note.
D. Pages crawled
Every URL that was read and what kind of page Conformly took it for, so you can see what the verdicts rest on.
E. Limitations
What the scan could not see: banners injected by JavaScript, pages blocked by robots.txt, checks that are samples. Stated on every report.
§ 4
Re-scanned every month
Storefronts change: a new theme drops the withdrawal link, an app adds a chat widget. Pro re-scans each monitored site every 30 days and compares the result with the last scan.
- New findings since the last scan, with the evidence that triggered them.
- Resolved findings, so a fix is on record.
- Changed evidence on findings that are still open.
- An email to the site owner when the findings change. Findings marked fixed or not applicable carry over to the next scan, with the reason.
nordlicht-home.example
Re-scan against
- + Newcookie_paritywarn
- − Resolvedlegal_noticefail
- ~ Changedgreen_claims: one evidence quote rewritten
Alert emailed to the site owner. Next re-scan in 30 days.
§ 5
Method and limits
A scanner that reads other people's shops should be predictable about how it does it.
- No JavaScript
- Pages are fetched server-side and read as HTML. Nothing on your store is executed, clicked or submitted. Stores that render with JavaScript are reported as a limitation, not guessed at.
- robots.txt honoured
- Paths your robots.txt disallows are not fetched.
- 12 pages at most
- Home, up to four product pages, cart and checkout entry, legal pages and the account link. Each request times out after 10 seconds.
- Identified user agent
- Requests carry a Conformly user agent, so your server logs show who called.
- 30-day purge
- Anonymous scans, their crawled text and their findings are deleted 30 days after the scan.
- Synthetic demo data
- The example store on this site lives on a reserved .example domain, and the test fixtures are synthetic storefronts. No real shop is named.
- Every model call logged
- The green-claims classifier is the only model call. Each one is logged with the model, the prompt version and the token counts.
§ 6
Pricing
The first scan needs no account. An account keeps your history; Pro watches your sites.
Free
€0no card needed
For checking your own shop before the warning letters arrive.
- 5 scans a month
- Scan history
- 1 monitored site
Pro
Monitoring€19per month
For agencies and shops that change their storefront often.
- Unlimited scans
- 10 monitored sites
- Monthly re-scan with change alerts
- PDF report
- Team notes on findings
Stripe runs in test mode on this demo. Checkout accepts Stripe’s published test cards only, and no real payment is taken.
§ 7
Questions
Is this legal advice?
No. Conformly reports issues found, with the evidence it read and the provision each one relates to. It never says a store is compliant: a report with no issues means these nine checks found nothing on the pages they could read.
For a decision about your shop, ask a lawyer qualified in the countries you sell to.
Which countries does it cover?
The checks follow EU directives and regulations, which apply to shops selling to consumers in any member state, wherever the shop itself is based. It reads pages in English, German, French, Italian, Spanish and Dutch.
The UK’s Digital Markets, Competition and Consumers Act brings its own consumer rules in spring 2027. Reports flag it as upcoming; it is not checked yet.
Does it run JavaScript?
No. Pages are fetched server-side and read as HTML, the way a search engine’s first pass would. That keeps the scan safe for your store, but anything a script adds after load, such as many cookie banners and chat widgets, may not be visible. When that happens the check is reported as unknown and the limitation is listed, rather than guessed.
Does it use AI?
Only to classify environmental claims. A keyword filter picks out candidate sentences and a model sorts them into generic, specific or not environmental, with a suggested rewording. The verdicts for every other check are rules you can read in the source code, and every model call is logged.
Can it scan Shopify or WooCommerce stores?
Yes. Standard Shopify and WooCommerce themes render their pages on the server, so the crawler sees what a customer sees. Fixes come as generic HTML with a Shopify note. Headless storefronts built as JavaScript apps often return little HTML; the report says so instead of reporting false issues.
End of document
Start with one URL.
One free scan, no account. The report stays on a private link for 30 days.
Scan a store