Navigated to blog › split-large-product-csv-for-shopify
Back to Blog
csv-import-guides

How to Split a Large Shopify Product CSV Without Breaking Variants

May 24, 2026
12
By SplitForge Team

Quick Answer

Shopify limits product CSV imports to 15MB per file and 1,000 new variant creations per 24-hour period. Both limits require splitting large catalogs into batch files. The non-obvious constraint: all variant rows for a product must be in the same file as their parent Handle row — a split that cuts mid-product orphans the variant rows and produces products with no purchasable options on import. Calculate a safe row threshold before splitting, then use CSV Splitter's SPLIT_BY_ROWS or SPLIT_BY_PARTS mode for the mechanical split.


Fast Fix

  1. Find the maximum variant count per product in your catalog (the product with the most variants).
  2. Calculate safe rows per file: (max variants + 1 parent row + image rows) × target products per batch.
  3. Open CSV Splitter. Select Split by rows and enter your safe threshold.
  4. Open the last 5 rows of each output file in a plain-text editor. Confirm no Handle straddles the split boundary.
  5. Import files sequentially into Shopify. If importing more than 1,000 new variants total, wait 24+ hours between batches.

TL;DR: A merchant with a 3,000-product catalog split their file at row 5,000 — a round number — and imported the first file two days before a Black Friday launch. Shopify showed "2,241 products imported" with no errors. What the success banner didn't show: 340 products had no variants available, because the split had landed mid-Handle. The variant rows for those products were in the second file, which had not yet imported. When the second file finally ran, those rows arrived with no parent product to attach to — they were rejected silently.

Splitting a Shopify product CSV is the documented solution to the 15MB and 1,000-variant limits. The step Shopify's documentation omits is the Handle-aware threshold calculation.


Recognizing the Limits and the Bad-Split Symptoms

Errors from the 15MB limit appear at upload time. Errors from the variant limit and from bad splits appear later — after a seemingly successful import.

From the 15MB file size ceiling:

  • Upload fails immediately or times out — the import screen shows an error before any rows are processed.
  • "Your file is too large" or similar (representative — exact wording may vary by plan and browser).
  • Slow connections may produce a timeout on files approaching but not exceeding 15MB.

From the 1,000-new-variant-per-24-hour limit:

  • "Daily variant creation limit reached" — appears in Shopify's admin error feed (representative — exact wording may vary by plan version).
  • The import appears to complete normally: the success banner fires, the product count is correct. What it does not show is that the last N products imported with no variants — they were created as bare product stubs with no options because the variant-creation counter hit its ceiling mid-file.
  • A customer sees the product listed in the store but cannot add it to cart.

From a naive split (orphaned variants):

  • Products appear with no variants. The product title exists in the store but has nothing purchasable.
  • A second file import may produce "Variant SKU already exists" if the orphaned rows attempt to attach to a product that was partially committed on the first import.
  • "Handle already exists" errors on the second file if orphaned variant rows are misread as new product rows.

What Causes the Orphaning Problem

SymptomRoot CauseFix
Upload fails or times outFile exceeds Shopify's 15MB import ceilingSplit by size to under 15MB per file
Products imported with no variants; "daily variant creation limit reached"More than 1,000 new variant creations submitted in 24 hoursBatch into groups of ≤1,000 new variants; import on separate calendar days
Products have no variants after split-and-import; no error on importSplit boundary cut mid-Handle — variant rows landed in a different file from their parent rowRecalculate safe row threshold; verify boundary rows; resplit

Table of Contents


Why Shopify Limits Product CSV Imports

Shopify's 15MB file size limit and 1,000-new-variant-per-24-hour cap are separate constraints with different origins. Neither is waivable on standard plans.

The 15MB limit applies at file upload. Shopify's importer processes files synchronously on their servers — larger files increase the risk of server-side timeouts before all rows are committed. At 15MB, a product CSV represents roughly 30,000–50,000 rows depending on field density. A catalog of 5,000 products with 6 variants each (30,000+ variant rows, plus image URL rows) commonly reaches 20–40MB. The fix is file splitting; there is no workaround on standard plans.

The 1,000-variant-per-24-hour limit throttles new variant object creations — not row count. Updating existing variants does not count against this limit; only creating new ones does. The counter resets at midnight Pacific time. A 3,000-product catalog where every product is new and has 5 variants requires 15,000 new variant creations — spread across 15 separate daily import batches (≤1,000 variants each) to import cleanly.

