Drop JSON, NDJSON, CSV, TSV, XML, Excel or YAML and get any of the others back, or a ready to run SQL file with a CREATE TABLE and batched INSERTs. Nested data is flattened for you. Free, no signup, and your file never leaves your browser.
| Use | Column | Detected | SQL type | Nullable | Key |
|---|
Column names that are not valid XML element names are cleaned up automatically.
Columns detected as dates are written as real Excel dates, not text. A workbook of more than about 50,000 rows takes a while to build and the page will sit still while it does.
YYYY-MM-DD form, plus real dates read from an Excel file. Other date styles stay as text, so set the column type yourself if your database can parse them. A timestamp carrying a Z or a time zone offset is written as the plain date and time it shows, without the zone. The table name and every column name are rewritten to lowercase with underscores so they are valid unquoted identifiers, so First Name becomes first_name. Check the types in the table above before you run the file against anything that matters.Most conversion sites either cap you at a few files a day or upload your data to their servers first. This one does neither. Everything runs in your own browser, so a customer export, a CRM dump or a list of patient records is never sent anywhere, and there is no file count to hit.
The direction you pick is free too. JSON to CSV, CSV to JSON, XML to Excel, Excel to SQL, YAML to CSV, and every other combination of the eight formats are all the same button.
Real API output is not a flat table. A GoHighLevel contact has a customFields object, a Google Maps result has a nested address, a Stripe payload has objects three levels deep. Paste any of that into a naive converter and you get a column of the word "object" or an empty cell. Here a recursive walker turns contact.email into its own column, and you choose what happens to lists: join them into one cell, spread them across numbered columns, or explode them so every list item becomes its own row.
The column set is built from a union of every key across every record, not from the first one. That matters more than it sounds. If record 400 has a custom field the first record does not, most tools silently drop the whole column and the value with it.
Pick SQL as the target and the tool reads every row, not a sample, then sizes each column from what it actually finds: integers become INT or BIGINT by magnitude and stay text when they are longer than a BIGINT holds, decimals get a precision and scale from the digits observed, ISO dates become DATE or a timestamp type, and everything else becomes a sized VARCHAR or a long text column. You get a CREATE TABLE plus batched multi row INSERTs, with identifiers quoted and values escaped for the database you picked. MySQL needs backslashes escaped, SQL Server needs BIT instead of BOOLEAN and NVARCHAR instead of TEXT, and it caps an INSERT at 1000 rows. Those differences are handled rather than glossed over.
Every type here is a guess made from your data, which is why there is an editable grid above the button. A quantity column of zeros and ones is not a boolean, a ZIP code is not a number, and a unique email address is a bad primary key. Change them before you export. The grid edits the first 400 columns; past that a column still exports, with the type shown in the preview, but there is no row for it to edit.
XML support is aimed at record style documents, a repeated element under a root, which covers exports and feeds. Deeply mixed content with text and tags interleaved in the same node is not a table and will not become one cleanly. One file is capped at 80 MB and one pass at 300,000 rows, because a browser tab runs out of memory past that. Split a bigger file first. Dates are recognised in YYYY-MM-DD form and from real Excel date cells, nothing else, because guessing between 03/04 as March the 4th and the 3rd of April silently ruins a column.
To be exact about the privacy claim: your data is read and converted by code running in this tab and is never sent anywhere. The page itself does load three open source libraries from public CDNs, the same as almost every site, and those requests carry no part of your file. Spreadsheet reading uses SheetJS 0.18.5, which has published advisories for deliberately malformed files. There is no server involved here, so the worst case stays inside this browser tab, but open only spreadsheets you trust.