Toolvore

CSV Splitter

Split CSV records into smaller files, preserve quoted line breaks and download a ZIP locally.

This tool runs entirely in your browser. Your data is never uploaded, never stored, and never leaves your device.

CSV Split divides a table by complete data-record count, optionally repeats its header, and downloads numbered CSV files plus a record-count manifest in one ZIP.

How to use it

  1. 1Load or paste UTF-8 CSV and select its delimiter.
  2. 2Set data rows per part and whether to repeat the first record as a header.
  3. 3Review the part counts, then download the CSV parts ZIP and manifest.

Example

Input
id,name 001,Mira 002,Leo 003,Ada 2 data rows per part; repeat header
Output
part-001.csv: header + 2 data rows part-002.csv: header + 1 data row manifest.json: part names, row ranges and byte counts

Quoted multiline fields count as one logical record.

What happens to your data

The strict CSV parser and ZIP generator run locally in your browser. CSV parts retain your data, while manifest.json records settings and counts without copying the original filename or cell values.

Last updated October 2026

Split a CSV file into smaller files by data-row count without breaking quoted multiline values. CSV Split reads complete records, repeats the first record as a header when requested, and packages the parts into a single ZIP. A JSON manifest identifies each part, its record range and its uncompressed UTF-8 size.

Use it to prepare batches for an importer that accepts a limited number of records, or to share manageable portions of a table. The operation keeps record order and field values; it does not guess a delimiter or divide text at every physical line break.

How it works

Load a local UTF-8 file or paste CSV text. Select comma, semicolon or tab, enter a positive whole number of data rows per part, and decide whether the first record is a header. With the header option checked, that record is excluded from the data count and repeated at the start of every part. With it unchecked, the first record is ordinary data and no header is added.

CSV records can span several physical lines when a field is quoted. The strict parser keeps such fields inside one record and handles escaped double quotes and embedded delimiters. Malformed quotes and unequal field counts stop processing. The tool never silently drops fields, pads a short row or creates a partial archive from an invalid file. An empty file is rejected; a header-only file intentionally becomes one header-only part.

Part names are predictable: part-001.csv, part-002.csv and so on. The ZIP also contains manifest.json. Its one-based data-record ranges exclude the repeated header and refer to logical records, not physical lines. It records the delimiter, header choice, formula-protection mode, per-part row counts and UTF-8 byte counts. The manifest does not copy field values or the original filename. Row counts and byte counts describe uncompressed CSV files, so they differ from compressed ZIP size.

Input is bounded to 2 MiB, 10,000 records including any header, 200 columns and 200,000 cells. The ZIP contains at most 200 CSV parts and one manifest. Combined uncompressed CSV output is capped at 10 MiB, including repeated headers. A very large header repeated many times can reach that limit even with a smaller input. Increase rows per part to reduce the number of parts and the repeated-header overhead. This is a bounded browser operation, not a streaming splitter for multi-gigabyte datasets.

Generated parts use the chosen delimiter, UTF-8 and CRLF record endings. A source BOM is removed; line breaks inside quoted fields remain field content. Values stay as strings unless you enable optional apostrophe prefixes for formula-like cells. That option changes affected cells, including repeated headers and negative numbers, and has application-specific limitations. Import identifiers as text to avoid spreadsheet type inference. Editing the source or settings cancels the earlier result; an archive finishing after an edit is not downloaded. Parsing and ZIP creation stay on your device.

Worked example: Split three data records into batches of two

Input
id,name 001,Mira 002,Leo 003,Ada 2 data rows per part; repeat header
Result
part-001.csv: id,name 001,Mira 002,Leo part-002.csv: id,name 003,Ada

The ZIP also includes manifest.json with row counts 2 and 1 and data-record ranges 1–2 and 3–3.

Common use cases

  • Preparing small batches for row-limited CSV importers
  • Dividing a table while keeping the same header in every file
  • Packaging ordered export segments with an auditable record-count manifest
  • Splitting records containing multiline notes without cutting fields apart

Frequently asked questions

Does rows per part count the header?+

No when repeat header is selected: it counts only data records. A part with 100 data rows then has 101 CSV records. Without a header, every record counts toward the limit.

Will line breaks inside a cell create extra parts?+

No. A line break inside a correctly quoted field belongs to that field, so the parser counts the complete multiline record once. Unclosed quotes are rejected with a location.

Can I split by exact file size instead of row count?+

No. This tool splits by data-record count. Variable-length fields and repeated headers mean two parts with the same number of rows can have different byte sizes. Review the manifest if an importer also has a size cap.

Why is there a 200-part limit?+

The input, generated CSV strings and ZIP are assembled in browser memory. Limiting both part count and combined uncompressed output bounds that work. Increase rows per part when the requested split would create too many entries.

Can I split a file without column names?+

Yes. Uncheck the header option. The first record then remains data and no extra header row is invented. All records still need the same field count.

How do I combine the files again?+

For parts with unique named headers, CSV Merge can append them in order while retaining one header. Check the manifest ranges and select the numbered parts in order. Headerless data needs a workflow that appends records without dropping the first row.