The interaction between the two limits matters for planning: a file split that keeps each file under 15MB may still exceed 1,000 new variants per file, requiring further subdivision for batching purposes.

For context on what your catalog file size means in practice: at 500 bytes per row (a realistic average for a product with title, description excerpt, image URL, and a few tags), 30,000 rows ≈ 15MB. Add image URL rows (one row per image, per product) and description HTML and your row count can triple without your product count changing.


The Safe-Split Method: Avoid Orphaning Variant Rows

Shopify's product CSV uses a parent-row / variant-row structure. Every product's parent row carries the Handle, Title, and all product-level fields. Each variant row for that product carries the same Handle and only variant-level fields — Variant SKU, Variant Price, Option1 Value. Image URL rows use the same Handle and carry only image fields.

All rows for one product — parent row, all variant rows, all image rows — must be in the same import file. If the split boundary lands mid-product, the result is:

  • File 1 creates the product with only the variants present before the boundary. The product is committed to the store at this point.
  • File 2's orphaned variant rows arrive with a Handle that now exists in the store. Shopify's import-update logic may attach them, reject them, or produce duplicate-option errors — behavior varies. What reliably does not happen is the catalog appearing correct without manual verification.

Step 1 — Determine your catalog's row footprint

Before splitting, find the product with the most rows in your file. Open the CSV in a plain-text editor (not Excel — Excel may reformat the data on open) and search for the Handle that repeats the most times. Count: 1 parent row + N variant rows + M image rows = total row footprint for that product.

Step 2 — Calculate your safe split threshold

Use this table as a starting point, then adjust for your catalog's actual image-row density:

Max variants per productSafe products per batch (≤1,000 new variants)Safe rows/file (no images)Safe rows/file (~1 image row per product)
2333999~1,330
33331,332~1,665
52001,200~1,400
81251,125~1,250
101001,100~1,200
15661,056~1,122

Image row estimates assume one image per product. Catalogs with multiple images per product should add actual image-row count to the row footprint calculation.

If your goal is only to stay under 15MB (not the variant limit), calculate rows per MB for your specific file: total rows ÷ file size in MB. Then set your split threshold at 14MB × rows-per-MB to stay safely under the ceiling.

Step 3 — Run the split

Open CSV Splitter and load your product CSV:

  • Use Split by rows with your calculated safe threshold. This gives you the most control over boundary placement.
  • Use Split by parts if you want a fixed number of equal-size output files — divide your target part count into total rows to verify the per-file row count stays within your threshold.
  • Use Split by size if your primary constraint is the 15MB ceiling and variant count is not a concern. Target 13–14MB per file to stay safely under the limit.

All processing runs in your browser — your product catalog is not uploaded to any server.

Step 4 — Verify the boundary rows

After splitting, open the last 5 rows of each output file and the first 5 rows of the next file in a plain-text editor. Confirm:

  • The last Handle in File N appears with all its variant rows complete — no variant rows for that Handle appear at the start of File N+1.
  • File N+1 begins with a new Handle on a parent row (a row containing Title), not a variant row (a row with Handle and Variant SKU but no Title).

If a Handle straddles the boundary (some rows in File N, some in File N+1):

  1. Move the straddling product's rows from the end of File N to the beginning of File N+1 in a plain-text editor.
  2. Or reduce your split threshold by 10–20 rows and re-split, then re-verify.

For the general large-file splitting workflow without Shopify-specific constraints, see How to Split Large CSV Files Without Excel and Split 1GB CSV Into 1,000 Files in 30 Seconds.


Re-Importing Split Files Into Shopify

Import order and pacing determine whether a split-and-reimport succeeds cleanly.

If all products are new (no existing Handles in the store):

Import files in sequence — File 1 first, then File 2, and so on. Wait for each import to reach "complete" status in Shopify's Products → Import history before starting the next file. If you hit the variant limit mid-import (the import stops creating variants partway through), stop. Wait until midnight Pacific for the counter to reset, then resume from the file or product where the limit was reached.

If you are updating existing products (Handles already exist in the store):

