Sensitive Data Scanner

Find emails, card numbers, keys and tokens in text or logs and redact them — or swap them for reversible stand-ins before an AI sees them.

Runs locallyWorks offlineShare link carries settings, never your data
Send output toBase64 Encode / DecodeCode FormatterRegex Tester & BuilderBuild a workflow from thisOutput stays on this page until you send it.

Frequently asked questions

Will it find names and addresses?

No. Those have no recognisable form; detecting them needs a language model, and a scanner that claimed to would be wrong often enough to be dangerous. It finds the structured kinds — contact details, financial identifiers, network addresses, credentials — and tells you that is all it looked for.

Why is a phone number marked medium confidence?

Because eight to fifteen digits with separators is also an order number, a tracking code or a timestamp. The shape is right often enough to be worth reporting and wrong often enough to deserve a look. High-confidence kinds are the ones with a checksum or a provider prefix.

Which redaction style should I use?

Labels when the text will be read by someone who needs to understand its structure — a bug report, a support ticket. Masks when entries must stay distinguishable and nobody needs to write back — a CSV where the last four digits or the email domain tell the rows apart. Stand-ins when something will reason over the text and hand you an answer to read, which in practice means an AI assistant: they are the only style you can reverse.

Can I use this before pasting something into ChatGPT or Claude?

That is what the stand-in style is for. Scan the text, add any names or company names to the box underneath, switch the style to stand-ins, and copy the result: every email, number, key and listed term is replaced by a consistent made-up one of the same kind, so the assistant can still follow who is who. Paste its reply into the Restore box and the real values come back. Be aware of what still goes over: the rest of the text, which can identify people on its own if it is detailed enough.

How do I get the real values back?

Open the Restore tab and paste the reply. Every stand-in the assistant repeated is swapped for the value it stood for, in the tab, and the count underneath says how many were put back. The mapping comes from the text still in the box above; if you cleared it or came back the next day, load the mapping file you saved.

Is a stand-in the same as anonymising the data?

No, and the difference matters legally. Anonymous data cannot be traced back to a person by anyone. Here the mapping does exactly that, which makes the text pseudonymised — still personal data under the GDPR and most comparable law, and still your responsibility. What it changes is exposure: the party you paste into gets far less, and the part that identifies people stays on your device.

Can it scan a whole file?

Yes, up to two million characters, which covers most logs and exports. Open a .txt, .csv, .json, .log or .env file, or drop it on the text box. The file is read in the tab and never uploaded; the redacted download is written in the tab too.

Is my text sent anywhere?

No. Everything runs locally in your browser using standard web APIs — your text, files and inputs are never uploaded to a server, so the tool works even offline once the page has loaded.

Is it free?

Completely. There is no sign-up, no account, no watermark and no usage limit. The tool is supported by unobtrusive ads, not by selling or processing your data.

Pro tips

  • Scan a config file before committing it: an AWS key or a password assignment is exactly what this catches and exactly what a repository scanner will catch later, publicly.
  • Turn off the medium-confidence kinds when scanning numeric data such as invoices — otherwise every amount is a candidate phone number.
  • Use the label style for logs you are attaching to an issue; the reader keeps the structure and loses the customer.
  • Check the highlighted view before trusting the redacted copy: a finding that is not what it seems can be turned off by kind.
  • Pair it with the Document Privacy Inspector for Office and PDF files, and the EXIF tool for photos — this scanner is for text.
  • Before an assistant sees it: list the names and company names in the terms box, switch to stand-ins, and keep the tab open between the question and the answer — the mapping lives there. Save the mapping first if the answer will come later.
  • Check one stand-in in the mapping list before sending: if a value you expected to be replaced is missing, its kind is switched off or it has no shape, and it is still sitting in the text.

About Sensitive Data Scanner

Every finding is a shape — a card number that passes the Luhn check, an IBAN that passes mod-97, a key with the prefix its provider uses — and each one is marked with how confident that shape is. What the scanner cannot do is know that a word is a person's name or a street; it says so on the page rather than implying a clean result means anonymous data. Findings can be labelled, masked, or replaced by stand-ins that keep the shape of what they replace — one stand-in per value, a mapping kept in the tab and nowhere else, and a Restore box that puts the real values back into whatever an assistant replied.

