Fixed prices, paid once·Written replies within one working day
CheckoutLoom.

Marketing and retentionWin shoppers back

View all marketing →

Support and order careAnswer faster

View all support →

Product contentBetter listings

View all product content →

Inventory and pricingPrices and suppliers

View all inventory →

Finance and riskMoney and disputes

View all finance →

Shopify and WooStore-specific

View all services →

Dropshipping and EtsyMarketplaces and print

View all services →

Explore everything

Pick a way in. Every page has a fixed price and a delivery window.

All services88 automations for storesAll platformsShopify, WooCommerce and moreAll integrations82 tools we connectRequest a quote →

ShopifyStore platform

View all Shopify →

WooCommerceStore platform

View all WooCommerce →

BigCommerceStore platform

View all BigCommerce →

WixStore platform

View all Wix →

AmazonMarketplace

View all Amazon →

EtsyMarketplace

View all Etsy →

eBayMarketplace

View all eBay →

Your platform

Automation built for the store or marketplace you already sell on.

Store platforms8 platformsMarketplaces11 marketplacesAll who we serve363 pagesRequest a quote →

DropshippersSeller type

View all dropshippers →

DTC brandsSeller type

View all dtc brands →

Handmade sellersSeller type

View all handmade sellers →

Subscription boxesSeller type

View all →

B2B and wholesaleSeller type

View all b2b and wholesale →

AgenciesSeller type

View all agencies →

PrintfulPrint-on-demand

View all Printful →

Your kind of store

Pages written for how each type of seller actually works.

Seller types14 types of sellerPrint-on-demand9 platformsPopular audiences20 moreRequest a quote →

Email and SMSKlaviyo, Mailchimp and more

View all email and sms →

Support and chatGorgias, Zendesk and more

View all →

Payments and accountingStripe, QuickBooks and more

View all →

Shipping and suppliersShipStation, DSers and more

View all →

Reviews, ads and creativeJudge.me, Meta Ads and more

View all →

Automation and dataZapier, Make, Sheets

View all →

Marketplace and feed toolsGoogle Merchant, Helium 10

View all →

Works with your tools

We build inside the apps you already pay for.

All integrations82 toolsEmail and SMSKlaviyo, MailchimpPaymentsStripe, QuickBooksRequest a quote →

How-to guidesStep by step

View all 63 how-to guides →

Templates and checklistsCopy and use

View all 68 templates →

ComparisonsTools and options

View all 44 comparisons →

Cost and ROIWhat it costs

View all 34 cost pages →

GuidesLong reads

View all 14 guides →

Compliance and riskRules in plain words

View all →

Glossary and statisticsTerms and numbers

View all 17 →

Learn before you buy

Guides, templates and honest comparisons, free to use.

Resources hub256+ free resourcesBlogPractical articlesStatisticsSourced numbersRequest a quote →
Checkout Loom blog

Bulk product upload for Shopify: choosing the method, preparing the data and avoiding a messy catalogue

The four ways to load products in bulk, how to prepare data that imports cleanly, how to handle variants, images and metafields, and how to test and roll back safely.

  • 7 minute read
  • Written for store owners
  • Sources named
TitlesImagesFeeds

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

MethodBest forStrengthsLimits
CSV importHundreds to thousands of products, one-off or occasionalBuilt in, familiar, uses a templateStrict format; overwrites by handle if chosen; file size and row limits apply
Bulk editorEditing existing products in a spreadsheet-like gridQuick for price, tags, inventoryNot for creating many new products with complex variants
AppsSupplier feeds, recurring imports, transformationsScheduling, mapping, rulesCost; quality varies; read reviews and permissions
Admin API (GraphQL)Large or custom flows, ongoing syncFull control, validation, loggingNeeds 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.

ConceptRule of thumb
HandleA unique, lowercase, hyphenated identifier per product; repeated on every variant row
OptionsUp to three option names per product, with each variant having a value for each
SKUUnique per variant; used for inventory and syncing
Price and compare-atNumeric, without currency symbols
InventoryQuantity per location, and whether Shopify tracks it
ImagesPublic URLs; the first row for an image sets its position; variant images link by position or URL
StatusDraft or active; use draft for tests
Tags and typeControlled vocabularies, not free text

Prepare the source data

  1. Gather and dedupe. Combine supplier files, remove duplicate SKUs and decide the master source for each field.
  2. Normalise. Standardise units, case, brand spellings and size labels. “XL”, “X-Large” and “Extra Large” should be one value.
  3. Structure variants. Decide what is a product and what is a variant. Colour and size are variants; two different designs are different products.
  4. Generate handles from titles in a predictable way, and check for collisions.
  5. Write or enrich content. Titles, descriptions, tags and meta fields, ideally from structured attributes. See title formulas.
  6. Check images. URLs must be public and stable, in supported formats and a sensible size. Broken links produce missing images without a clear error.
  7. Map metafields to their definitions and validate values.
  8. 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

  1. Create a development store or use drafts in your live store.
  2. Import 20 to 50 representative products, including simple, multi-variant and awkward ones.
  3. Inspect them in the admin and on the storefront: titles, variants, prices, images, tags, metafields and collections.
  4. Fix the data or mapping and repeat.
  5. Export your current catalogue as a backup before any import that overwrites existing products.
  6. Import the rest in batches, checking each.
  7. 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.

Questions

8 questions readers ask about this topic

What is the best way to bulk upload products to Shopify?

CSV import suits one-off loads of hundreds or thousands of products. Apps suit recurring supplier feeds, and the Admin API suits custom or very large flows.

How do variants work in the Shopify CSV?

Each variant has its own row. The first row carries product-level data, and later rows with the same handle carry variant data only.

Can I update existing products with a CSV?

Yes, if you choose to overwrite products with matching handles. Back up first and include only the columns you intend to change.

Why are my images not importing?

Common causes are non-public or expired URLs, unsupported formats and redirects. Check that each URL opens in a private browser window.

How do I avoid duplicate products?

Use unique handles and SKUs, and make recurring imports match on SKU or an external ID.

Should I import products as draft?

Yes for tests and for large new loads, so you can review them before they go live.

Can I import metafields in bulk?

Yes, through columns mapped to metafield definitions in the CSV or through apps and the API.

Can Checkout Loom handle our bulk upload?

Yes. We clean, enrich, validate and load your data, with logs and an undo path.

Load thousands of products without the cleanup

Data cleaning, enrichment, validation, staged import and a full log of every row.

  • Fixed price, paid once
  • Built inside your tools
  • Thirty days of fixes