The 1,000-variant limit applies only to new variant creations. Updates to existing variants are not throttled. Import in sequence for easier error tracking, but pacing between files is not required. Shopify's importer matches existing Handles and updates only the fields present in the import file — fields absent from the file are not cleared.

If a file fails mid-import:

Check the error log in Shopify's Products → Import history. Correct only the rows that failed. Re-import only the corrected rows as a new file — do not re-import the full batch file, as that will produce "Handle already exists" errors for the rows that succeeded on the first pass.

Validating after import:

After all files import, spot-check the catalog. For each batch:

  • Verify that the last product in the batch has its correct variant count.
  • Verify that the first product in the next batch also shows correctly.
  • Check that no products have zero variants if they should have options.

For the full pre-import validation workflow before splitting, see Product CSV Pre-Import Validation Checklist. For the broader e-commerce CSV guide covering all five failure categories, see Shopify & WooCommerce Product CSV: Fixes, Imports & Migrations.


Additional Resources

Methodology: Shopify product CSV limits verified against Shopify's import documentation, May 2026. The variant rate limit, file size ceiling, and Handle/variant-row structure reflect Shopify's standard plan behavior — Shopify Plus merchants may have access to higher-throughput import tooling not covered here.

Shopify documentation:

Standards:


FAQ

The most common cause is a split boundary that landed mid-product — the parent Handle row was in one file, and some variant rows for the same Handle were in the next file. When the first file imported, Shopify created the product with only the variant rows present before the boundary. The orphaned variant rows in the second file either failed silently or were rejected. Fix: verify the last 5 rows of each split file to confirm no Handle straddles the boundary.

Shopify's product CSV importer has a 15MB file size ceiling. Files over 15MB fail at the upload step before any rows are processed. The fix is to split the catalog into files under 15MB each and import sequentially. A file under 15MB can still hit the 1,000-new-variant-per-24-hour limit — the two limits are independent.

Shopify limits new product variant creations to 1,000 per 24-hour period per store. This applies only to creating new variants — updating existing ones is not throttled. If a bulk import creates more than 1,000 new variants, it stops mid-file. Products imported before the limit was reached appear normally; products after the limit show with no variants. The counter resets at midnight Pacific. Batch imports with more than 1,000 new variants must be spread across multiple calendar days.

Excel is not recommended for splitting product CSVs. Excel auto-converts text columns that look like numbers to numeric format on open — stripping leading zeros from SKU barcodes. It also injects curly/smart quotes during cell editing and applies row-level sorting that severs image URL rows from their parent Handle. Use a plain-text editor or a dedicated tool to verify and manipulate product CSV boundaries.

Open the CSV in a plain-text editor. The Handle value repeats for every row belonging to the same product — parent row plus all variant rows. The Handle that appears most frequently in the file belongs to the product with the most rows. That product's row count is your maximum row footprint for the split threshold calculation.

Only if the file exceeds 15MB. The 1,000-variant limit applies only to new variant creations — updates to existing variants are not throttled. If you are importing changes to an existing catalog (price updates, inventory adjustments, description changes), the variant limit is not a concern. The 15MB file size limit still applies regardless of whether the import contains new products or updates.

CSV Splitter splits product CSVs by row count, file size, or number of parts — in your browser, with no upload. Your product catalog is not transmitted to any server. Paid apps like Matrixify offer a more automated split-and-import workflow that handles batching and sequencing, but they require uploading your catalog to their servers for processing.


Split Your Shopify Product CSV

Split by rows, file size, or parts — any catalog size, in your browser
No upload — product data never leaves your machine
Works for the 15MB limit and 1,000-variant daily batching

Continue Reading

More guides to help you work smarter with your data

csv-guides

Do You Need a Database for a Large CSV File? (2026 Answer)

The internet's answer to every big CSV is 'import it into a database.' Sometimes that's right. Usually it's a weekend of setup to answer one question. Here's the honest decision.

Read More
csv-guides

How to Open a Large CSV File — Even 10 GB, No Database (2026)

Excel dies at 1,048,576 rows, text editors choke, and 'just use a database' is a weekend project. Here's every real way to open a huge CSV — receipts included.

Read More
excel-guides

Excel File Too Large to Open? Fix Every Memory Error (2026)

Excel freezes, throws 'not enough memory,' or crashes outright — on a file that's only 40 MB. Here's why file size lies about memory, and the fix per error.

Read More