Bulk Import Products to Shopify: Step-by-Step

Author name: Mark Chickering

image

Adding products one at a time works for a handful of items and turns into hours of copy-paste for a real catalog. Shopify lets you bulk import or bulk upload products with a CSV file, and for larger or recurring catalogs there are apps, the Admin API and PIM software that connects to your store.

This guide walks through the CSV route step by step, using the current Shopify template, then shows when another method saves more time.

TL;DR

  • Fastest route for most stores: download Shopify's sample CSV, fill it in, then go to Products, Import, Add file, Upload and continue, Import products.
  • Required data: only Title for a new product; add URL handle when the product has variants.
  • Images: upload them to Content, Files, and paste the public HTTPS links into the image columns.
  • Limits: 15 MB per file, three options and 2,048 variants per product, 250 images per product.
  • Recurring imports or several channels: use a PIM or an import app instead of repeating CSV uploads.

Choose Your Import Method

The right method depends on how many products you have, where the data comes from and how often it changes.

MethodBest forSigns it fitsWhat to watch
Shopify CSV importOne-time loads and occasional updatesFiles under 15 MB, one-off or occasional jobsColumn names, handles, 15 MB limit
Migration appMoving from WooCommerce, Wix, Magento or another platformProducts already live in another storeWhich data types move and what the app charges
Bulk import app such as MatrixifyExcel files, larger jobs, data the native CSV can't handleFiles over 15 MB, Excel files or extra data typesThe app's own file format and plan limits
PIM with Shopify Sync and FeedRecurring updates, supplier data, several channelsData changes every week or goes to several channelsField mapping and which system owns each field
GraphQL Admin API bulk operationsCustom integrations and very large automated jobsAutomated jobs built by developersDeveloper time, JSONL files, error handling

For a first import of a clean file, the CSV route below is enough.

Step 1: Get the Current Shopify Product CSV Template

Start from Shopify's own file. In your Shopify admin, open Products, click Import and download the sample CSV, or export a few existing products to see your store's current format. You can edit it in Google Sheets, Excel or Numbers, as long as you save it back as CSV. In Google Sheets, use File, Download, Comma-separated values (.csv). Excel needs more care: it can drop leading zeros from SKUs and barcodes and turn long GTINs into numbers such as 1.23E+12, so format those columns as text before you paste supplier data.

Shopify renamed several columns in its current template. Older files still import because Shopify keeps backward compatibility, but new exports use the new names, so build your file on the current version. These are the columns most imports need:

ColumnWhat it holdsRequired?
TitleProduct nameYes, for every new product
URL handle (Handle in older templates)Unique ID that groups a product's rows and forms its URLYes, for products with variants and for updates
DescriptionProduct description, HTML allowedNo
Vendor, Type, Tags, Product categoryClassification used for filters and collectionsNo
StatusActive, draft or archived; draft keeps products hidden while you check themNo
Option1 name / Option1 value (up to Option3)Variant options such as Size and MediumYes, for variants
SKU, Barcodes, Price, Compare-at priceVariant identifiers and pricingFill in Price for every variant; a blank price imports as 0.00
Inventory tracker / Inventory quantitySet the tracker to shopify so Shopify counts stock; quantity works for stores with a single locationWhen tracking inventory
Product image URL / Variant image URLPublic links to product and variant imagesNo
Image alt textImage description for accessibility and search, up to 512 charactersNo
SEO title / SEO descriptionSearch snippet text, up to 70 and 320 charactersNo

Don't rename headers or change their spelling, because header names are case-sensitive and must match the template. You can leave cells blank or remove columns you don't need, but keep related columns together, such as Option1 name and Option1 value. Collection is the only column you can add without breaking the format. Shopify's CSV column reference lists every field and its accepted values.

Step 2: Prepare Your Product CSV

Most import errors start in the file, so clean it before you upload. Save a separate working copy, keep the original template untouched and map each column from your supplier or old platform to the matching Shopify column by name.

Prepare a Shopify product CSV with intact headers, variant rows, and image links.

Products Without Variants

A simple product, such as a tote bag in one size and color, takes one row. Keep the default option from the template: Option1 name is Title and Option1 value is Default Title. Put the price, SKU and barcode on that same row.

Add Variants

Each variant gets its own row. Repeat the same URL handle on every row of the product and fill in the option names and values, such as Color: Blue and Size: Medium. A product can have up to three options and 2,048 variants. Product-level fields such as Title and Description only need to appear on the first row.

When you update variant fields such as SKU or weight, keep the Option1 name and Option1 value columns in the file. Without them, Shopify can create a new default variant and delete the existing ones.

Upload Images and Get HTTPS Links

The CSV holds image links, so upload the image files first. If your images are on your computer, upload them in your Shopify admin under Content, then Files, and copy each file's link. Links must be public, start with https and work without a password.

Add the main image in Product image URL. For more images of the same product, add extra rows with the same URL handle and one image link per row, up to 250 images per product. Use Variant image URL to show the right picture when a shopper picks a color.

Example: What the Rows Look Like

