Skip to content
AZ Tools

CSV Splitter (by rows)

Split a large CSV into smaller chunks by row count — repeat the header on each chunk, download all at once.

Drop a CSV or paste contents to get started.

How to use

  1. Drop a .csv file (or paste contents).
  2. Pick how many data rows per chunk and whether to repeat the header.
  3. Click each chunk's download button, or 'Download all'.

About this tool

Show

Drop or paste a CSV, set how many data rows each chunk should hold, and get evenly sized files you can download one by one or all at once. The count is of records, not lines, which is the distinction that ruins a naive split: a quoted field may contain line breaks, and those rows stay whole here instead of being cut in half. The header can be repeated at the top of every chunk, so each file opens correctly on its own and can be imported without stitching anything back together first. Parts are numbered name.part01of04.csv, zero-padded so they sort in the right order in any file manager or shell glob. Everything runs in the browser — your data never leaves the page.

Frequently asked questions

Does it understand quoted fields with newlines?

Yes — a quoted field can contain \n or , without breaking the row count.

Where does the file go?

Nowhere. Splitting is done in your browser; downloads come from in-memory blobs.

How big a file can I split?

Constrained by your browser's memory. Tens of MB is fine; for 500 MB+, prefer a desktop tool.

Why 'rows per chunk' and not 'number of chunks'?

Most CSV import limits are expressed as row count (BigQuery 1M, Excel 1M, Stripe 100k…) — splitting by row makes those limits trivial to hit.

How do I put the parts back together?

If the header was repeated, drop the first line of every part except the first and concatenate. On macOS or Linux that is one command: head -1 name.part01of04.csv > all.csv, then tail -n +2 -q name.part*.csv >> all.csv.

Should I repeat the header in every chunk?

Repeat it when each part will be opened or imported on its own, which is the usual reason to split. Leave it off when the parts are going back together as a stream, since a header appearing partway through the data is worse than none at all.

Guides on this topic

Related tools