Why does my Shopify product import keep timing out with 6,000+ products?
Bulk CSV uploads for large catalogs can stall or fail silently well before Shopify's official 15 MB file limit — here's why, and how to get thousands of products in reliably.
What's going on
You're trying to bring in a large catalog, somewhere north of 6,000 products, using Shopify's built-in CSV importer, and the upload either spins forever, throws a timeout, or silently drops rows partway through without a clear error. It's a genuine, reproducible failure, not a one-off fluke: the file is valid, the columns are right, and it still chokes once the row count gets large.
This isn't really a bug so much as a mismatch between what the native importer is designed for and what a full catalog migration demands. Shopify's CSV tool is built around browser-driven uploads with a hard 15 MB file size limit for products, inventory, and customer data, and it does more processing per row than people expect (image downloads, variant creation, inventory tracking setup) which adds up fast across thousands of rows in one file.
Why it happens
Shopify's native CSV importer has a documented 15 MB per-file size limit for product, inventory, and customer data. A catalog with thousands of SKUs, especially with multiple variants, metafields, and image URLs per product, can blow past that limit quickly even before you count image processing time.
Beyond the raw file size, the importer does synchronous-feeling work per row (creating variants, setting inventory, fetching images from URLs) inside a browser-initiated request. Very large single-file uploads are more likely to hit practical timeouts or partial failures than smaller ones, even if no single row is malformed.
Occasionally the issue isn't the file at all: transient slowdowns on Shopify's side (or on the CDN it fetches image URLs from) can make an otherwise-valid import look stuck when it's actually a temporary platform condition.
5 ways to fix it
Split the file into smaller, validated batches (best free fix)
Shopify enforces a 15 MB file size limit per CSV for products, inventory, and customer data (help.shopify.com), and even under that cap, very large or messy files are the most common cause of an import that appears to hang or fail partway through. Break a 6,000+ product catalog into chunks of roughly 200-500 products each rather than one giant file. Before running the full batch, import a test file of 1-3 products first to catch column, encoding, or image-URL problems while the blast radius is tiny. Use UTF-8 encoding and Google Sheets (rather than Excel) to avoid hidden character and formatting issues that silently corrupt rows.
Import as drafts first, publish after review
Set every row's Published column to FALSE for the first pass so products land as unpublished drafts. This removes the extra work Shopify does to make thousands of products live and searchable simultaneously, which is one of the heavier parts of a bulk import. Once you've spot-checked a sample of products in the admin, do a second bulk action to publish them, either via a saved filter and bulk edit, or a second CSV update with Published set to TRUE.
Check Shopify's status/health before assuming the import is broken
A CSV import that appears stuck can be a genuine platform-side slowdown rather than a problem with your file. Check status.shopify.com for active incidents affecting the Admin or import services before re-uploading, and check Settings > Notifications or the import summary screen in your admin (Products > Import) for a completion email and per-row error report, since Shopify emails you when large imports finish (or partially fail) rather than blocking the browser tab.
Use the Admin GraphQL bulk operations API instead of the CSV importer
If you (or your developer) need this to be reliable and repeatable, Shopify's bulk operations API (via the Admin GraphQL API) is built specifically for large-scale, asynchronous product creation and avoids the practical ceilings of the browser-based CSV importer entirely. It runs server-side, reports granular per-object success/failure, and isn't constrained by the 15 MB file cap or the timeout risk of a synchronous upload. This is more work to set up than a CSV, so it's worth it mainly if you import or update products regularly rather than as a one-off migration.
Consider a dedicated import app for very large or recurring catalogs
For catalogs in the thousands of SKUs, or if you're doing recurring supplier feed imports, a purpose-built import/data app (e.g. Matrixify or similar) will chunk, retry, and validate uploads automatically and generally handles far larger files than the native importer without manual batching. This is worth paying for if imports are a recurring operational task rather than a one-time migration.
Bottom line
A 6,000-plus product CSV import isn't really "broken" so much as it's bumping into Shopify's native importer being tuned for smaller, simpler files: keep batches well under the 15 MB limit, validate with a small test file first, import as drafts, and check status.shopify.com before assuming the platform failed. If this is a recurring need rather than a one-time migration, the GraphQL bulk operations API or a dedicated import app will scale far better than repeated CSV uploads; this isn't a problem BesPoP's apps are built to solve directly, so a general-purpose import tool or developer help with the bulk API is the right path.
Browse the rest of the problem library, run a free storefront scan to catch issues like this automatically, or email us and we'll work out a custom solution for it.