Sheetmask released!

I built sheetmask to solve a specific problem: you have a real Excel report full of sensitive data and need a safe test fixture that matches its structure. Not a made-up spreadsheet. Something that looks and behaves like the real thing, without the real names and numbers.

Most anonymization tools stop at replacing values. Sheetmask reads the file's structure first: which sheets exist, what columns are in each, what the data types are, and how numbers relate to each other. That structural map makes the rest possible.

The workflow

Run analyze on your file:

sheetmask analyze "Q4 Finance Report.xlsx"

This prints a structured prompt describing the file's sheets, columns, data types, and sample values. It captures which columns are derived (Gross Margin = Revenue - Cost) and which entities repeat across sheets (a manager name appearing in both a summary tab and a detail tab).

Copy that prompt and paste it into Claude or ChatGPT. The LLM reads the structural analysis and writes a processor config telling sheetmask exactly how to handle each column: what kind of fake value to generate, which numeric columns to vary independently, and which to derive from others so the math stays consistent.

Save the config the LLM returns, then run process:

sheetmask process "Q4 Finance Report.xlsx" --config q4_config.py
# Output: Q4 Finance Report_SYNTHETIC.xlsx

Why the LLM step is not optional

The config maps every column to a rule. Writing it by hand means reading each column, understanding the data type, deciding whether a number is independent or computed, and getting the formulas right across however many sheets the file has.

The LLM does that work. It reads the sample data and the structure analyze extracted, understands the relationships, and produces a config sheetmask executes directly. You review it, run it, and get a synthetic file with fake names and fake numbers but real structure.

analyze does the structural work. The LLM does the semantic work. Together, they produce output that works as an actual test fixture.

Install

pip install git+https://github.com/daniel-butler/sheetmask.git
uv add git+https://github.com/daniel-butler/sheetmask.git

Source and docs: https://github.com/daniel-butler/sheetmask