Redact PII from Text & Logs: Free & Private

It finds emails, phone numbers, card numbers, API keys, and similar values in text-based files (plain text, logs, JSON, CSV, Markdown, HAR, YAML, and .env) and lets you replace them before you share the result. No PDFs or Word docs; pdf-toolkit's Redact tool handles those instead, by editing pixels rather than text.

Everything runs on your device. No file or pasted text is ever sent anywhere: disconnect your internet connection after the page loads and scanning, review, and export keep working.

What It Catches

Personal data
Emails, phone numbers (checked against real numbering plans), IP/MAC addresses, credit cards (Luhn checksum), IBANs (mod-97 checksum), so a random 16-digit number won't get flagged on looks alone.
National IDs
US SSN, Canada SIN, UK NINO, Germany Steuer-ID, France NIR, Italy Codice Fiscale, Spain DNI/NIE (checksum-validated where the format has one), plus EU VAT, US routing numbers, and EINs.
Secrets
AWS/GCP/GitHub/Slack/Stripe/OpenAI/Anthropic key formats, JWTs, private key blocks, connection strings, and password assignments.
Anything unusually random
A catch-all for high-entropy tokens shaped like a key or secret with no recognizable prefix. Every category can be turned off, or any single match dismissed or allowlisted.

Five Ways to Redact a Match

Each category picks its own mode: mask card numbers while pseudonymizing emails, in the same pass.

Mode What happens to the match Good for
Pseudonymize (default) A placeholder like <EMAIL_1>; the same value always gets the same placeholder throughout. Staying readable: you can tell two matches were the same value without seeing it.
Mask Asterisks, capped at 12 characters regardless of the original's length. Signaling "something was here" without hinting at its real length.
Redact A flat [REDACTED] marker, identical for every match in the category. Hiding whether any two matches were even the same value.
Remove Deleted outright, and the surrounding text closes over the gap. Cases where even a placeholder says too much.
Highlight only Unchanged in the export; only flagged in the review list. Eyeballing what got flagged before changing anything.

From Paste to Copy

  1. 1.Paste from your clipboard, or drop one of the formats above.
  2. 2.Review each match with its exact line in context: toggle a category off, dismiss one match, or allowlist a value for good.
  3. 3.Copy or save the result, ready to share or paste into an AI chatbot.

What It Won't Do (Yet)

  • One file or paste at a time: no batch mode yet for a whole folder of logs in one pass.
  • Text-family formats only: .txt, .log, .json, .csv, .md, .har, .yaml, .yml, .env. No PDF or Word support.
  • Detection is pattern- and checksum-based, not name recognition, so it won't catch "John Smith" in a paragraph unless it happens to match one of the categories above. That's a deliberate boundary, worth knowing before you rely on it for prose full of names.

Frequently Asked Questions

Is any of my text or file data uploaded anywhere? +
No. Every scan and every redaction happens on your device, inside your browser. Nothing you paste or drop is ever sent anywhere: you can disconnect your internet after the page loads and it keeps working.
What kinds of sensitive data does it catch? +
Emails, phone numbers, IP and MAC addresses, credit card numbers (checksum-validated), IBANs, JWTs, and a rulepack of API keys and secrets (AWS, GCP, GitHub, Slack, Stripe, OpenAI, Anthropic, private key blocks, database connection strings, and generic password assignments), plus unusually random-looking tokens. National ID numbers are checksum-validated for the US (SSN), Canada (SIN), UK (National Insurance Number), Germany (Steuer-ID), France (NIR), Italy (Codice Fiscale), and Spain (DNI/NIE), plus a structural EU VAT number pattern you can turn on.
What does "pseudonymize" mean here? +
Instead of just blacking a value out, the same original value is always replaced with the same placeholder, e.g. every occurrence of one email becomes <EMAIL_1> everywhere in the text. That keeps the scrubbed text readable and cross-referenceable. Every category can instead be set to Redact (a plain [REDACTED] marker), Mask (********), Remove entirely, or Highlight only (flagged for your own review but left completely unchanged in the exported file).
Can I see the final result before I export it? +
Yes. "Preview Final Outcome" shows the entire document exactly as it will be exported: replaced values in green, highlighted-only values in yellow, removed values marked with a small gap indicator, built from the same logic as the actual Copy/Save, not a separate approximation.
Can I keep a specific match from being redacted? +
Yes. Every match in the review list has a dismiss action to keep that one instance as-is, and you can add a value to a permanent allowlist so it's never flagged again.
Does this work on log files, JSON, and CSVs? +
Yes, paste text directly or drop a .txt, .log, .json, or .csv file and it's scanned the same way. Structure-aware column and field detection for CSV/HAR is on the roadmap; today every format is scanned as text, which already catches the sensitive values inside them.