WooCommerce to Shopify Migration: What Actually Transfers via CSV (And What Doesn’t)
Published 2026-05-08
WooCommerce and Shopify have different data models. Before you spend hours trying to migrate via CSV, here’s what transfers cleanly, what requires manual work, and what you’ll need to rebuild from scratch.
What transfers via CSV: cleanly
- Products (Title, description, price, SKU, weight, stock quantity) — field-for-field equivalents exist in both platforms
- Product images — URLs transfer; images need to remain hosted at their original URLs or be re-hosted
- Product variants — both platforms support variants, but the CSV structure differs (see below)
- Customer records (email, name, address) — direct equivalents
- Basic order history — order number, status, line items, customer email
What transfers via CSV: with manual mapping
Product variants. WooCommerce uses pa_color, pa_size as attribute keys; Shopify uses Option1 Name, Option1 Value. You need to rename the attribute columns during import.
Product categories vs collections. WooCommerce categories become Shopify collections, but the hierarchy flattens. A product in “Clothing > Men > Shirts” in WooCommerce becomes a product that needs to be added to a flat “Shirts” collection in Shopify. Manual recollection required.
Custom fields / ACF. WooCommerce products often have custom fields (via Advanced Custom Fields). Shopify calls these metafields. The CSV import doesn’t directly support metafield creation — you’ll need the metafield API or a Shopify app.
What doesn’t transfer via CSV at all
- Customer passwords — impossible by design (hashed on WooCommerce’s end)
- Discount codes — Shopify’s discount structure differs from WooCommerce coupons; must be recreated manually
- Product reviews — Shopify’s native product reviews require app support; CSV import of reviews isn’t available in Shopify core
- Subscriptions / memberships — WooCommerce subscriptions data doesn’t map to any Shopify CSV structure; requires a dedicated migration service
The column mismatch problem
WooCommerce’s product export CSV uses different column names from Shopify. These need renaming before Shopify can import them:
| WooCommerce column | Shopify equivalent |
|---|---|
| post_title | Title |
| post_content | Body (HTML) |
| _price | Variant Price |
| _regular_price | Variant Compare At Price |
| _sku | Variant SKU |
A CSV column mapper handles this step — csvtocsv.com/csv-cleanup handles rename, drop, and split for any CSV, and a dedicated WooCommerce→Shopify adapter is planned.
Images: where WooCommerce migrations actually break
Everything else looks fine. Prices, titles, descriptions, variants. Then you check the storefront and every product photo is missing.
The problem is structural. WooCommerce dumps all image URLs into one cell, separated by commas or pipes. Shopify does it differently: each image gets its own row. The first row has your product data and the main photo in the Image Src column. Extra images go on rows below it, with nothing filled in except Handle, Image Src, and Image Position.
A product with 4 photos needs 4 rows in the Shopify CSV. First row: product data plus Image Position 1. Rows 2 through 4: same Handle, one image URL each, Image Position 2, 3, 4. Leave every other column blank on those extra rows.
Shopify downloads images from the URLs during import. If you already took your WooCommerce site offline, those URLs are dead and Shopify skips them without telling you. Save your images somewhere accessible before you shut down the old store.