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

EU personal data, confirmed by its own check digits.

ATO, Clause Eight's EU personal-data scanner, 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.

$ ato 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

    Many scanners check only a few EU national IDs, and few look in code before it ships. 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.

    ATO 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. ATO redoes that arithmetic, so an order number with the same shape is left alone.

    • 99.4% of warnings real on open-source application code
    • 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-appato 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
    ATO · 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.ato map --diff · supporting evidence, not legal advice
    ATO data mapComparingChecking
    Benchmark

    On real application code, ATO catches more and cries wolf less.

    Three open-source shops, 3,000 EU identifiers hidden in their fixtures, migrations and tests, and three scanners at their default settings.

    88.7%of the personal data caught. Microsoft Presidio caught 54.1%.
    99.4%of its warnings real. Presidio's: 19.2%.
    17false alarms in 96,365 lines of code. Presidio raised 6,826.
    58×faster than Presidio on the same code, on one laptop.
    Personal data caughtof 3,000 identifiers inserted into the code
    Warnings that were realthe rest are alarms on the original code
    Personal data passed to logs, error trackers and analytics15 generated functions per pattern, in Python, JavaScript and TypeScript
    Copied between variables15 / 5
    Wrapped in a call15 / 5
    A string method on the field15 / 0
    Inside a template string15 / 5
    With a default value15 / 5
    In a structured log15 / 5
    Sent to an error tracker15 / 15
    Sent as an analytics event15 / 0

    Both left alone every harmless lookalike: a length, a verified flag, a masked value, an ID. In a second test across eight languages, ATO caught 160 of 160 and HoundDog 60 of 160, with nothing found in Kotlin, PHP, Ruby or TypeScript.

    Where the others are ahead

    Presidio reports every email and every card number, so it catches more of those two, and pays for it with thousands of alarms: most emails in code are fake, and most card-shaped numbers under id or ref are IDs.

    How it was measured

    Fixtures, migrations, seeders and tests of Saleor, Bagisto and Solidus, plus an application log: 96,365 lines with 3,000 generated EU identifiers inserted. Every tool at its defaults; Presidio without its prose recognisers. Means of three runs, 31 October 2026. On a fully generated 30,000-line corpus: ATO 57.7% caught and 99.8% real, Presidio 35.4% and 51.7%.

    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. ATO 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.

    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 recordATO
    Finds EU national ID numbersA few EU identifiersOnly what people remember26 EU states by default, 31 countries in all, 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.

    Planned pricing

    Priced by repositories, not by people

    Shown for planning while ATO is in preview: it is not for sale yet, and prices may change before it is. Your DPO, security lead and auditor will read the reports too, so you never count heads.

    Yearly: 2 months free

    Team

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

    €390a month

    Planned price, not on sale yet

    Up to 10 repositories

    • Every detector, 31 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 and SARIF
    About early access

    Enterprise

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

    From €18,000a year

    Planned, annual contract

    Unlimited repositories

    Everything in Privacy, plus
    • Offline and air-gapped machines
    • Onboarding for your privacy and platform teams
    About early access
    For auditors and consultants

    Partner licence

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

    €590per client report, planned

    €7,900a year, unlimited client reports, planned

    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 and air-gapped machines––✓
    SupportStandardPriorityAgreed with you

    Early access will come first: four weeks on two of your systems, before anything is sold.

    With Clause Eight: ATO is planned to be included in every Clause Eight plan, with its findings mapped to the GDPR and PCI DSS.

    Planned prices, excluding VAT; extra repositories €30 a month each. Nothing is for sale during the preview.

    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.

    No network calls

    One static program with no account and no telemetry. It runs on a laptop or your own CI runner, and works with networking turned off: check it yourself.

    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 a client's files

    Archives are opened with limits on size, entries and depth, and git never runs commands from the folder being scanned.

    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?

    No. Names and addresses have no check digit. Name and address detection is off by default and, when switched on, 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. ATO is in private preview and not for sale. It will be sold on its own and as part of Clause Eight.

    Early access

    When early access opens: four weeks, two of your systems

    ATO is in private preview and not for sale yet. Early access will be for privacy and engineering teams in EU companies that build their own software: health, HR and payroll, insurance, education and SaaS.

    Week 1

    Scan

    Run ATO 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.

    Know where personal data lives.

    A data map drafted from your software, and a check that keeps it current. In private preview now.

    In private preview, not for sale yet.