Use the free CSV Splitter by Rows below: your data never leaves your browser — all work happens on your device, and nothing is uploaded to any server.
What this tool does
Large CSV files cause practical problems: email attachments bounce, import tools time out, and spreadsheets crawl. This free CSV Splitter by Rows cuts a pasted or uploaded CSV into smaller downloadable chunks in your browser with the PapaParse parser. You choose how many data rows each chunk holds, and whether the header row repeats in every chunk, and the tool gives you one download link per chunk.
Nothing is uploaded, so even large files stay private, and splitting is fast because there is no server round trip. Each chunk is a valid CSV on its own, ready to import, email, or process separately.
How to use it
Paste your CSV or choose a file. Set Rows per chunk; 100 is the default, but 500 or 1000 suit many import limits. Keep the “repeat header” box checked if each chunk must stand alone, which is almost always the case for imports. Press Split. A download link appears for each part, labelled with its part number and row count.
Try a sample to see the mechanics: a five-row table split two rows at a time produces three parts, the last holding a single row. That remainder behaviour is normal: the final chunk holds whatever rows are left over.
Choosing a chunk size
The right size depends on the limit you are working around. If an import tool accepts at most 1000 rows per upload, split at 1000. If an email system caps attachments at a certain file size, estimate rows from the average row length, then pick a count safely below the cap. When in doubt, smaller chunks are safer: they import faster and a failure affects fewer rows.
Keep the header repeated unless you plan to rejoin the chunks later without headers. Import tools usually require a header in every file, and a chunk without one either fails or imports its first data row as a header, corrupting the data silently.
Common splitting jobs
Mailing lists are a classic case: a list of ten thousand contacts must go out in batches to respect sending limits. Product catalogues are another: a shop import that chokes on a full catalogue succeeds when fed a few hundred products at a time. Data migrations use splitting when a target system caps each upload, and researchers split survey exports to share slices with collaborators.
Splitting also helps debugging. If an import fails on a large file, splitting it lets you find the problem rows by testing chunks one at a time, instead of scanning thousands of rows by eye.
Tips for clean results
First, verify the row counts add up: the data rows across all chunks must equal the data rows in the original, and the header must not be counted as data. The tool’s status line reports the chunk count and total rows to make this check easy. Second, name the parts clearly when saving; part numbers are in the download names, so keep them in order during import.
Third, watch for quoted line breaks. A CSV value containing a real line break is one row, not two, and PapaParse handles it correctly. If your row counts look wrong, a quoted line break or an unclosed quote in the source is the usual cause, not the splitter.
Frequently asked questions
Is my CSV uploaded? No. Splitting runs in your browser with PapaParse. Your file never leaves your device, and chunks are generated locally.
Does the header count toward rows per chunk? No. Rows per chunk counts data rows only. A chunk set to 100 rows holds the header plus 100 data rows.
What if the row count does not divide evenly? The last chunk holds the remainder. A file of 250 rows split at 100 gives chunks of 100, 100, and 50.
Can I split without repeating the header? Yes, uncheck the repeat box. The first chunk then carries the header and later chunks carry data only, which suits rejoining but not standalone imports.
