Shopify Online Store Migration
Shopify is a SaaS platform with managed infrastructure. Migration to Shopify means transferring data and abandoning own hosting. What you get: reliability, built-in CDN, Shopify Payments, App Store. What you lose: full code control, SQL access to data.
What Transfers to Shopify
- Products (name, description, prices, variants, images, metadata)
- Categories → Collections (manual and automatic)
- Customers (email, name, addresses, order history)
- Orders (for reporting, not active processing)
- Content (blog, pages)
- Redirects (301 for SEO)
Migration Tools
Shopify Importer (built-in) — supports CSV product import.
Matrixify (Excelify) — most powerful tool ($20/month). Imports everything: products, collections, customers, orders, metafields, redirects via Excel/CSV.
LitExtension — paid migration with support for 50+ platforms (WooCommerce, Magento, PrestaShop, OpenCart).
CSV Product Import
Shopify accepts CSV in strict format. Required columns:
Handle,Title,Body (HTML),Vendor,Type,Tags,Published,Option1 Name,Option1 Value,Variant SKU,Variant Grams,Variant Inventory Tracker,Variant Inventory Qty,Variant Price,Variant Compare At Price,Image Src,Image Position,Image Alt Text,SEO Title,SEO Description
t-shirt-black,"Black T-Shirt","<p>Description</p>","Brand","Clothing","t-shirt,sale","TRUE","Size","S","SKU-001-S",200,"shopify",50,1500.00,,,https://cdn.example.com/image.jpg,1,"T-Shirt","SEO title","SEO description"
t-shirt-black,"Black T-Shirt","<p>Description</p>","Brand","Clothing","t-shirt,sale","TRUE","Size","M","SKU-001-M",200,"shopify",30,1500.00,,,,2,"",""
For variable products: each variant is separate row with same Handle.
Export Script from WooCommerce to Shopify CSV
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',
})
API Migration (Shopify Admin API)
import shopify
import requests
shopify.ShopifyResource.set_site(f"https://{API_KEY}:{API_SECRET}@{SHOP_NAME}.myshopify.com/admin/api/2024-01")
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()
SEO: Preserving URLs
If old site had URL /catalog/category/product-name, but Shopify will be /products/product-name — setup 301-redirects:
# shopify_redirects.csv (import via Matrixify)
Redirect: Path,Redirect: Target
/catalog/computers/laptop-model-x,/products/laptop-model-x
/catalog/phones/samsung-galaxy-s24,/products/samsung-galaxy-s24
Or via Admin → Online Store → Navigation → URL Redirects.
What is NOT Transferred Automatically
- Custom functionality (specific discount logic, non-standard shipping types) — requires Shopify Apps or Shopify Functions
- Integrations (1C, CRM) — reconnect via Shopify API
- Custom tax calculations — Shopify has own tax system
Timeline
Store migration up to 5000 products with customers and theme setup — 5–10 days. Large store with functionality redesign — 3–6 weeks.







