{"id":8447,"date":"2026-04-05T21:42:21","date_gmt":"2026-04-05T18:42:21","guid":{"rendered":"https:\/\/pixadoro.com\/migration-from-magento-to-woocommerce-products-customers-orders-and-everything-else\/"},"modified":"2026-04-05T21:47:59","modified_gmt":"2026-04-05T18:47:59","slug":"migration-from-magento-to-woocommerce-products-customers-orders-and-everything-else","status":"publish","type":"post","link":"https:\/\/pixadoro.com\/en\/migration-from-magento-to-woocommerce-products-customers-orders-and-everything-else\/","title":{"rendered":"Migration from Magento to WooCommerce &#8211; products, customers, orders and everything else"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">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 &#8211; with no data loss and no sales disruption.  <\/p>\n\n<div class=\"wp-block-rank-math-toc-block\" id=\"rank-math-toc\"><h2>\u0421\u044a\u0434\u044a\u0440\u0436\u0430\u043d\u0438\u0435<\/h2><nav><ol><li><a href=\"#kakvo-tochno-tryabva-da-se-migrira\">What exactly should be migrated<\/a><\/li><li><a href=\"#podgotovka-na-magento-predi-eksporta\">Preparing Magento before export<\/a><\/li><li><a href=\"#eksport-na-produkti-ot-magento\">Export products from Magento<\/a><\/li><li><a href=\"#kategorii-tagove-i-atributi-v-woocommerce\">Categories, tags and attributes in WooCommerce<\/a><\/li><li><a href=\"#variativni-produkti-ot-configurable-kam-variable\">Variable products &#8211; from configurable to variable<\/a><\/li><li><a href=\"#klienti-i-porachki\">Customers and orders<\/a><\/li><li><a href=\"#promo-kodove-i-produktovi-snimki\">Promo codes and product pictures<\/a><\/li><li><a href=\"#seo-prenasochvaniya-i-301-redirects\">SEO redirects and 301 redirects<\/a><\/li><li><a href=\"#avtomatizirani-instrumenti-i-testvane\">Automated tools and testing<\/a><\/li><li><a href=\"#%D1%87%D0%B5%D1%81%D1%82%D0%BE-%D0%B7%D0%B0%D0%B4%D0%B0%D0%B2%D0%B0%D0%BD%D0%B8-%D0%B2%D1%8A%D0%BF%D1%80%D0%BE%D1%81%D0%B8\">Frequently Asked Questions<\/a><ol><li><a href=\"#faq-question-813888ca6f423865\">How long does it take to migrate from Magento to WooCommerce?<\/a><\/li><li><a href=\"#faq-question-af4e9c5e203a7b93\">Will I lose my SEO ranking when I switch from Magento to WooCommerce?<\/a><\/li><li><a href=\"#faq-question-13312f948aaea416\">Can customer passwords be transferred from Magento?<\/a><\/li><li><a href=\"#faq-question-c68669c9e1bf9bb1\">Which tool is best for automatic migration from Magento?<\/a><\/li><li><a href=\"#faq-question-43f19a27db846794\">Do I need to migrate all old orders from Magento?<\/a><\/li><\/ol><\/li><\/ol><\/nav><\/div>\n\n<h2 class=\"wp-block-heading\" id=\"kakvo-tochno-tryabva-da-se-migrira\">What exactly should be migrated<\/h2>\n\n<p class=\"wp-block-paragraph\">The list is long and skipping one item can break the store after the move.<\/p>\n\n<p class=\"wp-block-paragraph\">Products are the basis &#8211; 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 &#8211; a tree with 4-5 levels is not uncommon. Tags (Magento 1) or labels should be converted to WooCommerce product tags.   <\/p>\n\n<p class=\"wp-block-paragraph\">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.  <\/p>\n\n<h2 class=\"wp-block-heading\" id=\"podgotovka-na-magento-predi-eksporta\">Preparing Magento before export<\/h2>\n\n<p class=\"wp-block-paragraph\">Cleaning up the old base saves hours of import work.<\/p>\n\n<p class=\"wp-block-paragraph\">Magento stores accumulate thousands of abandoned carts, log entries and old sessions. Delete everything unnecessary before exporting &#8211; tables <code>log_url<\/code>, <code>log_url_info<\/code>, <code>log_visitor<\/code>, <code>log_visitor_info<\/code>, <code>report_event<\/code> 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&#8217;t physically delete files when you change an image.   <\/p>\n\n<p class=\"wp-block-paragraph\">Standardize attributes &#8211; if you have &#8220;Color&#8221;, &#8220;Color&#8221; and &#8220;Color&#8221; as three separate attributes, merge them before export.<\/p>\n\n<h2 class=\"wp-block-heading\" id=\"eksport-na-produkti-ot-magento\">Export products from Magento<\/h2>\n\n<p class=\"wp-block-paragraph\">Magento stores product data in an EAV (Entity-Attribute-Value) model, which makes direct SQL export complicated.<\/p>\n\n<p class=\"wp-block-paragraph\">The cleanest approach is through Magento REST API (v2), but for large catalogs speed is an issue &#8211; 5000 products are pulled in 30-40 minutes. The alternative is direct SQL from   <code>catalog_product_entity<\/code>  and associated EAV tables (<code>_varchar<\/code>,  <code>_int<\/code>,  <code>_decimal<\/code>,  <code>_text<\/code>) plus  <code>eav_attribute<\/code>. For configurable products you should join to <code>catalog_product_super_link<\/code> and <code>catalog_product_super_attribute<\/code>.<\/p>\n\n<pre class=\"wp-block-code\"><code class=\"\">SELECT \n  cpe.entity_id, cpe.sku, cpe.type_id,\n  cpev_name.value AS product_name,\n  cpet_desc.value AS description,\n  cped_price.value AS price,\n  cped_special.value AS special_price,\n  csi.qty AS stock_qty\nFROM catalog_product_entity cpe\nLEFT JOIN catalog_product_entity_varchar cpev_name \n  ON cpe.entity_id = cpev_name.entity_id \n  AND cpev_name.attribute_id = (SELECT attribute_id FROM eav_attribute WHERE attribute_code = 'name' AND entity_type_id = 4)\n  AND cpev_name.store_id = 0\nLEFT JOIN catalog_product_entity_decimal cped_price \n  ON cpe.entity_id = cped_price.entity_id \n  AND cped_price.attribute_id = (SELECT attribute_id FROM eav_attribute WHERE attribute_code = 'price' AND entity_type_id = 4)\nLEFT JOIN cataloginventory_stock_item csi ON cpe.entity_id = csi.product_id\nWHERE cpe.type_id IN ('simple', 'configurable')<\/code><\/pre>\n\n<p class=\"wp-block-paragraph\">The result is saved to CSV for subsequent transformation.<\/p>\n\n<h2 class=\"wp-block-heading\" id=\"kategorii-tagove-i-atributi-v-woocommerce\">Categories, tags and attributes in WooCommerce<\/h2>\n\n<p class=\"wp-block-paragraph\">Magento supports a category tree with unlimited depth, while WooCommerce actually works optimally with 3 levels of navigation and <a href=\"https:\/\/pixadoro.com\/en\/the-importance-of-product-filters-in-e-commerce\/\">efficient product filtering.<\/a><\/p>\n\n<p class=\"wp-block-paragraph\">Export the categories from <code>catalog_category_entity<\/code> and <code>catalog_category_entity_varchar<\/code> &#8211; the fields <code>parent_id<\/code>, <code>position<\/code> and <code>path<\/code> define the hierarchy. When importing, use <code>wp_insert_term()<\/code> with the parameter <code>parent<\/code>, starting from the root categories down. If the Magento store has 4-5 tiers, consider making the lower tiers filter attributes &#8211; &#8220;Women&#8217;s &gt; Shoes &gt; Sneakers &gt; Nike &gt; White&#8221; can be simplified to a &#8220;Women&#8217;s Sneakers&#8221; category with attributes &#8220;Brand: Nike&#8221; and &#8220;Color: White&#8221;.  <\/p>\n\n<p class=\"wp-block-paragraph\">WooCommerce has no direct equivalent to Magento attribute sets. Attributes for filtering or variations are created as global WooCommerce attributes. Informative attributes (&#8220;Country of Origin&#8221;, &#8220;Warranty&#8221;) remain as custom product meta. If <a href=\"https:\/\/pixadoro.com\/en\/migrating-a-store-from-opencart-to-woocommerce\/\">migration from OpenCart requires<\/a> a similar approach, the complexity is higher in Magento because of the EAV model.   <\/p>\n\n<h2 class=\"wp-block-heading\" id=\"variativni-produkti-ot-configurable-kam-variable\">Variable products &#8211; from configurable to variable<\/h2>\n\n<p class=\"wp-block-paragraph\">Configurable products in Magento consist of a parent product and related simple products.<\/p>\n\n<p class=\"wp-block-paragraph\">The transformation requires identifying parent-child relationships from <code>catalog_product_super_link<\/code>, retrieving super attributes from <code>catalog_product_super_attribute<\/code> and creating a WooCommerce variable product with variations for each child.<\/p>\n\n<pre class=\"wp-block-code\"><code class=\"\">$parent = new WC_Product_Variable();\n$parent-&gt;set_name($magento_parent['name']);\n$parent-&gt;set_sku($magento_parent['sku']);\n\n$attributes = [];\nforeach ($magento_super_attributes as $attr) {\n    $attribute = new WC_Product_Attribute();\n    $attribute-&gt;set_name('pa_' . $attr['slug']);\n    $attribute-&gt;set_options($attr['values']);\n    $attribute-&gt;set_visible(true);\n    $attribute-&gt;set_variation(true);\n    $attributes[] = $attribute;\n}\n$parent-&gt;set_attributes($attributes);\n$parent_id = $parent-&gt;save();\n\nforeach ($magento_children as $child) {\n    $variation = new WC_Product_Variation();\n    $variation-&gt;set_parent_id($parent_id);\n    $variation-&gt;set_sku($child['sku']);\n    $variation-&gt;set_regular_price($child['price']);\n    $variation-&gt;set_manage_stock(true);\n    $variation-&gt;set_stock_quantity($child['qty']);\n    $variation-&gt;save();\n}<\/code><\/pre>\n\n<p class=\"wp-block-paragraph\">Grouped and bundle products require additional processing &#8211; WooCommerce supports grouped natively, but bundle functionality comes from a plugin like WooCommerce Product Bundles.<\/p>\n\n<h2 class=\"wp-block-heading\" id=\"klienti-i-porachki\">Customers and orders<\/h2>\n\n<p class=\"wp-block-paragraph\">Passwords cannot be migrated directly &#8211; Magento uses a different hashing algorithm (SHA-256 in Magento 2, MD5 in Magento 1).<\/p>\n\n<p class=\"wp-block-paragraph\">The practical solution is to create users via <code>wp_insert_user()<\/code> with a random password and send a &#8220;Reset Password&#8221; 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 (<code>billing_address_1<\/code>, <code>billing_city<\/code>, <code>shipping_address_1<\/code> etc).  <\/p>\n\n<p class=\"wp-block-paragraph\">The orders are exported from <code>sales_order<\/code>, <code>sales_order_item<\/code>, <code>sales_order_address<\/code> and <code>sales_order_payment<\/code>. Magento &#8220;processing&#8221; -&gt; WooCommerce &#8220;processing&#8221;, &#8220;complete&#8221; -&gt; &#8220;completed&#8221;. Tax information should be carried over carefully, especially if the store operates with <a href=\"https:\/\/pixadoro.com\/en\/taxes-when-running-an-online-store-as-a-freelancer-or-company\/\">different tax rates.<\/a> Old orders (over 2 years old) rarely have practical value &#8211; consider archiving them to CSV instead of importing them.   <\/p>\n\n<h2 class=\"wp-block-heading\" id=\"promo-kodove-i-produktovi-snimki\">Promo codes and product pictures<\/h2>\n\n<p class=\"wp-block-paragraph\">Magento separates promotions into Cart Price Rules and Catalog Price Rules, while WooCommerce merges the two into Coupons and Sale prices.<\/p>\n\n<p class=\"wp-block-paragraph\">Cart Price Rules with terms like &#8220;10% on orders over \u00a3100&#8221; are recreated as a WooCommerce coupon with minimum_amount. Catalog Price Rules have no direct equivalent &#8211; set the sale price manually or use a dynamic pricing plugin. For most stores, manually recreating 10-20 coupons takes an hour or two.  <\/p>\n\n<p class=\"wp-block-paragraph\">The images are located at <code>pub\/media\/catalog\/product\/<\/code> (Magento 2). Download the entire directory and <a href=\"https:\/\/pixadoro.com\/en\/image-optimization-fast-loading-wordpress\/\">optimize the images before import &#8211;<\/a> convert to WebP and reduce the resolution to 1200x1200px, which drops the volume by 60-70%. <\/p>\n\n<h2 class=\"wp-block-heading\" id=\"seo-prenasochvaniya-i-301-redirects\">SEO redirects and 301 redirects<\/h2>\n\n<p class=\"wp-block-paragraph\">Without proper 301 redirects, Google indexes 404 pages and the store loses organic traffic for months.<\/p>\n\n<p class=\"wp-block-paragraph\">Magento uses the URL pattern <code>\/product-name.html<\/code>, and WooCommerce generates <code>\/product\/product-slug\/<\/code>. Export the URL rewrites from the <code>url_rewrite<\/code> table. For stores with thousands of products, load the redirects from a database table or CSV file. Proper <a href=\"https:\/\/pixadoro.com\/en\/cloudflare-a-beginners-guide\/\">Cloudflare configuration can<\/a> take the redirects through Bulk Redirects without overloading the PHP process.   <\/p>\n\n<h2 class=\"wp-block-heading\" id=\"avtomatizirani-instrumenti-i-testvane\">Automated tools and testing<\/h2>\n\n<p class=\"wp-block-paragraph\">Cart2Cart and LitExtension are SaaS services that transfer products, categories, customers and orders automatically &#8211; a migration of 2000 products costs $100-200.<\/p>\n\n<p class=\"wp-block-paragraph\">WP All Import + WP All Export is another option to import from CSV\/XML with flexible mapping. Neither tool covers 100% of cases &#8211; bundle products, custom options and Magento EE features always require manual tweaking. <a href=\"https:\/\/pixadoro.com\/en\/store-migration-from-cloudcart-to-woocommerce\/\">CloudCart migration approach is<\/a> similar &#8211; automation covers 80-90% of the work.  <\/p>\n\n<p class=\"wp-block-paragraph\">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 <a href=\"https:\/\/pixadoro.com\/en\/core-web-vitals-important-metrics-for-every-website\/\">Core Web Vitals metrics &#8211;<\/a> if LCP is over 2.5 seconds, optimize before going live with store. Set up taxes, shipping, payment gateways, and check if <a href=\"https:\/\/pixadoro.com\/en\/woocommerce-currency-switching-checklist-and-switching-stores-to-euro\/\">currency settings for BGN\/EUR are correct<\/a>. Store with 3000+ products without object cache (Redis or Memcached) generates TTFB of 2-3 seconds on category pages &#8211; install caching plugin and CDN before targeting DNS.     <\/p>\n\n<h2 class=\"wp-block-heading\" id=\"&#x447;&#x435;&#x441;&#x442;&#x43E;-&#x437;&#x430;&#x434;&#x430;&#x432;&#x430;&#x43D;&#x438;-&#x432;&#x44A;&#x43F;&#x440;&#x43E;&#x441;&#x438;\">Frequently Asked Questions<\/h2>\n<div id=\"rank-math-faq\" class=\"rank-math-block\">\n<ol class=\"rank-math-list \">\n<li id=\"faq-question-813888ca6f423865\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">How long does it take to migrate from Magento to WooCommerce?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>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 &#8211; 3-4 weeks.  <\/p>\n\n<\/div>\n<\/li>\n<li id=\"faq-question-af4e9c5e203a7b93\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Will I lose my SEO ranking when I switch from Magento to WooCommerce?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>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.  <\/p>\n\n<\/div>\n<\/li>\n<li id=\"faq-question-13312f948aaea416\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Can customer passwords be transferred from Magento?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>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.  <\/p>\n\n<\/div>\n<\/li>\n<li id=\"faq-question-c68669c9e1bf9bb1\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Which tool is best for automatic migration from Magento?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>Cart2Cart and LitExtension are popular SaaS solutions. WP All Import allows import from CSV\/XML with flexible mapping. Neither tool covers 100% of cases &#8211; bundle products and custom options always require manual work.  <\/p>\n\n<\/div>\n<\/li>\n<li id=\"faq-question-43f19a27db846794\" class=\"rank-math-list-item\">\n<h3 class=\"rank-math-question \">Do I need to migrate all old orders from Magento?<\/h3>\n<div class=\"rank-math-answer \">\n\n<p>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.  <\/p>\n\n<\/div>\n<\/li>\n<\/ol>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>Complete online store migration process from Magento to WooCommerce &#8211; from SQL export of products and EAV attributes, to customers and orders, to 301 redirects and SEO checks. With specific code examples for PHP import of variational products and attributes. <\/p>\n","protected":false},"author":1,"featured_media":8450,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[41],"tags":[],"class_list":["post-8447","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-woocommerce-en"],"_links":{"self":[{"href":"https:\/\/pixadoro.com\/en\/wp-json\/wp\/v2\/posts\/8447","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pixadoro.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/pixadoro.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/pixadoro.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/pixadoro.com\/en\/wp-json\/wp\/v2\/comments?post=8447"}],"version-history":[{"count":1,"href":"https:\/\/pixadoro.com\/en\/wp-json\/wp\/v2\/posts\/8447\/revisions"}],"predecessor-version":[{"id":8448,"href":"https:\/\/pixadoro.com\/en\/wp-json\/wp\/v2\/posts\/8447\/revisions\/8448"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/pixadoro.com\/en\/wp-json\/wp\/v2\/media\/8450"}],"wp:attachment":[{"href":"https:\/\/pixadoro.com\/en\/wp-json\/wp\/v2\/media?parent=8447"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/pixadoro.com\/en\/wp-json\/wp\/v2\/categories?post=8447"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/pixadoro.com\/en\/wp-json\/wp\/v2\/tags?post=8447"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}