Here is a simple product, a product with two sizes and an extra image row, with the other columns left out for clarity:

URL handleTitleOption1 nameOption1 valuePriceSKUProduct image URL
canvas-toteCanvas Tote BagTitleDefault Title24.00TOTE-01https://example.com/tote.jpg
linen-shirtLinen ShirtSizeSmall48.00SHIRT-Shttps://example.com/shirt-front.jpg
linen-shirtSizeMedium48.00SHIRT-M
linen-shirthttps://example.com/shirt-back.jpg

The second and third rows share one URL handle, so Shopify creates one shirt with two variants. The last row adds a second image to the same shirt.

Include Metafields

Product metafields can go in the CSV as extra columns with a header in the format Name (product.metafields.namespace.key), for example Material (product.metafields.custom.material). The easiest way to get the exact header is to create the metafield definition first and export one product. Variant metafields can't be imported by CSV, so edit those in the variant bulk editor or use an app or PIM.

Handle Inventory

Set Inventory tracker to shopify on each variant row you want Shopify to count; a blank tracker means stock isn't tracked. The Inventory quantity column works only for stores with a single location. If you stock products in several locations, import products first and update stock with Shopify's separate inventory CSV.

Save as UTF-8

Keep descriptions and other text in UTF-8 encoding. Shopify notes that other encodings can cause odd characters to appear after import. Replace curly quotes with straight quotes, and check commas and quotation marks inside descriptions, because they can break a row.

Before you upload, sort the file by URL handle, scan for blank titles and confirm that prices and SKUs sit on the right variant rows. Then import a test batch of five to ten products with Status set to draft, check them and only then upload the rest.

Verify Shopify product imports by checking product details, variants, and images.

Step 3: Upload the CSV in Shopify Admin

Shopify's import screen takes a few clicks. Two settings on it decide what happens to existing products and sales channels.

  1. In your Shopify admin, go to Products.
  2. Click Import.
  3. Click Add file and select your CSV.
  4. Optional: deselect Publish new products to all sales channels if new products should appear only in your online store.
  5. Optional: select Overwrite products with matching handles if the file updates existing products. Existing values are replaced for every column included in the CSV, and a blank cell in an included column erases the current value.
  6. Click Upload and continue.
  7. Review the import details, then click Import products.

Use the review screen as your last checkpoint and confirm that the product count matches your file. An import can't be canceled once it starts, so if anything looks wrong, fix the file and upload it again before you confirm.

When the import finishes, Shopify sends a confirmation email to the account that set up the store. Keep the uploaded file with a short note about what it changed, because Shopify doesn't keep an import history.

Step 4: Check the Results and Fix Import Errors

A completed import means Shopify processed the file. Then check that the products look right: compare the first product, the last product, a product with many variants and any unusual row against your CSV, then open a few product pages on the storefront to check images, variant pictures and descriptions.

If Shopify reports an error, these are the most common messages and fixes from Shopify's import troubleshooting guide:

Error messageHow to fix it
Invalid CSV header: missing headersRestore the first row from the template and remove trailing spaces; if a Choose column headings window appears, match each column to the right field
Ignored line because handle already existsGive each product a unique URL handle
Ignored line because it did not contain product dataAdd a title to the product
Validation failed: options are not uniqueRemove duplicate option combinations under the same handle
Validation failed: price can't be blankAdd a price to every variant row
An error occurred while trying to download the imageFix the link so it points directly to a public image
Illegal quoting or missing or stray quoteSave as UTF-8 and replace curly quotes with straight quotes
Inventory quantity is not a numberEnter a numeric quantity in every tracked variant row
Not a valid product categoryUse the full category breadcrumb or category ID from Shopify's Standard Product Taxonomy

Fix the source file, test the corrected rows with a small batch and only then import the rest.

Step 5: Update Existing Products Without Breaking Them

Updates are riskier than first imports because every row changes a product customers can already see. Export the products you plan to change and keep an untouched copy as a backup. Work on a duplicate and include only the columns you want to change, plus URL handle and Title, and keep the Option1 columns when you change variant fields. With overwrite turned on, a blank cell erases the current value, so delete columns you don't want to touch instead of leaving them empty.

Keep handles stable. Shopify matches rows to products by URL handle, so a typo turns an update into a new product. Be careful with option values too: changing Option1, Option2 or Option3 values deletes the existing variant IDs and creates new ones, which can affect apps, reports and links that rely on those IDs.

Turn on Overwrite products with matching handles only for this kind of job, and test it on a few products first. For a small change to a handful of products, Shopify's bulk editor is often faster than a file. To see what changed after an import, check your store's activity log.

Shopify Import Limits to Know

These limits decide whether a single CSV will work for your catalog:

  • File size: a product CSV can't exceed 15 MB. Shopify's help sets a file size limit, not a product count, so split larger catalogs into several files and keep all rows of a product in the same file.
  • Options and variants: up to three options and 2,048 variants per product.
  • Images: up to 250 per product.
  • Collections: a product can be added to one collection through CSV, and a collection that doesn't exist yet is created.
  • Gift cards: new gift cards can't be created through a product CSV.
  • Deleting: CSV files can't delete products in bulk; use bulk actions in the Products list.
  • Sales channels: CSV can't bulk update product availability on channels other than the online store.
  • Large stores: stores with more than 500,000 variants on plans below Shopify Plus can create up to 10,000 new variants per day through CSV or the API.

