Sections
8
Reading time
About 6 minutes

Using CleanYourDataset

Everything you need to prepare a file, understand what the workspace shows you, and get a clean CSV back out.

Getting started

  1. Create an account with your name, email and a password of 8 or more characters, or log in.
  2. In the workspace, drag a CSV onto the upload area or choose a file. It is checked and saved straight away.
  3. Review the column profile and the issues found, apply the fixes you want, then export the result.

Preparing your file

Most spreadsheet apps can save a sheet as CSV UTF-8. Before uploading, check that:

  • The first row contains column names, each one unique and not blank.
  • Every row has the same number of cells as the header. Commas, quotes and line breaks inside a value must be wrapped in double quotes.
  • The file is at most 128 KiB, with up to 1,000 data rows, 20 columns and 500 characters per cell.
Note

Accented letters and other non-English text are fully supported, as long as the file is saved as UTF-8. Files in legacy encodings such as Windows-1252 that contain accented characters are rejected rather than silently garbled.

Reading the profile

After uploading, the workspace summarises the dataset: the number of rows and columns, the total count of missing cells, and duplicate rows. The Columns panel lists each column with its inferred type and a completeness meter.

  • Types are inferred from non-blank values: number, boolean (true/false), date (YYYY-MM-DD) or text. They are informational and never change your data.
  • Missing means a blank cell or one containing only whitespace.
  • Select a column’s missing count to show just those rows in the table.
  • Number · 42, -3.5, 1e6
  • Boolean · true, false
  • Date · 2026-10-04
  • Text · anything else

Cleaning operations

Each operation shows how many cells or rows it will change before you apply it. Use Show rows to preview them in the table.

OperationWhat it doesNotes
Trim whitespaceRemoves leading and trailing spaces, tabs and line breaks from every cell.Run this first so “ Ana” and “Ana” are treated as the same value.
Remove empty rowsDeletes rows where every cell is blank or whitespace only.Rows with at least one value are kept.
Remove duplicatesDeletes rows that exactly match an earlier row, cell for cell.Matching is case-sensitive and includes spaces; the first occurrence is kept.
Fill missing valuesReplaces blank cells in one chosen column with a value you provide.Up to 100 characters. Other columns are untouched.

Undo, reset and history

Undo reverses the most recent change. Reset to original restores the rows exactly as you uploaded them, and can itself be undone. The Activity panel lists the last 20 steps with what each one changed.

Exporting

Export CSV downloads the current rows as UTF-8 with a byte-order mark and Windows line endings, which Excel and Google Sheets open correctly. The file is named after your dataset with a “cleaned-” prefix. Values that could run as spreadsheet formulas are prefixed with a tab; see the FAQ below.

Frequently asked questions

Why was my file rejected?

Uploads must be .csv files encoded as UTF-8, at most 128 KiB, with a header row of unique, non-empty names, no more than 20 columns and 1,000 data rows, the same number of cells on every row, and no cell over 500 characters. The error message names the first problem it finds, including the row number where relevant.

Does “N/A” or “null” count as missing?

No. Only empty cells and cells containing nothing but whitespace count as missing. Text such as “N/A”, “null” or “-” is treated as a value.

In what order should I apply fixes?

Trim whitespace first, then remove empty rows, then remove duplicates, and fill blanks last. Trimming first lets rows that differ only by stray spaces be recognised as duplicates.

Can I undo more than one step?

Undo reverses the most recent change. To go back further, use Reset to original, which restores the rows exactly as uploaded. Reset itself can be undone.

Why do some exported values start with a tab?

Cells that begin with =, +, - or @ could run as formulas when opened in a spreadsheet. A leading tab makes the spreadsheet treat them as text. Numbers such as -5 are affected too; remove the tab in your spreadsheet if you need them as numbers.

What happens if I edit the same dataset in two tabs?

Each change carries the version you were looking at. If the dataset changed elsewhere in the meantime, the change is refused and you are asked to reload, so nothing is overwritten by accident.

How long do I stay signed in?

Sessions last 8 hours. After that, or after you log out, you will be asked to sign in again and your datasets will be waiting.

Is my original file changed?

No. The file on your computer is never touched, and the uploaded rows are kept so you can reset to them at any time.

API reference

The web app uses a same-origin JSON API authenticated by the session cookie. Errors are returned as { "error": { "message": string, "details"?: unknown } }. Requests that change data from another site are rejected.

MethodPathDescription
POST/api/auth/registerCreate an account: { name, email, password }. Starts a session.
POST/api/auth/loginSign in: { email, password }. Starts a session.
GET/api/auth/sessionThe signed-in user, or 401.
POST/api/auth/logoutEnd the session.
DELETE/api/users/meDelete the account and all of its datasets.
GET/api/datasetsList your datasets (summaries, most recently updated first).
POST/api/datasetsUpload a CSV as multipart form field “file”.
GET/api/datasets/:idDetails: columns, statistics, issue counts, the first 50 rows and history.
PATCH/api/datasets/:idRename: { name } (1–120 characters).
GET/api/datasets/:id/rowsA page of rows: offset, limit (≤ 100), filter (all, missing, whitespace, empty, duplicates) and optional column for missing.
POST/api/datasets/:id/operationsApply { type: trim | remove_empty | dedupe | fill, column?, value?, version }.
POST/api/datasets/:id/undoUndo the most recent change. Optional { version }.
POST/api/datasets/:id/resetRestore the original upload. Optional { version }.
GET/api/datasets/:id/exportDownload the current rows as CSV.
DELETE/api/datasets/:idDelete the dataset permanently.