CSV Splitter

Cut a big CSV into numbered parts that each keep the header row.

Runs in your browser
Your file
Drop to add
No files yetProcessed locally
Result
Your processed files will appear here.
Ready
The header row is not counted.
Parts stay at or under this size.
More options (1)
Only needed to tell quoted cells apart.

How to use the CSV Splitter

  1. Drop the CSV onto the left panel or click to choose it. Large files are fine, since only a small window of the file is in memory at any time.
  2. Choose whether to split by a number of rows or by size in megabytes, then type the value you need.
  3. The parts appear on the right straight away, numbered part-001, part-002 and so on, each with its row count.
  4. Download the parts one by one, or all of them together in a ZIP.

Examples

Rows per file
orders.csv with 1,250,000 rows and 500,000 rows per file → orders-part-001.csv, orders-part-002.csv and orders-part-003.csv, each starting with the header.
Upload form with a size limit
A 95 MB export and a 20 MB limit → five parts of just under 20 MB, cut between rows so every part imports on its own.

About this tool

Exports from databases, shops and analytics tools regularly come out as one enormous CSV, and the places you want to send it to have limits: a form that refuses anything over 25 MB, an import that stops at 10,000 rows, a spreadsheet that cannot show more than about a million lines, or a colleague who only needs a slice. This splitter cuts the file into evenly sized parts and writes the header row at the top of every part, so each piece opens and imports as a complete table on its own.

Rows are never cut in half. The file is scanned byte by byte for the real end of each record, and a line break inside a quoted cell (an address or a comment spread over several lines) is treated as part of the cell rather than as a new row. Because the parts are built as slices of the original file, a 500 MB export is handled with a few megabytes of memory, and the bytes pass through untouched: encoding, line endings and quoting stay exactly as they were.

Tip: when the destination enforces a hard size limit, set the target a little below it. Parts are cut at the last whole row that fits, so they finish slightly under the number you enter, never over it.

This tool runs entirely in your browser. What you type or open is never sent to a server.

Frequently asked questions

Is the header really in every file?

Yes, as long as the header option is on. The first row of the original is copied to the top of each part, so part-007.csv imports exactly like part-001.csv. Switch the option off for files that have no header row.

How exact is the size limit?

Parts are closed at the last complete row that fits, so each one lands just under the target (1 MB is counted as 1,048,576 bytes). Only a single row that is itself bigger than the target can exceed it.

Will it change my data in any way?

No. Each part is a byte-for-byte slice of the original with the header in front, so quotes, accents, encoding and line endings are untouched. Blank lines between parts are dropped, nothing else.

Is the file uploaded anywhere?

No. Splitting runs inside the page using your browser's own file access, so the file never leaves your disk. That is also why a multi-hundred-megabyte file takes seconds rather than minutes.

What about downloading a very large ZIP?

Downloading parts one at a time needs almost no memory. "Download all" packs every part into one ZIP in memory first, so for exports of several hundred megabytes it is better to save the parts individually.