An old WooCommerce store is slow, customers complain about sluggish pages, and you spend hours updating plugins. Migrating to Shopify means moving to a SaaS platform with managed infrastructure: built-in CDN, automatic scaling, Shopify Payments, and App Store. Over 7 years, we've migrated more than 50 stores—from 200 to 50,000 products. We guarantee preserved search positions and correct data transfer. But simply copying data isn't enough—it requires careful migration with SEO and business logic preservation.
Data Available for Migration
| Data Type | Supported | Tools |
|---|---|---|
| Products | Yes (with variants, images, metafields) | Matrixify, LitExtension, API |
| Collections | Yes (manual and automatic) | Matrixify |
| Customers | Yes (with order history) | LitExtension |
| Orders | Yes (read-only) | LitExtension, API |
| Blog | Yes | Matrixify |
| 301 Redirects | Yes | Matrixify |
Also transferred: SEO fields, metadata, images, and content. Custom functions (discounts, shipping) require rework via Shopify Functions.
Migration Tools
| Tool | Type | Supported Data | Complexity |
|---|---|---|---|
| Shopify Importer | Built-in | Only products (CSV) | Low |
| Matrixify (Excelify) | App | Products, collections, customers, orders, metafields, redirects | Medium |
| LitExtension | Service | 50+ CMS, orders, customers, SEO | Low (support) |
Matrixify is cheaper for large volumes but requires manual setup. LitExtension is more expensive but automates order and password migration. For stores with customizations, we use a combination of Matrixify and REST API.
How We Migrated an Electronics Store: A Case Study
One of our clients, an electronics store, migrated from WooCommerce to Shopify—8,000 products, 15,000 customers, 3 years of order history. We used Matrixify and the Shopify REST API. First, we exported data from WooCommerce via CSV. Here's a script for basic product export:
import csv import json import mysql.connector conn = mysql.connector.connect(host='localhost', user='root', password='pass', database='wordpress') cursor = conn.cursor(dictionary=True) cursor.execute(""" SELECT p.ID, p.post_title, p.post_content, p.post_status, pm_price.meta_value as price, pm_sku.meta_value as sku FROM wp_posts p LEFT JOIN wp_postmeta pm_price ON pm_price.post_id = p.ID AND pm_price.meta_key = '_price' LEFT JOIN wp_postmeta pm_sku ON pm_sku.post_id = p.ID AND pm_sku.meta_key = '_sku' WHERE p.post_type = 'product' AND p.post_status = 'publish' """) products = cursor.fetchall() with open('shopify_import.csv', 'w', newline='', encoding='utf-8') as f: writer = csv.DictWriter(f, fieldnames=[ 'Handle', 'Title', 'Body (HTML)', 'Vendor', 'Published', 'Variant SKU', 'Variant Price', 'Variant Inventory Qty' ]) writer.writeheader() for product in products: handle = product['post_title'].lower().replace(' ', '-') writer.writerow({ 'Handle': handle, 'Title': product['post_title'], 'Body (HTML)': product['post_content'], 'Vendor': 'Default', 'Published': 'TRUE' if product['post_status'] == 'publish' else 'FALSE', 'Variant SKU': product['sku'] or '', 'Variant Price': product['price'] or '0', 'Variant Inventory Qty': '100', }) Then we used Matrixify to import collections and customers. For orders, we used the Shopify API since Matrixify cannot restore orders as completed. After migration, page load speed was 2.5 times faster (from 4 to 1.5 seconds), and traffic was maintained at 98%. According to analysis, 301 redirects pass up to 90% of link equity. The total cost of migration was $1,200, saving the client an estimated $500/month in hosting and plugin fees.
Want a similar result? Contact us for a consultation to assess your store.
API Migration (Shopify Admin API)
For custom data (discounts, tags), we use the REST API:
import shopify import requests shopify.ShopifyResource.set_site(f"https://{API_KEY}:{API_SECRET}@{SHOP_NAME}.myshopify.com/admin/api/latest") for product_data in source_products: product = shopify.Product() product.title = product_data['title'] product.body_html = product_data['description'] product.vendor = product_data['brand'] product.variants = [{ 'sku': product_data['sku'], 'price': str(product_data['price']), 'inventory_quantity': product_data['stock'], 'inventory_management': 'shopify', }] product.save() # Upload image if product_data.get('image_url'): image = shopify.Image({'product_id': product.id}) image.src = product_data['image_url'] image.save() Why 301 Redirects Matter
After migration, the URL structure changes: from /catalog/category/product to /products/product. Without 301 redirects, Google loses traffic. A common mistake is forgetting redirects for category and filter pages. We configure a CSV for import:
Redirect: Path,Redirect: Target /catalog/computers/laptop-model-x,/products/laptop-model-x /catalog/phones/samsung-galaxy-s24,/products/products/samsung-galaxy-s24 Import via Matrixify or manually in Admin → Online Store → Navigation → URL Redirects. We guarantee that after migration, traffic will remain at the previous level.
How to Prepare a CSV for Import: Step-by-Step Guide
- Export data from your old CMS into a CSV file.
- Check field mapping: Handle, Title, Body HTML, Variant SKU, Variant Price, Variant Inventory Qty.
- Remove extra characters and duplicate rows.
- Import via Matrixify or the built-in Shopify importer.
- Check errors in the import log and fix them.
What to Do with Custom Functions?
Custom discount, shipping, and tax logic are not transferred automatically. For these, we use Shopify Functions or configure apps. For example, complex discount rules need to be rewritten in Shopify Flow. Integrations with 1C and CRM are connected via the Shopify API.
What data is not transferred automatically?
According to Shopify's official migration documentation (https://help.shopify.com/en/manual/migrating-to-shopify), all custom functions, integrations, and taxes require separate configuration.How Long Does Migration Take?
| Stage | Duration |
|---|---|
| Analysis and planning | 1–2 days |
| Export and transformation | 1–3 days |
| Import and redirects | 1–2 days |
| Testing and launch | 2–3 days |
For a store with up to 5,000 products including customers and theme setup—5–10 days. Large stores with functionality rework—3 to 6 weeks. The price is calculated individually after an audit, typically starting from $500.
What's Included in Our Work
- Full data extraction from the old CMS
- Cleaning and converting to Shopify format
- Importing products, customers, orders
- Setting up collections and metafields
- Creating 301 redirects according to the URL map
- Testing orders and verifying all scenarios
- Training your team on Shopify
Contact us for a preliminary audit of your store—we'll assess the workload and select the optimal tool. Get a consultation to avoid losing traffic and time.







