BigCommerce to Shopify: converting a product CSV export

BigCommerce describes a variant with a row type and an encoded string inside the product name. Shopify describes it with repeated handles and option columns. Nothing maps one-to-one.

Open the converter with this presetField names verified against a published export spec.

Where the file comes from

In the BigCommerce control panel go to Products → Export and choose the Bulk Edit template — BigCommerce’s own documentation recommends it because it “includes the majority of exportable fields” with the column names the importer recognises. Pick CSV; BigCommerce notes that an XML export “cannot be imported back into your store”.

The headers are title case with spaces and punctuation: Item Type, Product Name, Product Code/SKU, Brand Name, Product Description, Price, Cost Price, Current Stock Level, Product Weight, Product UPC/EAN, Product Visible?, Product Image Path - 1. All of them are listed in BigCommerce’s supported product fields reference. Shopify publishes no migrating-from-BigCommerce field table, so the names here come from BigCommerce’s documentation directly.

Pitfall 1: Item Type decides what a row means

BigCommerce writes Item Type: Product for a base product and Item Type: SKU for each variant, with Rule rows for pricing rules on top. Its documentation is explicit about the layout: “Product variant rows must be created directly under the corresponding base product row”. The relationship is positional — there is no parent-id column tying a SKU row to its product.

That matters for grouping. There is no single column whose value repeats across a product and its variants, so auto-detect has nothing to find and lands on the always-blank Product ID. The fix is to group on a column that is filled on the base row and empty on its SKU rows — Product Description works, and that is what the bundled sample uses — which lets the converter’s “this row continues the previous product” rule reproduce BigCommerce’s positional model. Check the grouping selector in step 2 against your own file.

Pitfall 2: the option lives inside Product Name, encoded

On a SKU row, Product Name does not hold a name. It holds the option assignment in BigCommerce’s own syntax, which its docs give as [RB]Size=Small , [CS]Color=Blue:#0000FF — a type prefix per option, a comma between options, and a hex colour appended for swatches.

Shopify needs Small in Option1 value and Blue in Option2 value, with the option names on the product’s first row. Nothing in a column mapping can parse that string, so this is manual work: split those cells into real option columns in the sheet first. Map the encoded string straight to Option1 value and you get variants literally called “[RB]Size=Small”, or — when two products share one encoding — the options are not unique rejection.

Pitfall 3: image paths may be file names, not URLs

BigCommerce describes Product Image Path - 1 as the “Image file name (if stored in WebDAV) or full URL”. Both forms appear in real exports, often in the same file, because images uploaded through the admin live in WebDAV and are referenced by name.

Shopify downloads images over HTTP at import time, so a bare knife-20cm.jpg cannot be fetched and the import fails that row with an image error. The validator catches it first: “knife-20cm.jpg” is not an http(s) URL. Either publish those files somewhere public and rewrite the column, or clear it and add images in Shopify afterwards. Note also that Product Image URL - 1 is read-only in BigCommerce’s schema — it may be present and absent of anything useful.

Pitfall 4: Product Name must be unique, and your SKUs may not be

BigCommerce requires unique product names and unique SKUs — “Each SKU must be unique”, and they are case-insensitive. Shopify requires neither, which sounds like good news and is not: a SKU that identifies two variants breaks inventory the first time you connect a stock system, and Shopify will accept it without comment.

Exports from a store that has been reorganised often do contain repeats — a product and its gift-boxed twin, for instance. The validator reports SKU “KNIFE-CH-20” is used on 2 rows with the row numbers, so you can decide which one keeps the code.

Pitfall 5: booleans are Y/N, and weights carry no unit

Product Visible? and Allow Purchases? take “Y” or “N”. Shopify’s Published on online store takes TRUE or FALSE and rejects anything else. The converter normalises Y/N, yes/no and 1/0 to TRUE/FALSE; the validator reports Published value “Y” is not TRUE or FALSE if an unmapped variant of it slips through.

Product Weight is documented as “numbers only; no units” — the unit is a store setting, not part of the file. So the file cannot tell you whether 2.9 means kilograms or pounds. Check Settings → Measurement in BigCommerce and set the source weight unit in step 2 to match, because a store configured in pounds will otherwise import a 2.9 lb skillet as 2.9 kg.

What the preset maps

Product Name → Title, Product Description → Description, Brand Name → Vendor, Product Code/SKU → SKU, Product UPC/EAN → Variant Barcodes, Price → Price, Cost Price → Cost per item, Current Stock Level → Inventory quantity, Product Weight → Weight value (grams), Product Image Path - 1 → Product image URL, Product Image Description - 1 → Image alt text, and Product Visible? → Published on online store. Status is draft.

Item Type itself is not mapped — it is structural, and the grouping selector does its job. Option Set and Option Set Align are dropped deliberately: BigCommerce’s own docs say to delete them before re-importing, and they describe an option model Shopify does not have. Bin Picking Number, Low Stock Level and the digital-product download fields have no product-CSV equivalent either.

Before you upload to Shopify

  • Import into a development store or a draft-status batch first. Set the default status to draft in the tool and nothing goes live by accident.
  • Shopify caps a product CSV at 15 MB. Bigger catalogues are split into numbered parts, and a product is never split across two files.
  • Overwriting existing products by handle is destructive: a blank cell can erase data that is currently there. Export your live products first if you are updating rather than creating.

Full column contract: the Shopify product CSV format, column by column. Nexum Gate is not affiliated with Shopify Inc.