Magento to WooCommerce product CSV converter

In short: Magento 2 (Adobe Commerce) exports products as a CSV with one row per product: sku, product_type, name, price, categories, images and stock, with configurable products listing their child products in configurable_variations. WooCommerce's built-in product importer reads its own column labels, one row per product and one per variation, with every variation pointing at its parent. Drop the Magento file below to get one from the other. It is converted on your device and never uploaded.

Convert Magento to WooCommerce

Magento to WooCommerce

Your Magento 2 product export CSV.

Your file stays on this device

It is read and converted by this page, inside your browser. Nothing from the file is uploaded, and the tool keeps working offline once the page has loaded.

Loading the converter...

What moves: products, variants, prices, stock, SKUs, descriptions and SEO fields where both platforms have them. What does not: customers, orders, reviews, gift card balances, blog posts, pages and URL redirects are not in a product export, so CatalogHop does not convert them.

1. Export your products from Magento

  1. In the Magento Admin, go to System, then Data Transfer, then Export.
  2. Set Entity Type to Products and Export File Format to CSV, then click Continue at the bottom of the page.
  3. Magento builds the file in the background through its message queue (cron must be running) and shows a message when it is done. The file is saved in the var/export folder of your Magento install.
  4. Only Magento 2 exports are read. A Magento 1 export (columns such as _store and _type) is refused with a message.
  5. Note your store's weight unit (Stores, Configuration, General, Locale Options). The file does not include it, so this page asks you before you download.

What to know about the Magento file

  • Simple, virtual and configurable products are converted. Virtual products become products without shipping. Bundle, grouped, downloadable and gift card products are not converted; they are named and counted.
  • A configurable product becomes one product with its child products as variants, linked by sku through configurable_variations, wherever the child rows sit in the file. Option names come from configurable_variation_labels, or from the attribute code (color becomes Color) when there is no label.
  • Rows with a store_view_code repeat a product for one store view (translations, store prices). They never become extra products: each product is converted once from its default row, and the skipped rows are counted.
  • A special price lower than the price becomes the sale price, with the price as the compare-at price. If special_price_from_date or special_price_to_date put today outside the sale window, the regular price is used and you are told. The import file has no end date, so a running sale with an end date is listed so you can end it. Magento writes dates in the admin's language, so the day and month order is decided once for the whole file from dates that can only be read one way (such as 23/06/26 or 6/23/26). If the file has no such date, or has both kinds, a sale whose dates depend on the order is left out, the regular price is used, and a warning names those products so you can set the sale in the new store.
  • Magento exports image paths relative to its media folder (such as /m/b/photo.jpg), not web links. The new store cannot download them, so images are left out and the products are listed. Full web links in the file are kept.
  • Stock: qty becomes the stock count when stock is managed. A product marked out of stock (is_in_stock 0) is written as tracked with stock 0, even when qty is blank, so it cannot be bought; a fraction is rounded toward zero. Both are listed.
  • Disabled products (product_online 2) and products that are Not Visible Individually and not part of a configurable product become drafts. A disabled child of a configurable product is left out of it and named; if every child is disabled, the product is kept as a draft. A child that is also sold on its own moves only as a variant; its own page and URL do not move.
  • Categories: the first level of each path is the root category (such as Default Category) and is dropped, so Default Category/Gear/Bags becomes Gear > Bags.
  • Not carried over, and listed when present: custom options, related, up-sell and cross-sell links, extra attributes in additional_attributes, short descriptions and meta keywords. Tier prices are in a separate Magento export, not in the Products export, and stock per source (multi-source inventory) is not in this file, so they do not move.
  • Weights have no unit in the file, so the page asks for your Magento weight unit and does not offer the download until you choose one. Until then, weights are read as pounds, which is what Magento uses by default.
  • Built from Magento's export and import source code, its sample file and real exports published on GitHub. It was not tested by importing into a live store.

What the WooCommerce file gets

  • The column labels of WooCommerce's built-in importer (checked against WooCommerce 11.2.2), so columns map automatically.
  • Variable products with their variations, each variation linked to the parent by SKU. A parent SKU is made from the URL handle when the source has none.
  • Weights converted to your WooCommerce weight unit, with the matching column label such as Weight (kg).
  • Repeated SKUs left blank on the later rows, because WooCommerce rejects duplicate SKUs.
  • Products hidden from the online store written with catalog visibility hidden, and products that need no shipping written as virtual.
  • Attributes as product-level (not global) attributes.

2. Before and after

Before: the Magento 2 product export CSV

