Adding a product to Shopify takes minutes. Adding five thousand takes either a week of tedious clicking or a well-planned import. Merchants who choose the second route often discover that the import tool is the easy part and the data is the hard one. A supplier spreadsheet with merged cells, inconsistent sizes and image links that expire is not an import file, whatever the extension says.
This guide compares the ways to upload products in bulk, explains how to prepare data that imports cleanly, how to deal with the traps in variants, images and metafields, and how to test and roll back. Platform limits and templates change, so check Shopify’s current documentation. For error messages, see Shopify CSV import errors, and for custom fields metafields.
Four ways to load products
| Method | Best for | Strengths | Limits |
|---|---|---|---|
| CSV import | Hundreds to thousands of products, one-off or occasional | Built in, familiar, uses a template | Strict format; overwrites by handle if chosen; file size and row limits apply |
| Bulk editor | Editing existing products in a spreadsheet-like grid | Quick for price, tags, inventory | Not for creating many new products with complex variants |
| Apps | Supplier feeds, recurring imports, transformations | Scheduling, mapping, rules | Cost; quality varies; read reviews and permissions |
| Admin API (GraphQL) | Large or custom flows, ongoing sync | Full control, validation, logging | Needs development; rate limits apply; see API rate limits |
A common path is to begin with CSV, move to an app when the supplier feed becomes recurring and use the API when rules get complicated or volume grows. The data preparation is the same in all of them, so it pays to invest there first.
The shape of the data
Shopify’s product CSV has one row per variant. The first row for a product carries the handle, title, description, vendor, type, tags and status, together with its first variant. Subsequent rows for the same handle carry only variant data, such as option values, SKU, price, inventory and image. Getting that structure wrong is the commonest cause of import errors.
| Concept | Rule of thumb |
|---|---|
| Handle | A unique, lowercase, hyphenated identifier per product; repeated on every variant row |
| Options | Up to three option names per product, with each variant having a value for each |
| SKU | Unique per variant; used for inventory and syncing |
| Price and compare-at | Numeric, without currency symbols |
| Inventory | Quantity per location, and whether Shopify tracks it |
| Images | Public URLs; the first row for an image sets its position; variant images link by position or URL |
| Status | Draft or active; use draft for tests |
| Tags and type | Controlled vocabularies, not free text |
Prepare the source data
- Gather and dedupe. Combine supplier files, remove duplicate SKUs and decide the master source for each field.
- Normalise. Standardise units, case, brand spellings and size labels. “XL”, “X-Large” and “Extra Large” should be one value.
- Structure variants. Decide what is a product and what is a variant. Colour and size are variants; two different designs are different products.
- Generate handles from titles in a predictable way, and check for collisions.
- Write or enrich content. Titles, descriptions, tags and meta fields, ideally from structured attributes. See title formulas.
- Check images. URLs must be public and stable, in supported formats and a sensible size. Broken links produce missing images without a clear error.
- Map metafields to their definitions and validate values.
- Validate against rules before generating the file: required fields, price format, unique SKUs, allowed values.
This is the work our bulk product upload and product data enrichment services do for merchants: clean, enrich, validate and load, with a log of every row.
Variants and options
Variants cause most grief. A product with three sizes and four colours has twelve variants, each with a row in the CSV. Missing a combination leaves a gap; duplicating one causes an error. Keep option names consistent across products (Size, Colour) so that filters work. Remember the cap on options and variants per product in Shopify and check the current limits, which have changed over time. If a product has more combinations than allowed, split it or restructure it.
Images
- Use public HTTPS URLs that will stay live for the import and afterwards, since Shopify fetches them once and hosts its own copy.
- Name files meaningfully, because the file name can appear in the CDN URL.
- Set alt text in the CSV or afterwards in bulk; see alt text examples.
- Keep sizes sensible and formats web-friendly.
- Import images in a second pass if a product set is huge, to keep files manageable.
Inventory and locations
If you have more than one location, inventory columns are per location, and the import must name the location correctly. Decide whether Shopify should track quantity for each variant and what to do with out-of-stock behaviour. For recurring supplier feeds, keep stock updates in a separate flow from product creation, so that frequent changes do not risk rewriting content. See inventory sync.
Test before the real import
- Create a development store or use drafts in your live store.
- Import 20 to 50 representative products, including simple, multi-variant and awkward ones.
- Inspect them in the admin and on the storefront: titles, variants, prices, images, tags, metafields and collections.
- Fix the data or mapping and repeat.
- Export your current catalogue as a backup before any import that overwrites existing products.
- Import the rest in batches, checking each.
- Set products live only after a final review.
The “overwrite existing products” option replaces data for matching handles, which is powerful and dangerous. Use it only with a backup and a clear idea of which columns will change. If you only want to update prices, import only the columns you need, or use the bulk editor or the API.
Collections, SEO and redirects
Products arrive in a store with no structure unless you provide it. Automated collections based on tags, vendor or type can organise new products as they arrive, so prepare tags accordingly. Fill SEO titles and descriptions and check URL handles, since they become the page URL. If you are migrating from another platform, plan 301 redirects from old URLs to new ones, as described in the platform documentation. For search value, see product SEO titles and meta tags.
Automate recurring uploads
If suppliers send new files weekly, the process should run itself. A typical pipeline fetches the file, validates it, compares it with the current catalogue, creates new products, updates changed fields, flags removed items, logs results and sends a summary. Use idempotent operations, keyed on SKU or an external ID, so a rerun does not create duplicates; see idempotency. Alert on abnormal files, such as a sudden drop in rows, which often means a broken export. Our supplier feed sync service builds this.
A worked example
A merchant has 3,500 products from three suppliers. Creating each by hand takes about 8 minutes, or 467 hours. A cleaned pipeline takes 40 hours to build, including mapping, validation and a pilot, and then roughly 3 hours per weekly update including review. At $25 an hour, manual entry would cost $11,700, against $1,000 for the build, plus $75 per week for updates. Over a year, the pipeline costs about $4,900 versus recurring manual updates of far more. The saving is large, but the main benefit is consistency, with fewer pricing and stock errors. The figures are illustrative.
Mistakes to avoid
- Importing straight from a supplier file.
- No backup before overwriting.
- Changing handles on live products and breaking URLs.
- Mixed option names across products.
- Images hosted on temporary links.
- Skipping the test batch.
- Importing in Excel and saving with the wrong encoding so accents turn to symbols; save as UTF-8 CSV.
Sources and further reading
Figures and rules in this guide come from the primary pages below. Platform limits and prices change, so open the page before you build on a number.
- Shopify Help Center: import products with a CSV, the CSV import process and requirements
- Shopify Help Center: product CSV file format, column definitions and rules
- Shopify Developer Docs: product API, creating and updating products through the API