Data tools

25 tools

Work on CSV, JSONL, Parquet, Excel (XLSX) and SQLite in the browser. Split, merge, dedupe, transpose and profile tabular data, or run SQL against a file with sql.js. Useful when a dataset holds customer records you cannot paste into an online converter.

CSV14

1→1Reorder / insert CSV columnsReorder (and drop) a CSV's columns by name, and optionally insert one new column with a constant value at a given position. Quote-aware. A record with a quoted field containing a literal newline stays one record.Takes one file1→1Map CSV column namesRename a CSV's header to a new schema ("old=new" pairs), and optionally drop every column that isn't named in the mapping. Column order and data are otherwise untouched. Quote-aware. A record with a quoted field containing a literal newline stays one record.Takes one file1→1Change CSV separatorRe-delimit a CSV (comma, semicolon, tab or pipe), auto-detecting the current separator when not told what it is. Quote-aware. A record with a quoted field containing a literal newline (including in the header) stays one record.Takes one file1→1Transpose CSVSwap a CSV's rows and columns. Column 1 becomes row 1, and so on. A ragged row (fewer cells than the widest row) is padded with empty cells rather than refused. Quote-aware. A record with a quoted field containing a literal newline stays one record, not two.Takes one file1→1Split CSV into partsCut a CSV into several smaller files of N data rows each, repeating the header in every part. Quote-aware: a record with a quoted field containing a literal newline stays one record.Takes one filen→1Merge CSV filesConcatenate several CSVs with the same header into one file, in the order given. Quote-aware. A record with a quoted field containing a literal newline stays one record.Combines the files you drop1→1Remove duplicate CSV rowsStrip repeated rows from a CSV. Compares whole records, not physical lines, so a quoted field containing a newline is one record and stays one record.Takes one file1→1Find incomplete CSV recordsReport every record whose cell count doesn't match the header: too few cells (a truncated record) or too many (an unescaped comma). Read-only: nothing is changed. Quote-aware, so a record with a quoted field containing a literal newline still counts as one record with the right cell count.Takes one file1→1CSV to tableConvert a CSV to markdown, HTML, LaTeX, SQL INSERT statements, JSON, YAML, or Jira table markup. The first row is always the header (object keys for JSON); every format quotes its own special characters.Takes one file1→1Sort and filter CSV rowsSort a CSV by one column, as text or as numbers, ascending or descending, and keep only rows matching a 'col op value' filter (=, !=, >, <, >=, <=, contains, startsWith).Takes one file1→1Pivot a CSVPivot a CSV: one column's distinct values become row labels, another's become column headers, and a third is aggregated into each cell by count, sum, mean, min, or max.Takes one filen→1Join two CSVsJoin two CSVs on a shared column. Inner keeps only matching rows, left/right keep every row from one side (blank cells for the other), outer keeps every row from both. A column name that collides with the other file gets a "_2" suffix.Combines the files you drop1→1Sample rows from a CSVTake a sample of a CSV's data rows: the first N (head), N picked at random but kept in their original order (random), or the whole file shuffled and cut to N (shuffle). Seedable for a repeatable sample.Takes one file1→1Fixed-width text to CSVConvert fixed-width text to CSV, either by given column widths in characters or by auto-splitting each line on runs of two or more spaces. Every cell is trimmed of leading and trailing whitespace.Takes one file

Query & profile6

1→1Query a SQLite databaseRun SQL against a .db / .sqlite file and read the answer as a table. The database never leaves your device.Takes one file1→1Profile a CSV datasetPer column: null count, a heuristic majority type (integer/float/boolean/date/string, over non-empty cells), cardinality, and, for integer/float columns, min/max/mean/median/population stddev, or, for ISO-8601 date/timestamp columns, min/max. Read-only. Nothing is changed. Quote-aware. A record with a quoted field containing a literal newline counts as one record.Takes one filen→1Diff two CSV datasetsCompare two CSVs. With a key column: report rows added, removed, and changed (by that key). Without one: a whole-row multiset diff, added/removed counts of exactly-equal rows, order-independent, duplicates counted. Read-only. Quote-aware: a record with a quoted field containing a literal newline is compared as one record.Combines the files you drop1→1JSONL processorValidate a JSON Lines file line by line, or convert it to/from a JSON array. validate never throws on a bad line, naming every one instead; the two convert modes refuse (naming the first bad line) rather than silently dropping or mangling a record.Takes one file1→1Filter / grep a log fileKeep (or drop) lines matching a plain substring or a regex. Like every tool here the whole file is held in memory at once. A log genuinely in the multiple-GB range can exceed what a browser tab can hold; this does not stream from disk.Takes one file1→1Flatten / unflatten JSONFlatten nested JSON into a single-level object with dotted (or custom-separator) keys, e.g. "address.city", or reverse a flat object back into nested JSON objects and arrays.Takes one file

Parquet3

Excel2

Questions

Can I run SQL on a CSV?

Yes. SQLite query loads a database file and runs your query with sql.js in the page. Results are capped at 1000 rows and writes are discarded, so it is a read tool rather than an editor.

Is my data uploaded?

No. Every parse and transform happens in this tab. That is usually why these tools get used: a customer export is exactly the sort of file you cannot paste into an online converter.

How is CSV parsed?

Quote aware, over the whole text, so quoted fields containing commas and newlines survive. An unterminated quoted field is reported rather than silently truncated.

Can I work with Parquet?

Yes, in both directions, with the caveat each tool page states: the writer produces uncompressed, plain-encoded columns with a single row group, which is readable everywhere but not the smallest possible file.

What is the largest file these handle?

Whatever your browser has memory for, since the file is loaded whole. For large datasets, split first with the CSV split tool and work on the parts.