Split a large CSV into smaller files
Upload forms that cap at 10,000 rows or 25 MB, mail-merge tools that choke past 5,000 contacts, ticketing systems that want batches, a colleague who genuinely just needs “the file, but in Excel-sized pieces” — splitting a CSV is one of those chores that shouldn’t require installing anything. Set a rows-per-file number here and download one ZIP containing the parts: data-part-01.csv, data-part-02.csv, … each with the header row repeated on top so every part imports standalone.
The split is quote-aware — a row whose quoted field contains line breaks is never cut in half, because the splitter counts parsed rows, not text lines. And it happens on your machine: a 300 MB customer file gets split without a byte of it leaving your device.
Preset: the split export panel opens as soon as your file loads.
Drop a CSV, TSV or Excel file here
.csv · .tsv · .txt · .csv.gz · .xlsx — files up to 4 GB open here, in your browser. Nothing is uploaded; the file is read in place on your device.
Filters combine with AND. Use the search box for a quick any-column match. Regex filters use JavaScript syntax.
Untick to hide a column (hidden columns are left out of exports). Type to rename — renames apply to exports too.
Exports include your filters, sort, edits and cleanups. Hidden columns are left out; renamed headers apply. The file is generated on your device — nothing is sent anywhere.
How it works
- Drop the file (up to 512 MB for splitting).
- The split panel is open — set rows per file (e.g. 9,999 for a 10k-limit importer: headers count!).
- Optionally filter first — the split covers exactly the rows in view.
- Download the ZIP; each part is a complete CSV with the header included.
Picking the rows-per-file number
Work backwards from the destination’s limit, and mind the header: an importer that accepts “10,000 rows” usually means 10,000 lines including the header, so 9,999 data rows per part is the safe setting. For size-capped uploads (25 MB, say), estimate bytes per row from the status bar (file size ÷ row count) and set rows-per-file with ~10% headroom — CSV rows vary in width, and a part that lands exactly on the cap will bounce on the one fat row.
If the real goal is “make it open in Excel”, the number is 1,048,575 data rows — but consider whether each part will be miserable to use at that size; 100,000-row parts are far more workable, and the part count barely matters once it’s a ZIP.
Good to know
- Filter before splitting to drop junk rows once, instead of in every part.
- Parts are plain UTF-8 comma CSVs with headers — they re-import into anything, including back into this site.
- The 512 MB splitting cap exists because parts are assembled in memory before zipping — for bigger files, filter to subsets and split those.
Frequently asked questions
Does every part get the header row?
Yes — each part is a standalone CSV with the header on line 1, which is what upload forms and importers expect. (A future no-header option would only matter for concatenation workflows — tell us if you need it.)
Can a quoted multi-line row get cut between parts?
No — splitting counts parsed rows, not lines, so a row is always kept whole regardless of embedded line breaks. Naive line-based splitters (split by every N lines) do break such rows; that’s the failure this page exists to avoid.
Why one ZIP instead of separate downloads?
Twenty parts means twenty browser download prompts — a ZIP is one click and keeps the parts together. The ZIP is assembled locally (stored, not re-compressed, so it’s fast even for hundreds of MB).
Can I split by file size instead of row count?
Not directly — row count is the honest unit for CSVs since importer limits are usually row-based. For a size target, divide: desired part size ÷ (file size ÷ total rows) ≈ rows per file, minus ~10% headroom.