Remove email addresses from text

Only the email detector is on for this page, so nothing else in your text is touched. Every address becomes [EMAIL_1], [EMAIL_2] and so on, with the same address always getting the same number.

It handles the awkward shapes that trip up simple find-and-replace: plus-tagging (sam+invoices@…), subdomains (@mail.acme.co.uk), long modern TLDs, dots and apostrophes in the local part.

Replace with
network while you type: 0 requests

Your text

0 characters

Safe to paste

waiting for text
The cleaned version appears here as you type — highlighted so you can see exactly what changed.
CtrlEnter
no personal data yet Everything below happens in this browser tab. Nothing is uploaded, and nothing you type is saved.

    Preset: email addresses only.

    What to look for — 30 detectors, custom terms, exceptions

    People & organisations

    Government & health IDs

    Financial

    Technical & secrets

    Location

    For the things no word list can know: internal codenames, unusual surnames, a product that isn’t public yet. Custom terms are never saved.
    Values on this list stay in the text and out of the mapping — useful when the model needs your own company name to answer usefully.
    Step 3 — paste the AI’s answer here to put the real values back

    The model replies using the placeholders. Paste its answer below and every [NAME_1] becomes the real name again — using the mapping held in this tab, which is the only copy that exists.

    How it works

    1. Open this page — the detectors are already set for “Remove email addresses”.
    2. Paste your text, or drop a .txt, .md, .csv, .json or .log file onto the panel.
    3. Check the highlights: every match is coloured by type, and one click keeps a type as-is.
    4. Copy the safe version and paste it into the AI tool of your choice.
    5. Paste the model’s reply back into step 3 to restore the real values.

    Why replace rather than delete

    Deleting addresses breaks the sense of a thread: you can no longer tell who was on the To line, whether the same person appears twice, or that a reply went to a different address than the original. Numbered placeholders keep all of that and carry none of the identity.

    It also makes the round trip possible. Ask a model to draft a reply mentioning [EMAIL_1], paste its answer into step 3, and the real address comes back — the mapping only ever existed in this browser tab.

    Where email addresses hide

    Header blocks are obvious. The ones that get missed are inside URLs (?email=sam@…), inside JSON exports, in log lines, in email signatures pasted at the bottom of a quoted thread, and in “mailto:” links copied out of a web page. Because the detector works on the raw text rather than on a parsed document, it finds all of those.

    An address is also personal data in itself — under the GDPR it identifies a person directly, and it is one of the eighteen HIPAA Safe Harbor identifiers. That is why it is worth removing even when the rest of the text looks harmless.

    Tips

    Detectors are pattern-based and imperfect: read the highlighted output before you paste it anywhere, and confirm your own confidentiality obligations against the current rules for your profession, employer or jurisdiction. Compiled 2026-07-29.

    Frequently asked questions

    Does it catch obfuscated addresses like “sam [at] acme [dot] com”?

    No. Those are not addresses by any pattern, and matching them reliably would drag in far too much ordinary text. Add such variants to custom terms if you need them gone.

    Are the addresses I paste stored or sent anywhere?

    Neither. The detection runs in your browser, there is no upload endpoint on this site, and the page keeps working with your network disconnected — which is the easiest way to check the claim yourself.

    Can I get a list of the addresses that were found?

    Yes — “Save key file” downloads the placeholder-to-value mapping as JSON. Remember that file undoes the redaction, so treat it like a password and delete it when you are done.