EUComply
  • EN
Open source · MIT

Compliance scanning in your terminal.

eucomply-scanner checks any URL for GDPR, NIS2, DORA and EAA technical gaps in seconds. Any CMS, any stack — one command.

Get started Try the web version

Install & run

Requires Node.js 18+. No sign-up, no API key, no tracking.

# Install from npm
npm install -g @mahope/eucomply-scanner
eucomply-scanner https://yourdomain.com

# Run without installing
npx github:mahope/eucomply-scanner https://yourdomain.com

# Or clone & run locally
git clone https://github.com/mahope/eucomply-scanner
cd eucomply-scanner && node cli/eucomply.js https://yourdomain.com

All three run the same scanner. It is MIT licensed and the source is on GitHub.

Read this before you run it against someone else's URL

The published package is 1.0.1, released before the network guard was finished. It refuses private IP addresses written as literals — 127.0.0.1, 10.0.0.0/8, 169.254.0.0/16 — but it does not look up DNS and it does not check where a redirect lands. So a hostname that resolves to a private address, or a public URL that redirects to one, is still fetched.

In CI that matters: a build that scans URLs from a ticket, a CMS field or a sitemap is fetching on behalf of whoever wrote that URL. The scanner here is the one to prefer if you can run it from source in this repository — it resolves DNS, refuses private targets, and validates every redirect hop. We are publishing the hardened engine as 1.1.0; until then, source is the safe path.

Nothing about this changes the nine checks or their results. It is only about which network targets the scanner is allowed to reach.

Example output — a real run of this scanner against webflow.com, captured 28 September 2026 from 510,616 bytes of served HTML. Regenerate it from the engine with python3 tools/build_cli_example.py in the GitHub repo; the quality gate fails if the two ever differ.

$ eucomply-scanner https://webflow.com

🔍 EUComply Scan Report for https://webflow.com/
   Platform: Webflow  |  Duration: 67ms
   Score: 3/6 of the checks that apply to this site (50%)

   - not counted: tcf — Not counted here — IAB TCF only applies to a site that runs programmatic advertising in the EEA.

   - not counted: consent_mode_v2 — Not counted here — Consent Mode v2 is only required of a site that runs Google Ads in the EEA.

   - not counted: dora — Not counted here — DORA applies to financial entities, and a public page scan cannot tell whether the operator is one. This scan is not a DORA assessment.

   All 9 checks: 3/9 (33%)

 ❌ No Google Consent Mode v2 detected
    No Consent Mode v2 signals found. Since March 2024, Google requires Consent Mode v2 for ad personalization in the EEA. Without it, Google Ads conversion tracking may be restricted.
    💡 Implement Google Consent Mode v2 with the default consent state for ad_storage and analytics_storage. See https://developers.google.com/tag-platform/security/guides/consent.

 ❌ No IAB TCF detected
    No IAB Transparency & Consent Framework signals found. TCF is used by ad-tech platforms and publishers for GDPR consent management in programmatic advertising.
    💡 If you run programmatic ads in the EEA, implement IAB TCF through your CMP. See https://iabeurope.eu/tcf/.

 ❌ 1 tracker(s) with NO consent platform
    Trackers found in page markup: Google Analytics / GTM. No consent management platform was found — these trackers likely fire before consent.
    💡 EU ePrivacy rules and GDPR Art. 6 require consent BEFORE loading non-essential trackers. Install a CMP that blocks Google Analytics/Meta Pixel etc. until the visitor consents.

 ✅ HTTPS + HSTS OK
    HSTS: max-age=31536000

 ⚠️ No consent banner detected
    No known cookie-consent platform found in the HTML. If you set any non-essential cookies, EU ePrivacy rules require prior consent.
    💡 Add a consent management platform (e.g. one of the open-source options: Klaro, Tarteaucitron).

 ✅ Form(s) found, privacy-policy link detected
    Form markup found and a privacy-policy link was detected in the page HTML.

 ✅ 3 legal pages linked
    Found on page: Privacy / GDPR, Cookie policy, Terms & Conditions.

 ⚠️ 1 security header missing
    Missing: X-Content-Type-Options: nosniff missing
    💡 Add security headers. See https://securityheaders.com for guidance on each.

 ❌ No DORA-related page signals detected
    No page-text references to failover, incident response or continuity were found. This scan does not query DNS or assess DORA compliance.
    💡 Review whether the site publishes useful failover, incident-response and business-continuity information. Verify DNS and regulatory controls separately.

Automated technical checks only — not legal advice. Full compliance review requires a qualified professional.

What it checks

Nine automated technical checks against EU requirements:

HTTPS + HSTS

TLS encryption and Strict-Transport-Security header (GDPR Art. 32).

Cookie consent

Detects 15+ consent platforms (Cookiebot, OneTrust, CookieYes…). ePrivacy Directive.

Forms & privacy link

Forms without a visible privacy-policy link are a top enforcement target (Art. 13).

Legal pages

Privacy policy, imprint, terms and EAA statement linked from the homepage.

Security headers

CSP, X-Content-Type-Options, Referrer-Policy — OWASP baseline, NIS2 Art. 21.

DORA disclosures

Operational-resilience information financial entities must publish under DORA.

Why a CLI?

  • CMS-independent — works on WordPress, Shopify, Webflow, Next.js, Squarespace, Wix or hand-written HTML. The scanner only needs a URL.
  • CI-friendly — pipe results into your build pipeline and fail deploys when compliance regressions appear.
  • Fast — one request to the page (plus a DNS safety check that refuses private addresses), so a scan is sub-second. No agent to install on the target server.
  • Honest output — every check prints its verdict, passed, needs a look, failed, with the exact evidence it found and what that means. We never claim legal certainty a script can't have.

Need editable WordPress documents?

The CLI is free forever. The current Pro license is for the WordPress plugin and provides editable HTML document starters plus an HTML report from the latest WordPress scan. Hosted monitoring is not included.

Buy Pro — $79/year per website →