PreviewGDPR Art. 5 · Art. 9 · Art. 17 · Art. 30

EU personal data, confirmed by its own check digits.

pii-eu finds national ID numbers, IBANs, cards, contact and health data in your code, test files, logs and exports, proves each match with the identifier's own rules, and drafts your GDPR record of processing from the software itself.

$ pii-eu scan .

Supporting evidence for your record of processing, not legal advice. Found values are masked in every report.

tests/fixtures/users.json
    Confirms identifiers from
    27 EU statesEEASwitzerlandUnited Kingdom24 languages
    Knows the rules of
    The problem

    GDPR asks where personal data lives. Most teams answer from memory.

    The record of processing is a spreadsheet filled in from interviews, while the software keeps changing underneath it.

    01

    The record is a spreadsheet

    The data protection officer asks each team what they store. The answers are out of date the week after, and nobody can show where a line came from.

    02

    Personal data spreads by accident

    A real customer's ID copied into a test file, an email address written to a log, an export left in a shared folder. Nobody meant it, nobody noticed.

    03

    Scanners cry wolf, or miss Europe

    US-built tools miss most EU national IDs. Pattern searches flag every 13-digit order number, and after a few hundred false alarms nobody reads the report.

    How it works

    One command. Four things happen.

    pii-eu runs where your files already are, on a laptop or in CI, and nothing it reads leaves the machine.

    1 · Find

    Every value shaped like personal data

    Code, test files, logs, CSV and JSON exports, archives and saved container images, read in one pass. Each value is masked the moment it is found.

    • National IDs, IBANs, cards, VAT numbers, contact data
    • Log, error-tracker and analytics calls that pass personal data
    2 · Confirm

    Real, or just a lookalike

    Most identifiers carry their own proof: a check digit, a date of birth, a region code. pii-eu redoes that arithmetic, so an order number with the same shape is left alone.

    • 99.6% of warnings real on a mixed EU test corpus
    • Keywords in all 24 EU languages raise or lower confidence
    3 · Map

    A data map with a source for every line

    Schemas, models and Terraform become an inventory: which store holds which personal data, who receives it, and whether it can be erased.

    • GDPR Art. 9 special-category fields flagged
    • Stores without encryption, retention or EU residency
    4 · Decide

    New data waits for a person

    On every change, the map is compared with the last release. A new kind of personal data, or a new outside company receiving it, is held until someone approves it.

    • Reports in SARIF, GitHub, GitLab and HTML
    • A baseline, so only new findings fail a build
    Romanian personal number (CNP)tests/fixtures/users.json:5 · made up for this page
    Confirmeddate of birth, county code and check digit are valid
    Left aloneorder_id 5034172093861 has the same shape, but month 41 doesn't exist
    Data map · demo-apppii-eu map · 5 stores · 2 outside companies
    StorePersonal dataSource
    users PostgreSQLNational ID, email, phonedb/schema.sql:14
    patients PostgreSQLHealth data Art. 9migrations/0007.sql:4
    app logs CloudWatchEmail, via log.infocheckout/notify.py:13
    exports S3 · eu-central-1Customer CSV, encryptedinfra/s3.tf:3
    Stripe outside companyName, cardbilling/charge.py:21
    No erasure pathpatients has no delete, anonymising update or cascade
    Add diagnosis to patient recordsdemo-app · pull request #61 · db/migrations/0007_patients.sql
    pii-eu · data map changed since the last releaseNew special-category data · healthpatients.diagnosis holds health data (GDPR Art. 9). The record of processing needs a purpose and a legal basis before this ships.pii-eu map --diff · supporting evidence, not legal advice
    pii-eu data mapComparingChecking
    Who it's for

    One report, read by four teams

    Engineers set it up once. Privacy, security and audit read what it finds, each in their own terms.

    Privacy · DPO

    Your record of processing, drafted from the software

    Instead of interviews: every field that holds personal data, where it is stored and who receives it.

    • Special-category data flagged: health, biometrics, beliefs
    • Tables with no way to erase a person, or no retention limit
    • New data reported before release, not at the next audit
    Security · platform

    Personal data out of places it should never be

    The leaks that turn into incidents: logs, dumps, buckets and images.

    • Personal data passed to logs, error trackers and analytics
    • Exports, database dumps, archives and container images
    • Cloud storage outside the EU, unencrypted or kept forever
    Engineering

    Caught early, fixed in one step

    Quiet by design: few warnings, and the ones you get are real.

    • Checked before a change leaves the laptop
    • Real values in test files swapped for made-up ones that still pass every check
    • A baseline, so only new findings are reported
    Audit · consulting

    Evidence in an afternoon, not weeks

    One self-contained report per system, run on the client's own machines.

    • Every claim points to a file and line you can open
    • HTML for people, JSON and CSV for the GRC tool
    • Nothing to upload, nothing to install on a server

    Inside Clause Eight. pii-eu runs as one of Clause Eight's scanners, and its findings become evidence for the GDPR and, for card data, PCI DSS, next to everything else Clause Eight collects.

    99.6%of warnings real on a mixed EU test corpus
    44.6%for the same corpus with pattern matching alone
    32countries whose identifiers it confirms
    0bytes of your data sent anywhere

    Measured on 30,000 generated lines, one in three holding a valid identifier, the rest the noise real repositories are full of.

    Where it fits

    Between the spreadsheet and the generic scanner

    It keeps a scanner's speed and gives the privacy team the record they actually need.

    What you needGeneric PII scannersA hand-kept recordpii-eu
    Finds EU national ID numbersMostly US identifiersOnly what people remember32 countries, each by its own rules
    Tells real data from lookalikesPattern matches, many false alarmsNot applicableCheck digits, dates and region codes
    Drafts the Art. 30 recordNoYes, by interviewsFrom schemas, models and Terraform, with file and line
    Finds personal data in logs and analyticsRarelyNoLog, error-tracker and analytics calls
    Stays currentPer scanOnce a yearCompared on every change
    Keeps your data in houseCloud tools copy it outYesOne program, no network calls

    Typical capabilities by category; individual products vary.

    Benchmark

    Same 30,000 lines, three scanners, default settings

    10,000 lines hold one generated EU personal-data value; 20,000 are the noise real repositories are full of: order numbers, timestamps, hashes, versions and amounts. Every value belongs to nobody.

    pii-eu preview build

    Lines with personal data caught50.2%
    False alarms on 20,000 clean lines5
    Warnings that were real99.9%
    Time for 30,000 lines0.35 s

    Reports a value only when its own rules hold, or a keyword is nearby. Quiet by design.

    Microsoft Presidio 2.2.366

    Lines with personal data caught46.0%
    False alarms on 20,000 clean lines9,541
    Warnings that were real32.5%
    Time for 30,000 lines56.1 s

    Default analyzer with spaCy, scores of 0.5 and above. At any score it catches 81.6% of lines, with 12,236 false alarms.

    scrubadub 2.0.1

    Lines with personal data caught9.4%
    False alarms on 20,000 clean lines1,011
    Warnings that were real48.2%
    Time for 30,000 lines1.1 s

    Default scrubber: emails, phone numbers, cards, URLs, credentials and US social security numbers. No EU national identifiers.

    Identifiers all three claim to find
    caught / warnings that were real
    Presidioscrubadubpii-eu
    Payment cards80.6% / 37.8%0% / –88.5% / 98.4%
    IBANs100% / 100%not covered100% / 100%
    Phone numbers44.4% / 100%61.1% / 4.4%84.9% / 100%
    Email addresses100% / 100%100% / 100%44.9% / 100%, with a nearby keyword by design

    Where the others are ahead: Presidio and scrubadub report every email address; pii-eu reports contact data only next to a keyword such as email, so a codebase full of example addresses stays quiet. Turn that off with --min-confidence low.

    Why pii-eu catches half: half of the values sit under a neutral name with no keyword, and bare numbers with a single check digit, such as Nordic and Baltic codes, stay quiet at the default level. With --min-confidence low --countries eea it catches 74.1%, with 786 false alarms and 90.4% of warnings real.

    Measured on 30 October 2026 on one Apple laptop, each tool's own defaults, scored per line: a flag on a labelled line is a catch, a flag on a clean line is a false alarm. Presidio's catches count any entity on a labelled line, which favours it. The corpus generator ships with pii-eu.

    Security and trust

    It reads personal data. It keeps none of it.

    A privacy tool that leaks is worse than none, so it is built to hold nothing.

    Nothing leaves the machine

    One static program with no network calls, no account and no telemetry. It runs on a laptop or your own CI runner.

    Values always masked

    Reports, logs and fingerprints show RO72 •••• 7559, never the full value. Full values print only to your terminal, and only when you ask.

    Built without real data

    Every value it was tested on is generated by its own test suite. No employer, client or real person's data, ever.

    A source for every claim

    Each line of the data map names the file and line it came from, so a DPO can check it and an auditor can trust it.

    Reports your tools already read

    SARIF, GitHub annotations, GitLab code quality, JSON, CSV and a self-contained HTML report.

    Safe on hostile input

    Archives are opened with limits on size, entries and depth, so a crafted file can't exhaust the machine.

    What it doesn't do

    Saying this plainly is part of the product.

    Does it make us GDPR compliant?

    No. It gives you evidence and a draft data map. Purposes, legal bases, contracts and people's rights still need people.

    Does it find every name and address?

    Not always. Names and addresses have no built-in check, so it reports them only next to a label such as full_name. National IDs, IBANs and cards are where it is strongest.

    Does it look at our live databases?

    No. It reads code, schemas, configuration and the files you point it at, such as exports and saved images, not running systems.

    Which languages and formats?

    Text in any language. Log calls in Go, Python, JavaScript and TypeScript, Java, Kotlin, Ruby and PHP. SQL schemas and ORM models, CSV, JSON Lines, archives, saved container images and Terraform.

    Is it available now?

    Not yet. pii-eu is in preview with a small group of early partners, and ships inside Clause Eight.

    Early access

    Four weeks, two of your systems

    For privacy and engineering teams in EU companies that build their own software: fintech, health, retail and SaaS.

    Week 1

    Scan

    Run pii-eu on two repositories and their test data, on your own machines.

    Weeks 2 to 3

    Review

    Go through the findings with your DPO, set a baseline and replace real data in test files.

    Week 4

    Hand over

    A draft data map for your record of processing, and the check running on every change.

    Success looks like: no real personal data left in test files, a data map your DPO recognises, and new personal data caught before it ships.

    Pricing

    Priced by repositories, not by people

    Your DPO, security lead and auditor read the reports too, so you never count heads. pii-eu is sold on its own; Clause Eight customers already have it.

    Yearly: 2 months free

    Team

    An engineering team that wants personal data out of its code, test data and logs.

    €290a month

    Billed monthly, cancel any time

    Up to 10 repositories

    • Every detector, 32 countries, 24 languages
    • Check-digit confirmation and masked reports
    • Personal data in logs, error trackers and analytics
    • fix for test data, baselines, pre-commit
    • Reports for GitHub, GitLab, Bitbucket and SARIF
    Ask for early access

    Enterprise

    Groups, banks and health providers with many systems or no internet on build machines.

    From €12,000a year

    Annual contract

    Unlimited repositories

    Everything in Privacy, plus
    • A licence file for offline and air-gapped machines
    • A data processing agreement, agreed with you
    • Onboarding for your privacy and platform teams
    • A service level agreement
    Talk to us
    For auditors and consultants

    Partner licence

    Run pii-eu on your clients' systems, on their machines, and hand over one self-contained report per client.

    €390per client report

    €4,900a year, unlimited client reports

    Compare every feature
    FeatureTeamPrivacyEnterprise
    Finding
    Repositories1050Unlimited
    Every detector, confirmed by its own rules✓✓✓
    Personal data in logs, error trackers and analytics✓✓✓
    Exports, dumps, archives and container images–✓✓
    Fixing
    fix for test and fixture files✓✓✓
    Baseline, pre-commit and CI templates✓✓✓
    Evidence
    SARIF, GitHub, GitLab code quality, JSON✓✓✓
    Inventory and data map, map compared on every change–✓✓
    Art. 9, erasure and retention checks–✓✓
    HTML evidence report–✓✓
    Contract
    Runs on your machines, no network calls✓✓✓
    Offline licence file––✓
    Data processing agreementStandardStandardAgreed with you
    SupportStandardPriorityService level agreement

    Every plan starts with four weeks of early access: €900, credited against your first year if you stay.

    Already a Clause Eight customer? pii-eu is included in every Clause Eight plan, with its findings mapped to the GDPR and PCI DSS.

    Prices exclude VAT. Extra repositories are €20 a month each. Prices are for the preview and may change before release.

    Know where personal data lives.

    Pick two systems. In four weeks you'll have a data map drafted from the software and a check that keeps it current.

    contact@clauseeight.eu