Migration from Magento to WooCommerce – products, customers, orders and everything else

Magento serves large catalogs well, but maintaining it is expensive and requires a dedicated team. WooCommerce offers lower operational costs, a richer ecosystem of plugins, and significantly shorter development time for new features. This is exactly why stores with 500-5,000 products are increasingly replacing Magento with WooCommerce – with no data loss and no sales disruption.

What exactly should be migrated

The list is long and skipping one item can break the store after the move.

Products are the basis – simple, variable (configurable in Magento), grouped and bundle. Each product carries attributes (color, size, material), attribute values, attribute sets, alt text images, pricing information, availability, SEO meta data, URL keys and related products (cross-sells, up-sells). Categories in Magento support deep nesting – a tree with 4-5 levels is not uncommon. Tags (Magento 1) or labels should be converted to WooCommerce product tags.

Customer accounts include names, emails, shipping and billing addresses, customer groups (wholesale, retail) and wishlists. Orders convey statuses, line items, tax calculations, payment method and shipping. Promo codes (cart price rules and catalog price rules) have different logic in the two systems and require manual recreation in most cases.

Preparing Magento before export

Cleaning up the old base saves hours of import work.

Magento stores accumulate thousands of abandoned carts, log entries and old sessions. Delete everything unnecessary before exporting – tables log_url, log_url_info, log_visitor, log_visitor_info, report_event can take up gigabytes. Disable products that are no longer sold instead of migrating them. Check that all product images actually exist on the server, because Magento doesn’t physically delete files when you change an image.

Standardize attributes – if you have “Color”, “Color” and “Color” as three separate attributes, merge them before export.

Export products from Magento

Magento stores product data in an EAV (Entity-Attribute-Value) model, which makes direct SQL export complicated.

The cleanest approach is through Magento REST API (v2), but for large catalogs speed is an issue – 5000 products are pulled in 30-40 minutes. The alternative is direct SQL from catalog_product_entity and associated EAV tables (_varchar, _int, _decimal, _text) plus eav_attribute. For configurable products you should join to catalog_product_super_link and catalog_product_super_attribute.

SELECT 
  cpe.entity_id, cpe.sku, cpe.type_id,
  cpev_name.value AS product_name,
  cpet_desc.value AS description,
  cped_price.value AS price,
  cped_special.value AS special_price,
  csi.qty AS stock_qty
FROM catalog_product_entity cpe
LEFT JOIN catalog_product_entity_varchar cpev_name 
  ON cpe.entity_id = cpev_name.entity_id 
  AND cpev_name.attribute_id = (SELECT attribute_id FROM eav_attribute WHERE attribute_code = 'name' AND entity_type_id = 4)
  AND cpev_name.store_id = 0
LEFT JOIN catalog_product_entity_decimal cped_price 
  ON cpe.entity_id = cped_price.entity_id 
  AND cped_price.attribute_id = (SELECT attribute_id FROM eav_attribute WHERE attribute_code = 'price' AND entity_type_id = 4)
LEFT JOIN cataloginventory_stock_item csi ON cpe.entity_id = csi.product_id
WHERE cpe.type_id IN ('simple', 'configurable')

The result is saved to CSV for subsequent transformation.

Categories, tags and attributes in WooCommerce

Magento supports a category tree with unlimited depth, while WooCommerce actually works optimally with 3 levels of navigation and efficient product filtering.

Export the categories from catalog_category_entity and catalog_category_entity_varchar – the fields parent_id, position and path define the hierarchy. When importing, use wp_insert_term() with the parameter parent, starting from the root categories down. If the Magento store has 4-5 tiers, consider making the lower tiers filter attributes – “Women’s > Shoes > Sneakers > Nike > White” can be simplified to a “Women’s Sneakers” category with attributes “Brand: Nike” and “Color: White”.

WooCommerce has no direct equivalent to Magento attribute sets. Attributes for filtering or variations are created as global WooCommerce attributes. Informative attributes (“Country of Origin”, “Warranty”) remain as custom product meta. If migration from OpenCart requires a similar approach, the complexity is higher in Magento because of the EAV model.

Variable products – from configurable to variable

Configurable products in Magento consist of a parent product and related simple products.

The transformation requires identifying parent-child relationships from catalog_product_super_link, retrieving super attributes from catalog_product_super_attribute and creating a WooCommerce variable product with variations for each child.

$parent = new WC_Product_Variable();
$parent->set_name($magento_parent['name']);
$parent->set_sku($magento_parent['sku']);