sku,store_view_code,attribute_set_code,product_type,categories,product_websites,name,description,short_description,weight,product_online,...
TEE-BLU-S,,Default,simple,,base,Trail Tee-Blue-S,,,0.4,1,Taxable Goods,Not Visible Individually,25,,,,trail-tee-blue-s,,,,,,,,,,,,"11/2/2...
TEE-BLU-M,,Default,simple,,base,Trail Tee-Blue-M,,,0.4,1,Taxable Goods,Not Visible Individually,25,,,,trail-tee-blue-m,,,,,,,,,,,,"11/2/2...
TEE-RED-S,,Default,simple,,base,Trail Tee-Red-S,,,0.4,1,Taxable Goods,Not Visible Individually,27,,,,trail-tee-red-s,,,,/t/e/tee-red.jpg,...
TEE,,Default,configurable,"Default Category/Apparel/Tees,Default Category/Sale",base,Trail Tee,<p>Soft <strong>organic</strong> cotton te...
BOTTLE,,Default,simple,Default Category/Gear/Bottles,base,Steel Bottle,Keeps drinks cold.,,1.1,1,Taxable Goods,"Catalog, Search",30,24,1/...

After: woocommerce-products.csv

After: first rows of woocommerce-products.csv
TypeSKUNamePublishedIs featured?Visibility in catalogDescriptionTax statusIn stock?StockBackorders allowed?Weight (kg)
variableTEETrail Tee10visible<p>Soft <strong>organic</strong> cotton tee.</p>taxable
variationTEE-BLU-STrail Tee - Blue, S1taxable1800.1814
variationTEE-BLU-MTrail Tee - Blue, M1taxable0000.1814
variationTEE-RED-STrail Tee - Red, S1taxable1400.1814
simpleBOTTLESteel Bottle10visibleKeeps drinks cold.taxable11500.499
simpleMAPTrail Map10visibletaxable14000.0907

12 of 29 columns shown (empty columns hidden, 13 more with data).

What the converter reported for this sample

5 products read, 5 written.

  • Not carried over: 1 store-view row was skipped (rows with a store_view_code, which repeat a product's sku with the names, prices or other values used in one store view). Each product was converted once, from its default row. Translations and store-view prices did not move.
  • Check this: 1 bundle product was not converted: "Hiking Kit". CatalogHop converts simple, virtual and configurable products only.
  • Check this: Magento exports image paths relative to the store's media folder (for example /m/b/mb01-blue-0.jpg), not web links, so the new store cannot download them. Images were left out for 3 products: "Trail Tee", "Trail Tee (TEE-RED-S)", "Steel Bottle". Add the images after import, or put full links (your store's product media address plus the path) in the file before converting.
  • Check this: 1 special price is outside its date window today, so the regular price was carried with no sale: "Trail Map (1/1/20 to 1/31/20)". Set up the sale in the new store if it should run.
  • Check this: Special price dates were read as month/day/year for the whole file, because the file has dates that can only be read that way (Magento writes dates in the admin's language). Check the sale prices if that is wrong.
  • Not carried over: 1 product has related, up-sell or cross-sell links, which were not carried over.
  • Not carried over: Extra attributes in additional_attributes were not carried over: material, capacity.
  • Not carried over: These Magento fields have no equivalent in the destination file and were not carried over: short descriptions (1).
  • And 1 more.

Sample products made up for this page, laid out exactly like a real Magento export. The "after" file and the notes were produced from it by the same converter this page runs.

3. Import into WooCommerce

  1. In WordPress, go to Products, then All Products, and click Import.
  2. Choose woocommerce-products.csv and click Continue.
  3. On the column mapping screen, check that each column is matched. If the weight column is not matched, pick Weight for it.
  4. Click Run the importer. WooCommerce shows a count of imported, skipped and failed products at the end.

Before you import everything

  • Vendor and barcodes are not written: core WooCommerce has no vendor column, and the barcode (GTIN) column does not map automatically in 11.2.
  • Weight column labels other than Weight (lbs) are taken from WooCommerce's source code rather than a sample file. If yours is not matched on the mapping screen, match it by hand.
  • Images are imported by WooCommerce downloading each link, so the links must be public.
  • Import a handful of products first, open them in your store and check variants, prices, stock and images. Then import the rest.

Already have a WooCommerce CSV that fails? Use the WooCommerce CSV checker.

Questions

Why are my Magento product images missing?
Magento exports image paths relative to its media folder, not web links, so WooCommerce cannot download them. The converter leaves them out and lists the products. Add the images in WooCommerce after import.
Do bundle and grouped products move?
No. Bundle, grouped, downloadable and gift card products are not converted; the converter names and counts them so you can recreate them in WooCommerce.
Was this tested by importing into a live WooCommerce store?
No. It follows Magento's own export code and real exports, and WooCommerce's import code. Check the file with the WooCommerce CSV checker, then import a few products first.
Is my file uploaded anywhere?
No. The page reads the file with your browser and converts it there. The only thing the site records is an anonymous count: which converter was used, a rough row count, and whether it worked. The privacy page lists every field.
Will the import definitely work?
Nobody can promise that from a file alone. The converter follows each importer's documented rules, leaves out products that would be rejected and tells you about them, and does not check the WooCommerce file before download, so run it through the WooCommerce CSV checker on this site. Import a few products first, look at them in your store, then import the rest.

Related converters