For very large automated jobs, developers can use bulk operations in the GraphQL Admin API, which upload a JSONL file and process it asynchronously.

Importing From Another Platform

If your products already live in another store, you don't have to rebuild them by hand. Shopify's own Store Migration app moves product and customer data from platforms including WooCommerce, Etsy, Wix, Amazon, eBay and Square, either through a connected account or an uploaded file. Third-party migration apps cover other platforms and extra data such as orders, which a product CSV can't carry.

If you prefer to rebuild the file yourself, the main WooCommerce export columns map to Shopify like this:

  • Name becomes Title, and Description stays Description.
  • SKU stays SKU on each variant row.
  • For products on sale, Sale price becomes Price and Regular price becomes Compare-at price; otherwise Regular price becomes Price.
  • Attribute 1 name and its values become Option1 name and Option1 value, one row per variant.
  • The comma-separated Images list becomes one Product image URL per row.

Product URLs change when you move platforms, so plan redirects before you switch your domain. In Shopify, go to Content, Menus, URL redirects and import a CSV of old and new addresses, so search traffic and old links land on the right products. Run the migration in a development store first, compare a sample of products with the source and only then import into your live store.

Choosing a PIM for Your Shopify Store

If imports have become a weekly job, these guides help you pick the right system and identifiers.

When CSV Stops Scaling: Recurring Imports With a PIM

CSV works well for a one-time load. It gets harder when supplier files arrive every week, several people edit products, or the same catalog has to reach Shopify, Google Shopping and another store. Each round of exporting, fixing and re-importing adds a chance to overwrite good data.

A PIM keeps one master record for each product and sends the right version to each connected channel. With PIMinto's Shopify PIM integration, the work runs in two directions:

  • Sync pulls your existing Shopify products, and later changes made in Shopify, into PIMinto without a CSV.
  • Feed sends enriched product data from PIMinto back to Shopify, on demand or on a schedule, and can send only the products that changed since the last run.

Between the two, your team cleans and enriches data in bulk. Supplier files can be imported from CSV or Excel with validation that flags values that don't match your attribute rules, values can be calculated during import, and a recent import can be rolled back in one click, fully or for selected attributes, within a limited window after the import. The same record can also go to BigCommerce, WooCommerce, Wix and Google Merchant Center, and several Shopify stores can be connected.

To make recurring imports reliable with any tool, decide which system owns each field, map fields once, test with a variant-heavy product and log rejected records before the next run.

Conclusion

For a one-time catalog load, Shopify's CSV import is the simplest route: start from the current template, keep headers and handles intact, upload images first, review the preview and check the storefront after the import. When imports turn into a weekly routine or the catalog feeds more than one channel, a PIM saves the repeated cleanup.

PIMinto brings your Shopify catalog in with Sync, lets your team fix and enrich it in one place and sends it back with Feed. Plans start at $300 per month with a 30-day full-featured trial, and migration from any PIM is included.

Stop Rebuilding Your Shopify Catalog in Spreadsheets

See how PIMinto pulls your products from Shopify, cleans them up in bulk and keeps the store updated on a schedule.



Shopify Bulk Import FAQ

Download Shopify's sample CSV, fill in one row per variant with a title, URL handle, options, price and image links, and save it as UTF-8. Then go to Products, Import, Add file, Upload and continue, and Import products after checking the preview.

Yes. Edit the template in Excel or Google Sheets, then export or download it as a CSV in UTF-8 before uploading. Shopify's built-in importer accepts CSV only, while some import apps accept Excel files directly.

Give each variant its own row with the same URL handle, and fill in Option1 name and Option1 value, plus Option2 and Option3 if needed. Each variant row needs its own price, and each combination of option values must be unique.

Export the products, edit a copy and keep the same URL handles. During import, select Overwrite products with matching handles. Values are replaced in every column included in the file, and blank cells erase existing values, so remove columns you don't want to change and test on a few products first.

Shopify skips rows it can't use, such as rows with a duplicate handle or a handle without a title. Check the error messages Shopify shows after the upload, fix the affected rows and import them again as a small file.

Product metafields, yes, as columns with headers such as Material (product.metafields.custom.material). Variant metafields aren't supported in CSV import, so use the variant bulk editor, an import app or a PIM for those.

Shopify's help sets a file size limit for CSV imports, 15 MB per file, rather than a product count. Split a large catalog into several files and keep all rows of one product in the same file. Stores with more than 500,000 variants on plans below Shopify Plus can add up to 10,000 new variants per day.

Use Shopify's Store Migration app, or export products from WooCommerce as a CSV and rebuild the columns to match Shopify's template. Test the result in a development store and set up URL redirects before you switch your domain.


Modified on: 2026-10-28

0
Link copied to clipboard!

Blogs you might like