$attributes = [];
foreach ($magento_super_attributes as $attr) {
    $attribute = new WC_Product_Attribute();
    $attribute->set_name('pa_' . $attr['slug']);
    $attribute->set_options($attr['values']);
    $attribute->set_visible(true);
    $attribute->set_variation(true);
    $attributes[] = $attribute;
}
$parent->set_attributes($attributes);
$parent_id = $parent->save();

foreach ($magento_children as $child) {
    $variation = new WC_Product_Variation();
    $variation->set_parent_id($parent_id);
    $variation->set_sku($child['sku']);
    $variation->set_regular_price($child['price']);
    $variation->set_manage_stock(true);
    $variation->set_stock_quantity($child['qty']);
    $variation->save();
}

Grouped and bundle products require additional processing – WooCommerce supports grouped natively, but bundle functionality comes from a plugin like WooCommerce Product Bundles.

Customers and orders

Passwords cannot be migrated directly – Magento uses a different hashing algorithm (SHA-256 in Magento 2, MD5 in Magento 1).

The practical solution is to create users via wp_insert_user() with a random password and send a “Reset Password” email to everyone. Magento customer groups (wholesale, retail, VIP) are recreated via WordPress roles or via a role-based pricing plugin. Shipping and billing addresses are saved as user meta fields (billing_address_1, billing_city, shipping_address_1 etc).

The orders are exported from sales_order, sales_order_item, sales_order_address and sales_order_payment. Magento “processing” -> WooCommerce “processing”, “complete” -> “completed”. Tax information should be carried over carefully, especially if the store operates with different tax rates. Old orders (over 2 years old) rarely have practical value – consider archiving them to CSV instead of importing them.

Promo codes and product pictures

Magento separates promotions into Cart Price Rules and Catalog Price Rules, while WooCommerce merges the two into Coupons and Sale prices.

Cart Price Rules with terms like “10% on orders over £100” are recreated as a WooCommerce coupon with minimum_amount. Catalog Price Rules have no direct equivalent – set the sale price manually or use a dynamic pricing plugin. For most stores, manually recreating 10-20 coupons takes an hour or two.

The images are located at pub/media/catalog/product/ (Magento 2). Download the entire directory and optimize the images before import – convert to WebP and reduce the resolution to 1200x1200px, which drops the volume by 60-70%.

SEO redirects and 301 redirects

Without proper 301 redirects, Google indexes 404 pages and the store loses organic traffic for months.

Magento uses the URL pattern /product-name.html, and WooCommerce generates /product/product-slug/. Export the URL rewrites from the url_rewrite table. For stores with thousands of products, load the redirects from a database table or CSV file. Proper Cloudflare configuration can take the redirects through Bulk Redirects without overloading the PHP process.

Automated tools and testing

Cart2Cart and LitExtension are SaaS services that transfer products, categories, customers and orders automatically – a migration of 2000 products costs $100-200.

WP All Import + WP All Export is another option to import from CSV/XML with flexible mapping. Neither tool covers 100% of cases – bundle products, custom options and Magento EE features always require manual tweaking. CloudCart migration approach is similar – automation covers 80-90% of the work.

After import, compare the number of products, categories and customers between the two systems. Open 20-30 random products and check name, price, description, photos, attributes, SKU. Make a test order with coupon. Check Core Web Vitals metrics – if LCP is over 2.5 seconds, optimize before going live with store. Set up taxes, shipping, payment gateways, and check if currency settings for BGN/EUR are correct. Store with 3000+ products without object cache (Redis or Memcached) generates TTFB of 2-3 seconds on category pages – install caching plugin and CDN before targeting DNS.

Frequently Asked Questions

  1. How long does it take to migrate from Magento to WooCommerce?

    It depends on the data volume. A store with 1000-2000 products, customers and orders is usually migrated in 1-2 weeks including testing. For over 5000 products with variations and complex attributes – 3-4 weeks.

  2. Will I lose my SEO ranking when I switch from Magento to WooCommerce?

    Not if you set up 301 redirects from all the old Magento URLs to the new WooCommerce URLs. Without redirects, Google indexes 404 errors and traffic drops. There is usually a slight fluctuation for 2-4 weeks.

  3. Can customer passwords be transferred from Magento?

    Not directly. Magento uses a different hashing algorithm (SHA-256 in Magento 2, MD5 in Magento 1). The standard approach is to create the accounts with new passwords and send an email to change the password.

  4. Which tool is best for automatic migration from Magento?

    Cart2Cart and LitExtension are popular SaaS solutions. WP All Import allows import from CSV/XML with flexible mapping. Neither tool covers 100% of cases – bundle products and custom options always require manual work.

  5. Do I need to migrate all old orders from Magento?

    Not necessarily. Orders older than 2 years rarely have practical value and slow down the WooCommerce admin panel. Back them up to CSV and only import the last 12-24 months.

Share: