Choose the patterns to mask and review the output before sharing. Masking is pattern-based: names, addresses, IPv6 and secrets without a recognisable key stay in the text.
Runs locally in your browserPaste the text — a log excerpt, a JSON body, a CSV line — tick the patterns you want to hide and press Mask data. Every match is replaced by a numbered placeholder such as [email_001]; the same value always receives the same placeholder, so two lines that share a token stay comparable in the output.
The work runs in this browser: nothing is uploaded, the page keeps working offline, and the summary line counts what was replaced. Switch Replacement style to Partial redaction to keep a recognisable head and tail — alex@example.com becomes a•••@example.com, 203.0.113.42 becomes 203.0.•••.••• — instead of a numbered token.
The email rule matches a local part and a domain, including accented letters and internationalised domains, so josé@example.com and user@münchen.de are both replaced. A tagged address such as a+tag@Example.COM is masked once and keeps a single placeholder, and punctuation is left outside the match: "contact a@b.co, or b@c.example.org." becomes "contact [email_001], or [email_002].".
The IP rule covers IPv4 only: four dot-separated groups of at most 255 each. A version string written as four short groups, such as 1.1.1.4 in "openssl 1.1.1.4", matches that shape and is masked as an address. IPv6 is not covered by any rule — 2001:db8::1 passes through untouched — and a dotted quad stays readable when you untick IP addresses.
A credential value is masked when a recognised key is followed by a colon or an equals sign and at least four characters: api_key, access_token, refresh_token, password, passwd, secret and token, with a prefix such as db_password, MY_SECRET or the x-api-key header, and their plurals. Values written after the Basic and Bearer schemes of an Authorization header are masked as well.
Phone detection is limited to values that have a phone shape: a + country prefix, parentheses, grouped digits such as 415-555-0199, 030 12345678, +49 30 12345678 or 99 88 77 66 55, or a bare run of ten or eleven digits. A bare run of sixteen digits and up is treated as a card number and masked too, so 4111111111111111 and 4111 1111 1111 1111 both disappear.
Dates, timestamps, decimals and long identifiers keep their shape: 2026-09-24, 24.09.2026, 09-24-2026, 2026-09-24T12:30:00Z, 3.14159265 and ts=1718000000000 all pass through unchanged. That is a fix, not a gap: the previous version of this page masked a date on its own and turned the log line 2026-09-24 12:30:00 into [phone_001]:30:00, which made the field it was meant to protect unreadable.
Names, postal addresses, IPv6 addresses and secrets with no recognisable key — a bare base64 blob, a password written without its field name — stay in the text, and so does anything outside the four groups. Running the tool a second time over its own output changes nothing, because a bracketed placeholder is not a match for any rule. For data that has to be fully anonymous, edit the result by hand as well.