Guide
How to Split a CSV to Fit an Import Limit
Published · Updated
Your export is one file and the import screen will not take it: “file too large”, “maximum 1,048,576 rows”, or a progress bar that reaches 90% and fails. You need the same data in several smaller files, each one valid on its own.
Why Import Tools Cap Uploads at All
A cap is rarely about disk space. An import has to be received in one request, parsed, validated row by row and written into a database, inside a time limit, on a machine shared with everybody else importing that minute. So vendors set a number they can guarantee, expressed in whichever unit is easiest for them to check — which is why you meet three kinds of limit: a row count, a file size in megabytes, and, for spreadsheets, a cell count. HubSpot also publishes a rolling daily row allowance on top of its per-file limits, so the file that fails at 4pm may be the fifth file you sent that day rather than the wrong size.
First, Find Out Which Limit You Are Hitting
Read the error before you split anything, because the fix differs. If the limit is a number of rows, split by rows. If it is megabytes, split by size. If the destination is a spreadsheet, the limit is usually cells, so divide the cell allowance by your number of columns. If the message mentions columns or field names, splitting will not help at all — the file shape is wrong, and the answer is in merging files whose columns differ.
Published Limits, Checked 16 September 2026
These are the figures each vendor states in its own documentation. Follow the source link before you rely on one; see the note at the end of this guide.
| Destination | Published limit | Source |
|---|---|---|
| Excel worksheet | 1,048,576 rows and 16,384 columns per sheet; 32,767 characters per cell | Microsoft |
| Google Sheets | 10 million cells, or 18,278 columns, per spreadsheet created in or converted to Sheets; the cell limit is doubling to 20 million, rolling out from September 2026 | Google, announcement |
| HubSpot import (paid tiers) | Files up to 512 MB, 1,048,576 rows per file, fewer than 1,000 columns, 10,000,000 rows per day | HubSpot |
| HubSpot import (free tools) | Files up to 20 MB, fewer than 1,000 columns, 500,000 rows per day, up to 50 imports per day | HubSpot |
| Shopify product CSV | “Your product CSV can’t exceed 15 MB”, and the file must be saved as UTF-8 | Shopify |
| Klaviyo list upload | “Your CSV file must be 50 MB or less”; larger uploads must be split | Klaviyo |
| Mailchimp contact import | Over 200 MB, or about one million contacts, “may cause import errors” | Mailchimp |
| WooCommerce product importer | No published figure. The maximum shown on the upload screen is set at the server level; the docs advise splitting large files into batches | WooCommerce |
Two limits people expect to find here are missing on purpose. Google Ads Customer Match documents the file format — “your data must be in a CSV file, encoded in either ASCII or UTF-8 (UTF-16 is not supported)” — but states no maximum size or row count on that page, so there is no number to quote. Salesforce publishes record counts for Data Loader in its developer documentation, which we could not open to confirm, so check that one yourself rather than trusting a figure copied from a blog.
Work Out the Split, and Leave Headroom
If the cap is a row count, the arithmetic is simple: stay a little under it. For Excel, 1,000,000 rows per part leaves room for the header and for a row you add later. For a spreadsheet cell limit, divide: 10,000,000 cells ÷ 24 columns is about 416,000 rows, so 400,000 is a sensible setting — and for Google Sheets, keep using 10 million until the 20-million limit has reached your account.
If the cap is megabytes, do not convert it into a row count by guesswork. Rows are not a fixed size. In UTF-8 an accented letter takes two bytes, a Chinese character three, an emoji four; a free-text “notes” column can make one row twenty times the size of another; quotes add two bytes per value, and the repeated header adds its own. That is why splitting by size is a separate mode: the tool watches the bytes it writes instead of counting rows and hoping.
Leave roughly 10% headroom in size mode — 45 MB for a 50 MB cap. It costs one extra file and absorbs the difference between the way you count a megabyte and the way the upload form counts one.
Which Split Mode to Choose
The CSV splitter offers three, and picking the right one is most of the job.
| Mode | Use it when | Example setting |
|---|---|---|
| Rows per file | The limit is a row count, or the destination is a spreadsheet | 1000000 for Excel |
| Maximum size | The limit is in megabytes, or you are attaching files to email | 45 MB for a 50 MB cap |
| Number of files | You are dividing work between people or machines, and nothing caps a single file | 4 |
- Open the splitter and choose your CSV. Nothing is uploaded, so a multi-gigabyte file is ready at once.
- Pick a mode and type the number. Typing in a box selects that mode.
- Press Split File. Parts are named
yourfile-part-001.csv,yourfile-part-002.csvand so on, in the original row order. - Download them as a ZIP, or save them straight into a folder and upload one at a time.
In size mode, every part stays under the size you set unless a single row is larger than that on its own. In number-of-files mode you never get more files than you asked for.
Every Part Needs the Header, and No Row May Be Cut in Half
An import expects to read column names on the first line, so a part without the header is either rejected or — worse — imported with its first data row treated as headers. Each part therefore repeats the header, which is what First row is a header under Advanced Options does, and it is ticked by default.
The second rule is the one that quietly corrupts data. RFC 4180 allows a value to contain a line break as long as the value is wrapped in double quotes, and any column holding addresses, product descriptions or support notes will use that. A tool that cuts at the 100,000th newline can land in the middle of such a value, leaving one part ending in an unclosed quote and the next beginning with half an address. That is what happens when you split a CSV in a text editor, with the Unix split command, or with Get-Content in PowerShell: they count lines, not records, and they do not repeat the header. The splitter here parses the file and only ever cuts between complete rows.
Afterwards, check that the row counts add up — see how to count the rows in a CSV. If the parts ever need to be one file again, merging them restores the original order.
When to Split by Category Instead
Equal-sized parts are right when the same system imports all of them. They are wrong when each part has a different destination: one file per store for each store manager, one per client, one per region, one per month. Splitting by column value makes one file for every distinct value in a column you choose, named after that value, which means nobody has to filter anything afterwards and nobody sees another client’s rows. Those files are usually small enough to be under the import limit as a side effect. The tool refuses more than 10,000 distinct values, which is the point at which this is the wrong approach anyway.
Fix the Encoding Before You Split, Not After
Import failures are often blamed on size when the real cause is the file’s encoding or separator: a semicolon-separated export from a German system, a UTF-16 file from a Windows tool, a stray byte-order mark on the first header name. Shopify requires UTF-8; Google Ads accepts ASCII or UTF-8 and rejects UTF-16. Convert once with the encoding and delimiter tool, then split, so you are not repeating the fix on twenty parts. UTF-8, UTF-16 and Windows-1252 explained covers how to tell which one you have.
Remove duplicates before you split, too: duplicate rows spend your row allowance, and once the file is in parts a duplicate spread across two of them is invisible. Removing duplicate emails from a CSV list covers that on a contact file.
Limits Change
Every figure in the table above was read from the vendor’s own documentation on 16 September 2026, and several of them have moved before. Vendors also apply plan-specific limits that are not published at all, and a hard cap is not the same as a comfortable one: a file accepted at 48 MB may still time out. If an import fails while the file is inside the published limit, halve the part size before looking for a deeper cause. For a job you repeat every week, check whether the destination offers an API or a scheduled SFTP import; both usually allow far more than the upload form.
If the file is only slightly over a size limit, splitting may not be needed at all: reducing a CSV’s size measures which methods actually shrink a file, and which make it bigger.