Convert CSV rows to a list

Convert CSV rows to a list in one step. Paste any CSV and ListShift returns one row per line, with cells joined by a separator you choose. Quoted fields with embedded commas, escaped quotes, and multi-line values are all handled correctly.

Input
Ready
Output
Live

Turn CSV rows into a clean list of lines

Convert CSV rows to a list when you need the data out of its grid and into something easy to scan, paste, or feed into the next tool. Drop a spreadsheet export, database dump, or report into the input, and each row becomes a clean line in the output.

The parser handles the messy stuff that breaks naive splits: quoted fields, commas inside values, escaped double quotes, and rows that span multiple lines. Auto-detect figures out whether the file is comma, semicolon, pipe, or tab-separated.

Everything runs in your browser via JavaScript. Your data never leaves the tab and there is no sign-up. Input size is only limited by your browser and device memory, not by an upload step.

Need a different shape? The Output option also supports First column only (when you just want one column worth of values) and Flatten every cell (when you want every value on its own line).

How to use convert csv rows to a list

  1. 1Paste your CSV into the input panel. You can copy straight from Excel, Google Sheets, or a .csv file in your editor.
  2. 2Pick an Output shape: one row per line (default), first column only, or flatten every cell.
  3. 3Leave Separator on Auto-detect, or pick the right one manually if your data has lots of embedded delimiters.
  4. 4Turn on Skip header row if the first line is column names you do not want in the output. Toggle Trim and Dedupe for extra cleanup.
  5. 5Copy the result, or hit Download to save the output as a plain text file.

Keyboard shortcuts

Drive ListShift without touching the mouse.

Shortcut Action
Ctrl ZUndo last input change
Ctrl Shift ZRedo
Ctrl Shift EnterToggle fullscreen focus on the editor
EscExit fullscreen
Ctrl KOpen the command palette to jump to any tool
Ctrl SSave current pipeline draft Plus
Ctrl PRun a saved pipeline Plus

What CSV rows to a list lets you do

Five row-level jobs this tool shortens from a half-hour to a paste and a click.

Turn a subscriber export into a readable contact list

Paste a full CSV from Mailchimp, Klaviyo, or your CRM. Each row becomes one line containing that contact's fields, joined with the separator of your choice. Skip header row drops the column names so only the actual people end up in the list.

Build a status summary from a Jira or Asana export

Exported tickets from most trackers come out as CSV with ticket number, title, owner, status, and due date per row. One paste and every ticket is on its own line, ready to drop into a standup note, a weekly email, or a stakeholder update.

Clean up a pipe or tab-delimited log

Nginx access logs, Postgres psql output, and most CLI tools dump pipe-separated or tab-separated text, not real CSV. Auto-detect picks up the delimiter from the character frequency, so you do not have to pre-process the file or teach the tool what it is looking at.

Strip a header row from a 10,000-line export

Skip header row drops the first line in a single toggle, even on a file with 10,000 data rows behind it. No text editor macro, no sed one-liner, no awkward "delete row 1" in Excel. Toggle, paste into the next tool, done.

Remove duplicate rows from a transaction or event log

Ops exports double up all the time - an ETL retry, two syncs into the same file, a copy-paste gone wrong. Enable Dedupe and every identical row collapses into a single line, without having to sort the file in Excel first.

Worked example

A three-column CSV with a quoted field containing a comma, one row per line in the output.

Input
name,email,city
alice,[email protected],London
bob,[email protected],Berlin
carol,"carol, m.",Paris
Output
name | email | city
alice | [email protected] | London
bob | [email protected] | Berlin
carol | carol, m. | Paris

Settings reference

How each option changes the output, with the sample CSV above as the input.

Setting What it does Effect on the sample
Row join: " | " (default) Joins each row's cells with " | " Gives "alice | [email protected] | London"
Row join: custom Any separator you type (e.g. " - " or " / "). Cells containing the separator are quoted. Stays unambiguous even with commas inside cells
Separator: Auto Detects comma, semicolon, pipe, or tab from the input Picks "," for this sample
Separator: Tab Forces tab as the delimiter even if the input has commas Each row is kept intact as a single item
Skip header: on Drops the first row of the CSV Removes the "name, email, city" header line
Trim: on Strips leading and trailing whitespace from every cell Handles pasted CSVs with ragged spacing cleanly
Skip empty: on Filters any line that parses to an empty string Drops blank rows from the output
Dedupe: on Keeps one copy of each unique line of output Repeated rows appear only once
Output: First column only Keeps the first cell of each row and drops the rest Gives "name / alice / bob / carol"
Output: Flatten every cell Emits every cell as its own list item Gives "name / email / city / alice..." etc.

FAQ

How does auto-detect pick the separator?
It counts commas, semicolons, pipes, and tabs in your input and uses whichever is most common. Force one manually if your data contains more commas than actual delimiters.
Does it handle quoted fields with commas inside?
Yes. Fields wrapped in double quotes can contain the separator, doubled-up quotes for escaping, and even newlines. They are all parsed correctly, and cells that contain your Row join separator are quoted on the way out so the output stays unambiguous.
What does Skip header row actually do?
It drops the first row of the CSV. Turn it on when your first row is column names like "name,email,city" and you only want the data rows on the list.
How do I go the other way, turning a list back into a CSV?
Use Convert List to CSV. Pick a separator, choose whether to quote fields, and get a CSV row or column back.
What format does Download save?
A plain text file (.txt) with one item per line, matching the output panel exactly. Rename the extension to .csv if you want a spreadsheet to open it as rows.