CleanFrame Playground

Free, private, no sign-up

How messy is your data?

Drop a CSV and get a Mess Score, every problem CleanFrame finds, a reviewable YAML recipe and the cleaned file. It is computed by Python running inside this tab, so your data never leaves your device.

Drop a CSV file here

or paste cells copied from a spreadsheet

CSV, TSV or TXT up to 20 MB · Excel .xlsx up to 5 MB

  1. Python runtime
  2. pandas
  3. CleanFrame

Starting Python takes a few seconds to half a minute, depending on your device. The first visit also downloads about 14 MB (CPython, pandas and NumPy compiled to WebAssembly) from cdn.jsdelivr.net; your browser caches it after that.

Ready.
  • Nothing is uploaded. A Content-Security-Policy blocks every connection except this site and the Python runtime's CDN.
  • No account, cookies, analytics or trackers.
  • The recipe you download replays anywhere with pip install cleanframe-engine.

How it works

CleanFrame is an open-source Python library. This page runs the real thing, the same code as pip install cleanframe-engine, with the deterministic rules planner (no AI, no API keys).

01 · Detect

Find the mess

Thirteen detectors look for mixed date formats, misspelled categories, money stored as text, stray whitespace, disguised nulls, invalid emails and phones, duplicates and more.

02 · Plan

Write a recipe

Every fix becomes a line of YAML: readable, diffable, yours to edit and commit. Problems that need a human are flagged, not silently "fixed".

03 · Replay

Run it forever

cleanframe apply replays the recipe on next month's file with plain pandas, and stops on schema drift. Or export the generated pandas code and keep no dependency at all.

Your data stays on this device

Not a promise in a privacy policy: it is how the page is built.

  • Python runs in this tab. CPython, pandas and CleanFrame are compiled to WebAssembly (Pyodide) and run in a background thread. Your file is read into that thread's memory and nowhere else.
  • Two origins, enforced. A Content-Security-Policy lets the page fetch only from this site and the pinned Pyodide directory on jsDelivr. Any other connection, including one that tried to send your data away, is blocked by the browser.
  • No tracking. No analytics, cookies, fonts or third-party scripts.
  • Check it yourself. Open your browser's developer tools, go to Network, and drop a file: no request carries your data.
Everything this page loads:

this site
  index.html  app.js  worker.js
  style.css   favicon.svg
  app.py                 the Python glue
  wheels/                CleanFrame, built from main
  sample/                the sample CSV (on request)

cdn.jsdelivr.net/pyodide/v314.0.7/full/
  the Python runtime, pandas, NumPy,
  PyYAML, Jinja2, python-dateutil