List to CSV

Paste a list of anything and get a proper CSV column back. The splitting is the feature: line breaks by default, or any delimiter you name including a multi-character one, with bullets, numbering and the quote-comma furniture an SQL clause leaves behind all removed. One row per item, or everything in one row.

Try an example loads a list with bullets, numbering and quoted entries all mixed together.

The input is whatever you just copied

That is the whole design constraint. Nobody arrives at this page with a clean list; they arrive with something they copied out of somewhere else, and it came with that place's punctuation attached.

Copied fromArrives looking likeWhat has to come off
A bulleted document• Ada Lovelacethe bullet and the space
A numbered list1. Ada Lovelacethe number, the dot, the space
An SQL IN clause'Ada Lovelace',the quotes and the trailing comma
A JSON array"Ada Lovelace",the quotes and the trailing comma
A spreadsheet columnAda Lovelace the trailing whitespace
A chat messageAda, Grace, Alannothing, but it needs splitting on the comma

All of that is handled by default. Strip bullets and numbering covers the first four rows of that table, Trim each item covers the fifth, and the Split on box covers the last. Every one of them can be turned off if your data genuinely starts with a dash.

Worked example: nine lines, seven rows

The sample deliberately mixes three list styles and a repeat:

- Ada Lovelace
- Grace Hopper
- Alan Turing

1. Katherine Johnson
2. Edsger Dijkstra
3. Katherine Johnson

'Radia Perlman',
'Barbara Liskov',

With the defaults on, and Remove duplicates ticked, the output is:

value
Ada Lovelace
Grace Hopper
Alan Turing
Katherine Johnson
Edsger Dijkstra
Radia Perlman
Barbara Liskov

The summary strip reads "11 items read, 2 blanks dropped, 1 duplicate removed, 7 in the output, one row per item". Every number in that sentence is a decision you can reverse with one click, which is the point of reporting them rather than just handing over a result.

Two layouts, and when each one is right

  • One row per item is the default and is what you want almost always. It produces a single column with a header, which is a real CSV that a spreadsheet, a database importer or the workbench will read without complaint.
  • All in one row produces one row with one column per item, named value_1, value_2 and so on. This is for the case where the list is a set of fields rather than a set of records: a header row you are rebuilding, or a single wide record you are assembling by hand.

The column naming in the wide layout is deliberate. Forty columns all called value is a file that no spreadsheet and no database will accept, so the index is appended. A one-item list keeps the plain name, since there is nothing to distinguish.

Past about two hundred items the wide layout gets a warning, because a single row with two hundred columns is past what most spreadsheets are comfortable with and the column layout is almost certainly what was meant.

Splitting on something other than line breaks

Leave the Split on box empty and the split is on line breaks, which handles the majority. Type something into it and the split is on exactly that text, taken literally, with no quoting rules applied.

  • A single character: , for a comma-separated line, ; for a semicolon one, | for a pipe.
  • Several characters: , splits on comma-space and leaves nothing to trim. and splits an English list.
  • A tab: type \t and it is read as one tab character rather than two literal characters.

Because there are no quoting rules, a value that itself contains the delimiter will split. That is a deliberate limitation rather than an oversight: this is a list splitter, and a file with quoted fields is a CSV, which the text to columns page reads properly.

The Number the rows option prepends an n column counting from 1. Useful when the order carries meaning and you are about to sort the file for some other reason.

Going the other way, and what to do next

The most common follow-on is turning the column back into something else. Once you have a CSV, the rest of the site takes over: CSV to JSON for an array, CSV to SQL for insert statements, CSV to Slack for a code block you can post.

If what you actually want is the reverse, a CSV column turned back into a comma-separated line, use All in one row on a pasted column and copy the result. It is the same tool read backwards.

Frequently Asked Questions

My items genuinely start with a dash. Will it eat them?

Turn off "Strip bullets and numbering" and nothing is removed from the front of an item. The stripping only fires on a marker followed by whitespace, so -Ada and Ada-Lovelace are already safe with it on; it is - Ada that gets trimmed.

Can I name the column?

Yes, type it into the "Column name" box. It defaults to value, and an empty or whitespace-only name falls back to that rather than producing a CSV with a blank header, which some importers reject outright.

Does it keep the order I pasted?

Always. There is no sort option on this page, because the order of a pasted list is nearly always meaningful and a sort is one click away in whatever you open the CSV in. Deduplication keeps the first appearance of each item, so the surviving order is still the original one.

What counts as a duplicate?

An exact match after trimming and marker stripping have been applied. It is case-sensitive: Ada and ada are two items. For a list of names or codes that is usually right, and where it is not, lowercasing the list first in a text editor is the quickest fix.

Can I paste thousands of lines?

Yes. Pasting is limited only by what your browser will hold in a textarea, which is comfortably in the hundreds of thousands of lines, and dropping a file raises that to 100 MB. There is no item limit, no sign-up and no daily quota.

How is this different from the text to columns page?

That page reads tabular text: several columns per line, with delimiter detection and a fixed-width mode. This one reads a list: one value per item, one column out. If your input has columns in it, that page is the right one; if it is a flat list, this one is.

Does anything I paste leave my computer?

No. There is no upload endpoint on this page and no network request in the code that does the work. JavaScript in your own tab reads the text, processes it and hands back the result. Nothing is stored between visits either, so reloading gives you an empty box again. You can confirm it by opening your browser's network panel and watching it stay quiet while you work.

A list in, a column out

Free, no account, no upload. Paste whatever you copied and let the bullets take care of themselves.

Back to the converter