CSV Splitter: Chunk by Rows or Size

Split a large CSV into smaller files by row count or byte size, preserve the header, and download a ZIP.

Upload a CSV
About CSV Splitter

Upload a CSV and choose how to split: a fixed number of rows per chunk or a maximum size in megabytes. The header row is repeated in every chunk so each file remains a valid CSV. The result is packaged as a ZIP archive for one click download.

Many data tools cap the size of CSVs they can import. Excel rejects more than 1,048,576 rows, BigQuery streams are happier with smaller batches, and some web upload forms cut off at a few megabytes. Splitting a single large CSV into several smaller files is the usual fix, and doing it without losing the header row matters because downstream tools rely on column names.

This tool reads the file in the browser, walks the rows once, and emits chunks either by row count (for example 10,000 rows per chunk) or by byte budget (for example 1 MB per chunk). The header row is written to the start of every chunk so each file parses on its own. Chunks are added to a JSZip archive and the whole archive is offered as a single download.

Byte sized splitting measures with TextEncoder so multi byte characters do not blow past the limit. Row sized splitting is exact: the last chunk may be smaller, but every other chunk has exactly the requested row count. A preview shows how many files will be produced and the approximate size of each one before the split runs.

How to use the CSV Splitter
  1. 1

    Upload the file

    Pick a CSV. The contents are loaded into memory and the row count is calculated so the preview can show file counts before splitting.

  2. 2

    Choose the split mode

    Set either rows per chunk or maximum megabytes per chunk. The preview updates with the projected number of files and approximate size.

  3. 3

    Download the ZIP

    Press Split to write each chunk into a JSZip archive with the header repeated, then download every chunk as one zipped file.

Common use cases

Bypass Excel row limits

Break a multi million row export into 1 million row chunks so each piece opens in Excel without rows being silently dropped.

Upload to size capped APIs

Carve a large dataset into 5 MB or 10 MB chunks for services that reject larger payloads in a single request.

Parallelize an import

Split a large CSV into equal sized files and import them concurrently with separate workers to speed up a database load.

Email a sample to a teammate

Carve out a small first chunk so a colleague can preview the structure without sharing the full dataset.

Frequently asked questions
Is my file uploaded to a server?

No. The CSV is read into memory by your browser, split locally with JSZip, and downloaded as a ZIP. No content leaves your device.

Will every chunk include the header?

Yes, when the header checkbox is on. The first row of the source file is written to the top of every output chunk so each one parses as a complete CSV.

What is the difference between rows and bytes modes?

Rows mode gives every chunk the exact same number of rows (except possibly the last). Bytes mode tries to keep each chunk at or below the requested size, which is useful for upload limits.

Are quoted multi line cells handled?

The splitter treats each line as a row, so a quoted cell with embedded newlines could be split across files. If your CSV uses multi line cells, convert them to single line first or use row counts that respect record boundaries.

How large a file can it handle?

It depends on available memory in your browser tab. Most modern desktop browsers handle files in the hundreds of megabytes. For multi gigabyte files, split with a command line tool instead.

developerconverterformattertext