How to Convert a Supplier CSV to a Shopify Import File

Map a supplier price list to Shopify’s product CSV format: required columns, handles, variants, pricing rules and the mistakes that make imports fail.

· Supplier inventory sync · 8 MIN_READ

Your supplier sends a spreadsheet with their column names, their SKU format and their idea of what a product is. Shopify wants its own column layout, one row per variant and a handle that never changes. This guide shows how to convert a supplier CSV to a Shopify import file by hand, so you know exactly what a script would have to do.

It is written for store owners who work in Excel or Google Sheets, not for developers. Every step can be done with formulas and a text editor.

Step 1: Download Shopify’s current template

Do not build the target file from memory. In your Shopify admin, open Products, choose Import, and download the sample CSV. Shopify changes the template from time to time, and an import only matches columns by their exact header text.

Keep that file open next to the supplier file. The sample is your target: every column you fill must use its header spelling, including capitals and spaces. Header names can differ slightly between template versions (the stock column is the usual one), so copy yours rather than the names used in this guide.

Step 2: Map supplier columns to Shopify columns

Write the mapping down before touching any data. A typical supplier export maps like this:

Supplier columnShopify columnRule
Item NameTitleCopy as-is; fix ALL CAPS and trailing codes
Item NameHandleLowercase, hyphens for spaces, no symbols
Part NoVariant SKUKeep exactly; never strip leading zeros
WholesaleVariant PriceApply your markup; plain number, no currency symbol
RRPVariant Compare At PriceOnly if higher than the price
StockVariant Inventory QtyWhole number if you track inventory; use 0 for out of stock
Weight (kg)Variant GramsMultiply by 1000
BrandVendorCopy as-is
Photo URLImage SrcMust be a public https link

Inventory columns work for stores with a single location. If you use several locations, Shopify has a separate inventory CSV for stock quantities, and the product file should not carry them.

Here is a small supplier export. Notice the shouted titles, the comma decimal, the weight in kilograms and one row per size:

supplier-export.csvDELIMITER ; · 3 ROWS
Item NamePart NoWholesaleStockWeight (kg)Brand
ACME WORK GLOVE - MAG-100-M"5,60"1200.08Acme
ACME WORK GLOVE - LAG-100-L"5,60"950.09Acme
ACME WORK GLOVE - XLAG-100-XL"5,60"00.09Acme

With a 50% markup, the three rows become one product with three variants. The result is the shopify-import.csv excerpt in step 4, with the comma turned into a dot, kilograms turned into grams and the size split out of the name.

Step 3: Build a stable handle

The handle is the product’s identity in the import. Rows with the same handle are treated as the same product; a different handle creates a new one. That is why handle rules matter more than any other column.

  • Lowercase letters, numbers and hyphens only: no spaces, accents or periods.
  • Generate it from something that will not change, such as brand plus supplier part number, not from the marketing title the supplier rewrites every season.
  • Never reuse a handle for a different product.

If you generate handles from titles and the supplier later edits a title, the next import creates a duplicate listing instead of updating the old one.

Step 4: Turn supplier rows into variants

Many supplier files list every size and colour as a separate product row. Shopify expects one product with several variant rows. Group the supplier rows by a shared base code, then use Option1 Name and Option1 Value for the choice:

shopify-import.csv (excerpt)DELIMITER , · 3 ROWS
HandleTitleVendorOption1 NameOption1 ValueVariant SKUVariant PriceVariant Inventory Qty
acme-work-gloveAcme Work GloveAcmeSizeMAG-100-M8.40120
acme-work-gloveSizeLAG-100-L8.4095
acme-work-gloveSizeXLAG-100-XL8.400

Only the first row of a product carries the title, vendor and description. The following rows repeat the handle and fill only the variant columns.

Step 5: Apply your pricing rule once, in one place

Compute Variant Price from the wholesale column with a single rule: multiply by your markup, then round to the price endings you use. Put the markup in one cell and reference it, so changing it updates every row. Hard-coding a different multiplier per row is how a store ends up selling a product below cost without anyone noticing.

Check the result against the wholesale cost for the cheapest 20 rows. Any price at or below cost means a mapping error, usually a shifted column.

Step 6: Clean the data before you import

  • Currency and thousands separators: 1.299,00 is 1299.00. Shopify expects a dot as the decimal separator and no thousands separator.
  • SKUs that Excel turned into numbers or scientific notation (1.2E+5). Format the column as text before pasting.
  • Encoding: save as CSV UTF-8, or accented characters arrive broken.
  • Empty titles on first rows, duplicate SKUs and image links that open a web page instead of a picture.

Step 7: Import a small batch first

Import ten products before you import ten thousand. Open them in the admin and check variants, price, stock and images. Tick “Overwrite products with matching handles” only when you intend to update existing products. Be careful with it: a blank column in your file clears the existing value in your store, while a column you leave out entirely keeps it. Do not sort the finished CSV in a spreadsheet, because that can separate variants and images from their products. A product CSV can be at most 15 MB, so a large catalog has to be split into several files.

Checklist before you click Import

  1. Headers copied from the current Shopify template, not typed from memory.
  2. One handle per product, identical on every variant row, never reused.
  3. Prices are plain numbers with a dot, and no price is at or below cost.
  4. SKUs are text and unchanged from the supplier file.
  5. Stock is a whole number if you track inventory (0 means out of stock); if you do not track it, the tracker column stays blank.
  6. File saved as CSV UTF-8 and not re-sorted in a spreadsheet afterwards, with a ten-product test import checked in the admin.

Why this gets repetitive

The first conversion takes an afternoon. The fifth takes an afternoon again, because the supplier sends a new file every week with the same quirks. Stock changes, new items appear and discontinued items vanish silently from the sheet.

Example_Video · Sample_Data
Example video with sample data. Your automation app is built around your own workflow.

The steps above are a fixed procedure: read the file, map columns, group variants, apply the price rule, clean values, write the CSV. A procedure that never changes is exactly what a small local script does in seconds, on your own computer, without uploading your supplier prices to anyone.

Common questions

Can Shopify import a supplier CSV directly?

Only if the columns already match Shopify’s product template. A supplier file almost never does, so it needs mapping first: column names, one row per variant and a stable handle.

What is the Shopify handle and why does it matter?

The handle is the product’s URL name and its identity in an import. Rows with the same handle belong to one product, and a changed handle creates a duplicate instead of updating the existing listing.

Why does my Shopify import show errors?

The usual causes are wrong header spelling, price values with currency symbols or comma decimals, SKUs mangled by Excel, missing titles on first variant rows and image links that are not public.

How often should I update stock from the supplier file?

As often as the supplier changes it. Doing that by hand weekly is slow and error-prone, which is why stock updates are the first thing most sellers automate.