Before a log goes into a bug report, a CSV export goes to a contractor, or a config file gets pasted into a chat, somebody should read it for what it gives away. Nobody does, because a log is ten thousand lines. This scanner reads it for you, looking for sixteen shapes that personal and secret data take: email addresses, phone numbers, IPv4 and IPv6 addresses, GPS coordinates, card numbers, IBANs, US Social Security numbers, JSON Web Tokens, AWS, GitHub, Slack and Google keys, private-key blocks, credentials embedded in URLs, and passwords or tokens sitting on the right of an equals sign.

Shapes that can be checked are checked, which is what keeps the results useful. A run of sixteen digits is reported as a card only if it passes the Luhn checksum, so order numbers and timestamps do not light up; an IBAN must pass its mod-97 test; an IPv4 address must have four octets in range, so a three-part version number is left alone. Kinds that cannot be verified — phone numbers, coordinates, a four-part version number that is indistinguishable from an address — are marked medium confidence and listed second, because they will sometimes match other numbers.

The result is shown two ways. The highlighted view marks each finding in place, with a list beside it showing the kind and a partial mask — enough to recognise which customer or which key without reproducing it. The redacted view is a copy of the text with every finding replaced, either by a label such as [EMAIL] and [CARD] that keeps the text readable, by a mask that leaves the last four digits and the domain so a colleague can still tell entries apart, or by a stand-in — a made-up value of the same kind that can be swapped back afterwards. Copy the result, or download it as a file.

Stand-ins exist for the thing people now do daily: pasting a log, a ticket or an export into an assistant that belongs to someone else. A label destroys what the model needs, because [EMAIL] three times over could be three customers or one. A stand-in keeps that thread — each distinct value gets one stand-in, used everywhere it appears, however it was spelled — and keeps the shape, so an email still looks like an email and a card number still passes the Luhn check. The made-up values come from the ranges reserved for documentation: 192.0.2.x for addresses, example.com for mail, the 555-01xx telephone block, so no stand-in can be somebody's real server or mailbox. Paste the clean copy into the assistant, then paste its answer into the Restore box to read it with the real values back in place.

The mapping between real values and stand-ins sits in the tab and goes nowhere on its own — not into a share link, not into a saved copy. Copy it or save it as a JSON file if you will restore a reply in a later session, and keep it where you keep the original data, because the mapping is the key. That is also the reason this is pseudonymisation rather than anonymisation: while the mapping exists, most privacy law still treats the text as personal data. It lowers what you hand over; it does not put the text outside the rules.

It is honest about its limits because the limit matters. Detection is by form, not meaning: a person's name, a street address, a date of birth written in words, or a diagnosis have no shape a pattern can recognise, and no finding here says anything about them. A clean result means none of the sixteen shapes were present. It does not mean the text is anonymous, and the page says exactly that above the findings. Names, companies and project code names have to be typed into the box under the text; once listed they are matched literally, whatever their capitalisation, and replaced like any other finding.

Common use cases

  • Cleaning a server log of customer emails and IP addresses before posting it to a public issue.
  • Checking a CSV export from a CRM for card numbers or SSNs that should never have been in it.
  • Catching a leaked API key or password in a config file before it is committed.
  • Redacting a support transcript for a training deck.
  • Auditing a data sample from a vendor for identifiers before agreeing to process it.
  • Asking an AI assistant to diagnose a production log or draft a reply to a customer ticket, then restoring the real names and addresses in its answer.
How it comparesMicrosoft Presidio and AWS Comprehend detect entities including names and addresses, and they do it with models running on a server, which is the trade this tool refuses. gitleaks and trufflehog are the standard for secrets in repositories and cover many more provider key formats. This scanner sits between them for a single file: the common personal-data and credential shapes, verified where possible, with in-place redaction, in the browser, without the text leaving it. For the AI case specifically, the closest comparisons are LLM-gateway products that sit between you and the model and do the masking on their servers, which reintroduces the party you were trying not to involve; here the mapping never leaves the tab.