csvkit.org
CSV (Comma-Separated Values) utilities, in the browser
Say hi →

Split CSV File

updated 12 March 2026

split mode
Drop a .csv file here, or
Parts generated

        
ready

CSV Split Toolkit

Split one CSV into multiple smaller files, bundled as a ZIP. Two modes are supported: split by row count (for import targets with a maximum-rows-per-file limit), and split by column value (one output file per unique value, such as one file per country). Every part is a standalone, valid CSV with the original header row preserved. Runs entirely in the browser.

Before you start

You need a CSV with a header row. Then decide which shape of split you want:

If you go the column route, check the column's cardinality first — "country" on a global export is fine, "email" is going to produce one file per row and an unreadable ZIP.

How to use it

  1. Paste or drop your CSV in the left pane.
  2. Pick the split mode.
  3. Fill in either Rows (for row-count mode) or Column (for column-value mode). The other field is ignored.
  4. Click Split. The right pane lists every part that was produced and its row count.
  5. Click Download (ZIP) to save all parts as a single archive.

Modes explained

By row count

Chops the CSV into equal-sized chunks. Part order follows the input order. Typical uses: working around a 10k/50k-rows-per-import cap, splitting a huge file so each chunk fits in memory, parallelising a downstream process.

By column value

One output file per unique value in the chosen column. The value becomes the filename (sanitised: spaces to underscores, unsafe characters dropped). Rows with an empty value in that column go to _empty.csv. Typical uses: per-country exports, per-tenant dumps, per-month archives if the file has a month column.

Example

Input (sales.csv, 5 rows):

id,country,amount
1,DE,100
2,FR,80
3,DE,40
4,ES,65
5,FR,200

Split by column country produces three files in the ZIP:

Each has the header id,country,amount.

Tips & common pitfalls

Troubleshooting

The ZIP has one giant file and no splits.

You probably left the row count higher than the total number of rows, or the chosen column only has one unique value. The status bar tells you how many parts were produced.

The tool produced 40,000 files and now my browser is frozen.

That's the cardinality trap from the tips above. Pick a lower-cardinality column, or pre-aggregate in the source file.

Can I change the filename template?

Not yet. Row-count produces part-001.csv; column-value uses a sanitised version of the column value. Tell me if you want a specific pattern.

Frequently asked questions

Are headers preserved on every part?

Yes. Every output file is a standalone, valid CSV with the same header row as the source.

Does it handle quoted fields and embedded commas?

Yes. The splitter parses into rows via PapaParse first, then re-emits with correct RFC 4180 quoting.

Is anything uploaded?

No — parsing, splitting and zipping all happen in your browser. See the privacy policy.

What ZIP compression is used?

Standard DEFLATE, produced by JSZip. The resulting ZIP opens in every OS's built-in archive tool.