WooCommerce to Shopify CSV Converter
Turn a WooCommerce product export into a Shopify-ready product CSV, variants and images included.
1. WooCommerce export
No file handy? (25 rows, includes variable products).
2. Shopify CSV
Drop a file to see the Shopify version here. Nothing is uploaded.
Runs in your browserNo uploadLast verified Source: Shopify Help Center
How it works
Drop the CSV that WooCommerce creates under Products → Export. Your browser reads it; nothing is uploaded. The tool detects the delimiter (comma, semicolon or tab) and whether the file is UTF-8 or Windows-1252, the encoding Excel uses when it re-saves a CSV on Windows.
Each simple product becomes one Shopify product with a single variant called Default Title. Each variable product becomes one Shopify product with one variant per WooCommerce variation, all sharing the same Handle. Variation attributes become Option1 to Option3. When a variation is set to “Any Size”, the tool creates one variant for every size listed on the parent, because Shopify has no “any” option.
Handles are built from the product name, so “Hoodie with Logo” becomes hoodie-with-logo; repeated names get -2, -3. A running sale becomes Variant Price with the regular price in Variant Compare At Price. A sale that has ended or not yet started is ignored, because a Shopify CSV can’t schedule one. A stock number turns on Shopify inventory tracking, “backorders allowed” becomes continue selling when out of stock, and weight is converted to grams from the unit in the column header. The first category becomes the product’s Collection, which Shopify creates during import if it doesn’t exist, and every category name is added to Tags.
Grouped and external products are skipped, with the reason listed by row number. So are variations whose parent isn’t in the file and products with more than three variation attributes. Anything that needs a second look is listed as a warning: missing images, an empty price (Shopify would import it at 0.00), or WordPress shortcodes in a description. The download uses the same column names as a Shopify export. If it’s over Shopify’s 15 MB import limit, it’s split into several files without breaking any product apart.
Use the mapping table to change where Title, Body, Vendor, Type, Tags, SKU, Barcode, the SEO fields, Cost and Collection come from: for example, read Vendor from a Brands column.
Example
The Hoodie in WooCommerce’s own sample export is a variable product with four variations. The red one is on sale. Here are the parent and the first two variations.
WooCommerce export (3 of 25 rows)
| Row | Type | SKU | Name | Parent | Sale price | Regular price | Attribute 1 | Attribute 2 |
|---|---|---|---|---|---|---|---|---|
| 3 | variable | woo-hoodie | Hoodie | Color: Blue, Green, Red | Logo: Yes, No | |||
| 19 | variation | woo-hoodie-red | Hoodie - Red, No | woo-hoodie | 42 | 45 | Color: Red | Logo: No |
| 20 | variation | woo-hoodie-green | Hoodie - Green, No | woo-hoodie | 45 | Color: Green | Logo: No |
Shopify CSV output (first 2 of 4 variant rows)
| Handle | Title | Option1 Value | Option2 Value | Variant SKU | Variant Price | Variant Compare At Price | Variant Grams |
|---|---|---|---|---|---|---|---|
| hoodie | Hoodie | Red | No | woo-hoodie-red | 42.00 | 45.00 | 680 |
| hoodie | Green | No | woo-hoodie-green | 45.00 | 680 |
Both rows share the handle hoodie, so Shopify imports one product with Color and Logo as its options. Title, description, tags and status appear only on the first row. The 1.5 lb weight from the parent becomes 680 grams on every variant. Across the whole sample file, 25 WooCommerce rows become 16 Shopify products with 27 variants. The grouped “Logo Collection” and the external “WordPress Pennant” are skipped and listed with their reasons.
FAQ
Is my product file uploaded anywhere?
No. The file is read and converted by JavaScript running in your browser tab, and the Shopify CSV is generated on your device. Nothing is sent to our servers or to anyone else, so supplier costs, stock levels and draft products stay private. Closing the tab discards everything.
Which WooCommerce export does this need?
The CSV from the built-in exporter: in WordPress go to Products → Export, leave “all columns” and “all products” selected, and click Generate CSV. Exports from other plugins also work if they use the same English column names; if a column is named differently, pick it in the mapping table.
What happens to my product categories?
The deepest level of each product’s first category goes into the Collection column. During import Shopify adds the product to that collection, creating it if it doesn’t exist yet; Shopify allows one collection per product this way. The same name becomes the product Type, and every category name is added to Tags, so you can build automated collections for the rest.
Are product images moved to Shopify?
The CSV carries image URLs, not the files. During import Shopify downloads each image from its URL, so keep your WooCommerce site online and the images publicly reachable until the import finishes. Variation images are added to the product gallery and linked to their variant through the Variant Image column.
Why were some rows skipped?
Rows are skipped only when Shopify has no way to hold them: grouped and external products, variations whose parent product is missing from the file, disabled variations, and products with more than three variation attributes. Each one is listed with its row number and the reason, so you can fix the source file or recreate it by hand.
Does it move customers, orders or reviews?
No. This tool converts the product catalog only: products, variants, prices, stock, weights, images, tags and SEO fields. Customers, orders, reviews and blog posts use different files and need their own migration. If you want the whole store moved for you, use the quote link that appears next to your converted file.
Will my product URLs and SEO carry over?
Product URLs change: WooCommerce uses /product/name while Shopify uses /products/handle. Add URL redirects in Shopify for your old addresses so search rankings and backlinks carry over. If your export includes Yoast, Rank Math or All in One SEO meta columns, titles and descriptions are mapped automatically; plugin variables such as %%title%% are left out.