Lints HTML email templates for the footer duties senders get fined for: CAN-SPAM postal address and 10-business-day opt-out, CASL 60-day window, and German 5 DDG, which replaced 5 TMG on 2024-05-14. Runs entirely in your browser — nothing is uploaded.
Same engine as the VS Code extension, byte for byte.
Free for the file open in your editor - no key, no limit. The workspace sweep and the report ask for a key.
VS Code MarketplaceOpen VSX (Cursor, VSCodium)npmMCP server (npx)Docker Hubext install ReadyStack.email-footer-law-lint npx @readystack/email-footer-law-lint <file> npx @readystack/email-footer-law-lint --mcp
Team? One key for every ReadyStack linter, 5 seats, $149 once
Sweep every template in the workspace and write one dated, citable audit report file you can hand to a client or to counsel
One payment, one licence key for this tool. The key is shown right after payment.
Outside counsel reads one email footer against CAN-SPAM, CASL and 5 DDG at about $300 an hour, and reads it once.
Buy the full version — $29· ReadyStack
Real numbers from this tool, line by line.

Twelve findings — nine of them errors — come out of this email footer, for agency developers in Berlin and Toronto who ship HTML templates to US, Canadian and German lists. This is the run, on the 30-line test fixture that ships with the extension:
ERRO L8 postal_address_placeholder "[Your Company Address]" 15 U.S.C. 7704(a)(5)(A)(iii)
ERRO L9 unsub_fee_or_data "your account number" 16 CFR 316.5
ERRO L9 unsub_deadline_too_long "Please allow up to 30 days" 15 U.S.C. 7704(a)(4)(A)(ii)
ERRO L9 unsub_window_under_60d "valid for 14 days" = 14 days CASL s.11(1)(b)
WARN L10 unsub_too_small opt-out set at 8px 16 CFR 316.5
ERRO L15 unsub_dead_href href="#" 15 U.S.C. 7704(a)(3)(A)
ERRO L21 tmg_5_outdated "TMG" as of 2026-09-11 DDG 5, TMG repealed 2024-05-14
ERRO L22 unsub_behind_login /account/login?next=... 16 CFR 316.5
WARN L25 copyright_year_stale says 2023; today is 2026-09-11
WARN L28 tracking_pixel_unconsented 1x1 open pixel, no consent line ePrivacy Art. 5(3)
ERRO L29 postal_address_missing no street address, no PO Box 15 U.S.C. 7704(a)(5)(A)(iii)
ERRO L29 de_imprint_incomplete no Impressum, no HRB, no VAT DDG 5 Abs. 1 Nr. 4 and Nr. 6
Twelve lines, nine of them errors, out of fourteen rules. The corrected copy returns zero.
Nobody re-reads it. The body gets proofread; the footer is copied from the last template, and that one from the one before it. So a repealed statute, a placeholder address and a thirty-day removal promise ride along on every send, for years.
Germany repealed the Telemediengesetz on 2024-05-14. The duty did not go away; it moved to section 5 of the Digitale-Dienste-Gesetz. Every German footer written before that date still cites section 5 TMG — and so does every German footer written since by a language model whose training data predates the repeal. Ask an assistant for a compliant German footer today and there is a good chance it hands back a statute that no longer exists.
These are not markup errors. They are facts with dates on them: ten business days for a CAN-SPAM opt-out, sixty days for a CASL unsubscribe mechanism, 2024-05-14 for the TMG. A linter that knows HTML has no opinion about any of them, and none of these tools opens the other templates in your repository, where the same footer was copied from.
Four groups. The opt-out link: does one exist, does the href go anywhere, does it land on a sign-in page, does it demand an account number or a fee, is it rendered at a readable size. The promises around it: a removal window longer than ten business days, a link declared valid for fewer than sixty days. The identification: a real postal address rather than [Your Company Address], a named legal entity, and for German-facing mail an Impressum link or a register and VAT number. And two that read the date you run them on: a stale copyright year, and a 1x1 open-tracking pixel shipping with no line telling the reader why they got this mail.
Nothing is uploaded; the engine is one dependency-free file that runs identically in the editor and in the browser.
Checking the template open in your editor is free against all fourteen rules, with no key and no account; the same engine runs free in the browser. The licence covers one thing on a different axis: sweep every template in the workspace and write one dated audit report — every file, every finding, every citation — that a client or a lawyer can read without opening your editor. Outside counsel reads one footer against CAN-SPAM, CASL and section 5 DDG at about $300 an hour, and reads it once. The licence is $29, and the rules run on every commit afterwards.
It reads an HTML email template and reports the footer duties it breaks. Fourteen checks: a missing or placeholder postal address, an opt-out link pointing at a sign-in page, a removal promise longer than ten business days, an unsubscribe link declared valid for under sixty days, and a German provider line still citing the repealed TMG. Every finding names the line, the statute and the fix.
Developers and agency engineers who own the HTML email templates for a company that mails US, Canadian and German recipients. If you keep a folder of campaign and transactional templates in git, and the footer in them was copied forward from a template someone wrote years ago, this is aimed squarely at you rather than at the marketing team.
HTML linters check markup, not statutes; they have no opinion about a thirty-day removal promise. Chat assistants have a worse problem: Germany repealed the Telemediengesetz on 2024-05-14, and models trained before that still write section 5 TMG into German footers. Neither one opens the other forty templates sitting in your repository.
Free, with no key and no account: checking the template open in your editor against all fourteen rules, with the statute and the fix on every finding. The same engine runs free in the browser on the product page. The licence covers one thing: sweeping every template in the workspace and writing one dated audit report file.
Outside counsel reads one email footer against CAN-SPAM, CASL and section 5 DDG at roughly $300 an hour, and reads it once, on the day you ask. A template repository changes every week. The licence is $29, once, and the fourteen rules run on every commit you make afterwards.
A general AI chat answers from training data with a cutoff date, cannot read your repository and names no rule version. Email Footer Lint - CAN-SPAM, CASL and GDPR unsubscribe checks the file you open against 14 rules, each naming its legal or official basis, from a rule set dated 2026-09-20, and points at the exact line with the fix. For a filing, an audit or a client you need that dated result on your own files.
One question, answered by the person who built it. Your email only if you want the answer sent.
Paste this code into your page. It runs in your visitor’s browser and stays up to date. Nothing your visitors type is stored.
For businesses: your name and logo instead of ours, and each visitor’s result + e-mail in your inbox (only when they tick consent) — Pro from $19/month. See Pro →