How to convert delimited data

Paste CSV, TSV or semicolon-separated text, choose the delimiter (Auto-detect, Comma, Tab or Semicolon) and the output format (XML, YAML, SQL INSERT or JSON), then press Convert. The first row is read as the header and supplies the field names.

Everything runs in this browser: nothing is uploaded, and generated SQL is only text — the page never connects to a database. A 5,000-row table converts in about a third of a second, and the result can be copied or downloaded as converted-data.<target>.

  1. Paste the table into the input box, or press Load example for a four-column sample with quoted fields.
  2. Choose the delimiter. Auto-detect counts commas, tabs and semicolons outside quoted cells over the first five non-empty lines and prefers the candidate whose count stays the same on every line, so a quoted header such as "Hopper, Grace" no longer hides the tabs; pick Tab or Semicolon yourself when a file is ambiguous.
  3. Choose the output format and, for SQL INSERT, the table name (imported_data by default), then press Convert. Rows, columns, the detected delimiter and the output size are shown above the result.
  4. Read the result together with the Findings panel: it lists what the parse had to repair, such as an unclosed quote, extra values kept in generated column_N fields, renamed duplicate columns, removed XML control characters or an adjusted table name.

Formats, escaping and limits

Delimiters, quotes and headers

Auto-detect reads the first five non-empty lines and counts delimiters outside quoted cells; comma is the fallback when no candidate is convincing. A quote opens a cell only at its start, so a quote inside an unquoted value stays in the data, "" inside a quoted cell means one quote, and delimiters or line breaks inside quotes stay inside the cell. A UTF-8 byte order mark is removed from the first header, and blank lines are skipped instead of becoming empty rows.

Header names are trimmed; an empty header becomes column_1, column_2 and so on, and duplicate names are renamed with a numeric suffix (a, a_2) rather than overwriting each other. Rows shorter than the header keep empty values, and rows with more values than the header keep the extra cells in generated column_N fields, which the findings panel reports.

What each output format writes

JSON writes one object per row with every cell as a string. XML writes an XML 1.0 declaration with <rows> and <row> elements: header names become element names (characters other than letters, digits, dot, dash and underscore become _), a leading digit is prefixed with _, and repeated names get a suffix. YAML writes a sequence of mappings and quotes any string that a YAML parser would otherwise read as a number, date, boolean or null, so 007, 2026-09-22 and yes stay text.

SQL INSERT writes one statement per row with backtick-quoted identifiers and MySQL/MariaDB string escaping: the single quote is doubled, and backslash, newline, carriage return, NUL and Ctrl-Z are escaped, so a Windows path that ends in a backslash stays inside its string. The table name is reduced to letters, digits and underscores, and the findings panel says so when that changes the name you typed. Nothing is sent to a database.

Limits and what this page does not do

Cells stay text: the converter never decides that a column is numeric, and it does not turn values into dates, booleans or NULL. The generated SQL is MySQL/MariaDB flavoured (backtick identifiers); other servers accept the string literals but may need their own identifier quoting. XML 1.0 cannot represent most control characters, and those characters are dropped from XML values.

There is no file picker and no spreadsheet reader — paste the text, or copy rows out of Excel first — and it is worth parsing the result with a library for the target format before you rely on it. Header-only input returns an empty JSON or YAML array with a finding, the delimiter metric records what auto-detection chose, and practical size is limited by the memory of the browser tab.

Recent tools: