CSV Column Masker

Files & data

Mask a column and keep its shape, before the spreadsheet leaves your hands.

Masked CSV
employee_id,name,email,phone,branch,salary E-1001,J*** C***,#########@acme.ph,#######1234,Cebu,45000 E-1002,A** R****,#########@acme.ph,#######4567,Davao,52000 E-1003,M*** S*****,###########@acme.ph,#######2222,Cebu,38500
3 rows · 3 columns masked
Rows3
Columns6
Masked3
Columns to mask
What was masked
nameKeep the initials3 cells · 3 distinct
emailKeep the email domain3 cells · 3 distinct
phoneKeep the last four3 cells · 3 distinct
Masking a column is not anonymisation. A masked name beside a job title, a branch and a start date still identifies one person, and a rare value — an unusual surname, the only row from one office — is identifiable from its shape alone. Read the output before you send it.

How to use

What it's for

Hide the private columns of a spreadsheet — names, emails, phone numbers, IDs — before you send it to anyone outside, while keeping the file usable.

Before you start

Have the spreadsheet open, or the .csv file in a text editor, and decide which columns are private. You paste the rows in; nothing is uploaded.

  1. Say how the columns are separated

    In Delimiter, pick Tab if you will copy from Excel or Google Sheets, or Comma for most .csv files. Leave First row is a header ticked if your first row holds the column names — that row is never masked.

  2. Paste the rows

    Copy the rows from your spreadsheet and paste them into the CSV box, replacing the sample. Your columns then appear under Columns to mask.

  3. Choose how to hide each column

    Each column has its own menu, on Do not mask at first. Keep the last four suits phone numbers, Keep the initials suits names, Keep the email domain keeps what follows the @, Keep the shape turns digits into # and letters into x, and Empty the cell clears it.

  4. Use a pseudonym when rows must still match

    Stable pseudonym swaps each value for a code, and the same value always gets the same code, so repeat customers can still be counted. If you use it, type any word in Salt (optional) at the top.

  5. Mask and copy

    Press Mask to bring the result into view — it also updates as you change things. Read the masked rows, then press Copy.

Reading the result

  • Masked CSV: your rows with the chosen columns hidden, ready to copy.
  • Rows, Columns and Masked: the rows of data, the columns in all, and the columns masked.
  • What was masked: each masked column with its style, how many cells it changed, and how many different values it held.

If it goes wrong

  • A note says rows do not have the same number of fields: a value holds the separator without quote marks, so the cells after it slid one column along — a private value may now sit in an unmasked column. Fix those rows and paste again.
  • Nothing changed: no column has a style yet. Choose one under Columns to mask.
  • With Stable pseudonym and no salt, anyone with this page can work out short values such as phone numbers from their codes: type anything in Salt (optional), and keep that word if two files must match.

What this is

Most people do this in Excel, and Excel is where it goes wrong. A spreadsheet of employees or customers has to go to a vendor, so somebody selects the email column and types over it. What gets missed is never the column they were looking at.

The shape is usually the point. An email masked to [email protected] is still shaped like an email, so it still passes the import the vendor is testing. [REDACTED] does not.

But the stable pseudonym is the one style here that survives a join. Mask a customer id to ##### and every row looks identical, taking the count of repeat customers with it. A pseudonym derived from the value stays the same for the same id, so the shape of the data survives even though the value does not.

And one warning matters more than it looks: the row with the wrong number of fields. A comma inside an unquoted address shifts every later field one place along — so the value you asked to mask is now in the next column, which nobody masked, and the file that comes out still looks clean.

Questions

Is my spreadsheet uploaded anywhere?

No. There is no upload and no file picker — you paste the rows in and the masking happens in your browser, in this site’s own calculation engine. Nothing is transmitted, logged or stored, which matters more here than on any other page: what people paste into this tool is a staff list or a customer export.

Why paste instead of choosing a file?

Because a file picker would add nothing and cost something. Reading a file is asynchronous and holds the whole spreadsheet in memory, and the result is the same rows you can select and copy out of Excel in two keystrokes. Pasting keeps the tool instant on a phone and keeps the promise simple: the data goes into a text box on a page, and the page does not talk to anything.

What does “keep the shape” actually keep?

Digits become #, letters become x, and everything else — the @, the dots, the hyphens, the spaces — stays. So an email still looks like an email and a nine-digit reference still has nine digits. That is usually what makes a masked file still usable for testing an import, because the column still validates.

What is the stable pseudonym for?

For when equal values have to stay equal. Masking a customer id to ##### makes every row look the same and destroys any count of repeat customers; replacing it with a pseudonym derived from the value keeps all of that, because the same id always produces the same token. It is the only style here that survives a join.

Can a pseudonym be turned back into the original?

Unsalted, yes — for anything from a small set. A pseudonym is a hash, and there are only ten billion Philippine mobile numbers, so a laptop tries all of them and matches every token in minutes. Put anything in the salt field and that stops working, at the cost of the tokens being different next time unless you use the same salt again. The page says which of the two it just did.

Why does it warn about rows with the wrong number of fields?

Because that is how the masking silently fails. A comma inside an unquoted address shifts every later field one place along, so the value you asked to mask is now sitting in the next column — which nobody masked — and the file that comes out still looks clean. Every such row is listed by number so you can fix the quoting before the file goes anywhere.

Does this anonymise the file?

No, and this is the limit worth reading twice. Masking a column removes one identifier, not identity. A masked name beside a job title, a branch and a start date still describes one person, and so does a rare value — an unusual surname, the only row from a small office — even after the letters are replaced. Read the output before you send it.

Why is the header row left alone?

Because a file whose columns are called xxxx is not anonymous, it is unusable — and somebody who cannot use it sends the original instead. The header names the columns; it does not contain anybody’s data.

The maths

What each style keeps
Keep the shapelength and punctuation
Stable pseudonymequality
Last foursupport matching
Initialsword count
Email domainthe company
Empty the cellnothing
Why the pseudonym is 12 hex

Twelve hex characters is 48 bits. The birthday bound puts an even chance of one collision at around 17 million distinct values. Six hex — what a token looks like in most tools — collides at about four thousand, which a staff list reaches. A collision here silently merges two people into one group.

Keep going

Important

Nothing you paste is transmitted or stored. Masking a column is not anonymisation — a masked name beside a job title, a branch and a start date still identifies one person, and an unsalted pseudonym can be reversed for any value from a small set. Read the output before you send it. Nothing you type here is sent to our servers — the calculation runs entirely in your browser.