Spreadsheet Cleaner Offline pre-migration data quality
Free · Open Source View on GitHub →
Free & Open Source · Runs Fully Offline

Profile the mess.
Prove it's clean.

Point Spreadsheet Cleaner at a messy CSV or Excel file. Get a per-dimension data-quality report you can hand to your client before the migration runs. Everything happens on your machine. Nothing is uploaded.

Fully offline  ·  No cloud, no account  ·  A report you can sign off

Desktop app or command line  ·  Python package too

spreadsheet-cleaner profile clients.xlsx
clients.xlsx - grade B (86/100)
11 rows x 8 columns
5 error(s), 9 warning(s)

Completeness #################--- 83
Validity ###################- 93
Conformity ##################-- 89
Consistency ############-------- 61
Uniqueness ###################- 97
Structure ##################-- 90

wrote clients_quality_report.html

Six dimensions of data quality.

Every finding maps to a recognized data-quality dimension (DAMA-UK / DMBOK), so the report reads as a standard scorecard, not a pile of ad-hoc warnings.

🧩

Completeness

Missing required values, and placeholder text like N/A or - that really means blank.

🔤

Validity

Values that don't match the column's intended type: a word in a number column, a broken date.

📅

Conformity

Format drift: several date formats in one column, and stray or doubled whitespace.

🔁

Consistency

The same value spelled and cased more than one way: Active / active / ACTIVE.

🔑

Uniqueness

Duplicate rows, and duplicate values in a column that's supposed to be a primary key.

🧱

Structure

Blank rows, completely empty columns, and unlabeled headers that break a load.

It also infers each column's type, reports fill rate and distinct counts, flags primary-key candidates, and exports the whole audit as a self-contained HTML file, plus Markdown and JSON for your pipeline. When you're ready to fix it, spreadsheet-cleaner clean applies a deterministic recipe, logs every change, and writes a cleaned copy. Then validate runs the file against your target system's schema for a hard PASS/FAIL, and reconcile proves counts, keys, and control totals match before sign-off. Your source file is never touched.

Anyone who has to trust a spreadsheet before it moves.

Especially when the file holds real client data that can't be uploaded to a cloud tool.

🚚

Data Migration Analysts

Profile and vet source data, catch what would break the load, and hand the client a signed-off quality report before you migrate.

📊

Data & Business Analysts

Understand and clean an inherited spreadsheet, without spinning up a data-engineering stack or a warehouse.

🛠️

Data Quality & ETL Engineers

A fast, offline first pass on ad-hoc files that don't justify a full pipeline, with a CI-friendly exit code.

Profile a file in two commands.

Python 3.10+. Install from source today; a PyPI package is coming.

1
Install it Clone the repo and run pip install -e . to get the command.
2
Point it at a file spreadsheet-cleaner profile yourfile.xlsx --open
3
Read the scorecard, open the report A grade in the terminal; a self-contained HTML report on disk.
4
Hand it over Send the report as the sign-off artifact. Nothing was uploaded.
terminal
# install from source
$ git clone https://github.com/michaelnocito/spreadsheet-cleaner
$ cd spreadsheet-cleaner && pip install -e .

# make a messy sample, then profile it
$ python sample_data/create_sample.py
$ spreadsheet-cleaner profile \
    sample_data/messy_employees.xlsx --open

✔ Quality report written. Open it, sign it, ship it.