Moving an established e-commerce catalogue to Shopify is one of the most consequential operational transitions an online merchant can make. Whether you are re-platforming from WooCommerce to reduce server maintenance, expanding a multi-channel retail brand out of Salesforce Commerce Cloud, or rebuilding a boutique store, the central challenge remains consistent: transferring hundreds or thousands of product records accurately without manually retyping every title, SKU, variant, price, and image.
However, the correct product migration method depends strictly on your source platform architecture, your administrative access permissions, and the complexity of your product catalogue. Treating every migration as an identical export-import task leads to fragmented variants, dropped images, broken pricing rules, and disrupted search rankings.
This guide serves as our architectural decision hub for exporting product catalogues to Shopify from WordPress, WooCommerce, Salesforce Commerce Cloud, and custom modern storefronts. It explains how each architecture handles product data, compares native exports against storefront extraction, details the anatomy of Shopify’s native CSV format, and provides a step-by-step validation protocol to guarantee clean imports.
Looking for a specific migration guide?
- If you want a hands-on, procedural tutorial focused specifically on moving a WooCommerce catalogue without errors, consult our Step-by-Step WordPress to Shopify Guide.
- If you are comparing migration costs and want to understand what can be moved for free versus what requires paid apps or developer time, see our Free WooCommerce to Shopify Migration Guide.
1. Understand the Different Migration Methods
Before exporting a single product, you must determine which migration mechanism aligns with your technical access and catalogue scale. There are four distinct pathways for transferring product information to Shopify:
[Source E-Commerce Platform]
│
├── 1. Native Database Export (Admin CSV / XML) ──► Requires Manual Header Mapping
│
├── 2. Storefront Extraction (Store API / HTML) ──► Direct 96-Column Shopify CSV
│
├── 3. Migration Plugins & SaaS Apps ───────────► Direct API Sync (Paid / Complex)
│
└── 4. Custom API Integration (REST / GraphQL) ──► Enterprise Automated Pipelines
Method A: Native Platform Exports
Most e-commerce systems include a built-in export utility (such as WooCommerce's native Product CSV exporter or Magento's Data Transfer tool). These tools extract raw database records into a CSV or XML file.
- Advantage: Captures internal database fields, including private inventory counts, historical metadata, and internal vendor notes.
- Limitation: Native exports use platform-specific column schemas that do not match Shopify. Importing a raw WooCommerce export directly into Shopify will fail or mangle variant relationships. You must manually remap dozens of columns in a spreadsheet program before importing.
Method B: Storefront Product Extraction
Storefront extraction tools—such as the Shopify Product Extractor—read product data directly from the public web storefront. They query public e-commerce endpoints (like WooCommerce's Store API or Shopify's /products.json) or parse structured Schema.org JSON-LD and HTML tag models.
- Advantage: Produces a pre-formatted, 96-column Shopify-native CSV that requires zero column mapping. It extracts clean, customer-facing titles, formatted HTML descriptions, variant combinations, and hosted image URLs in a single automated step.
- Limitation: Operates strictly on publicly accessible data. It cannot extract customer records, private sales histories, hidden cost prices, or backend inventory logs.
Method C: Automated Migration Apps & Plugins
Third-party SaaS migration tools (such as Matrixify, Cart2Cart, or LitExtension) install API connectors on both the source and target platforms to transfer data over authenticated REST endpoints.
- Advantage: Can transfer full database entities, including historical orders and customer accounts.
- Limitation: Requires full administrative access and API credentials on both stores, carries recurring subscription costs, and often requires extensive data sanitization post-transfer.
Method D: Custom API Scripts
Enterprise teams often write custom Python or Node.js scripts using the Shopify Admin GraphQL API to ingest data from custom database dumps.
- Advantage: Total control over metafield mapping and edge-case logic.
- Limitation: Requires significant software engineering overhead and thorough rate-limit handling.
2. WordPress to Shopify: Standard Content vs. E-Commerce
A frequent source of confusion among merchants is the distinction between standard WordPress and WooCommerce.
WordPress itself is a general-purpose Content Management System (CMS). In a default WordPress installation, content is stored as posts and pages in the wp_posts table. There are no built-in database fields for SKUs, variant attributes (size, color, material), stock tracking, barcode identifiers, or pricing matrices.
┌──────────────────────────────────────────────┐
│ WordPress Core Platform │
└──────────────────────┬───────────────────────┘
│
┌───────────────────────┴───────────────────────┐
▼ ▼
[Standard WordPress Site] [WooCommerce Enabled]
• Blog posts & pages only • Real e-commerce structure
• No SKUs, variants, or prices • SKUs, prices, stock, variants
• Cannot export as product CSV • Exportable via Store API or CSV
Determining Your WordPress Architecture
To determine whether your WordPress site can be exported as a product catalogue:
- Check the Admin Sidebar: Look for the dedicated WooCommerce and Products menus in
wp-admin. If they exist, your site is running WooCommerce. - Inspect the REST API: Navigate to
https://your-domain.com/wp-json/wc/store/v1/productsin your browser. If this endpoint returns a JSON array of products, your site has public WooCommerce API support enabled. - Inspect the Frontend Markup: Open any product page and view the page source. Check for
<body class="... woocommerce ...">or standard product schema markup ("@type": "Product").
If a WordPress site does not have WooCommerce or an e-commerce plugin installed, its content cannot be exported as a functional product CSV. Attempting to convert standard blog posts into Shopify products produces incomplete listings devoid of prices, variants, and inventory tracking.
3. WooCommerce to Shopify: Comprehensive Catalogue Migration
WooCommerce powers millions of online shops. Migrating a WooCommerce catalogue into Shopify requires understanding how WooCommerce entities map into Shopify's data model.
Key Data Entity Mapping
| Data Field | WooCommerce Implementation | Shopify CSV Representation | Mapping Rule & Notes |
|---|---|---|---|
| Product Handle | Post Slug (post_name) | Handle | Unique URL identifier; groups multi-row variants. |
| Title | Post Title (post_title) | Title | Must appear on Row 1 of the product; blank on subsequent variant rows. |
| Description | Post Content (post_content) | Body (HTML) | Clean HTML formatting; embedded shortcodes must be stripped. |
| Vendor | Custom taxonomy or Store Name | Vendor | Defaults to brand or store name; can be overridden in bulk. |
| Categories | Hierarchical Product Categories | Product Category / Tags | Shopify uses standardized categories; Woo categories map best to collections or tags. |
| Variants | Variable Products / Attributes | Option1 Name, Option1 Value | Up to 3 option axes (e.g. Size, Color, Material). |
| SKU | Product / Variation SKU (_sku) | Variant SKU | Transferred per variant row for precision inventory tracking. |
| Regular Price | _regular_price | Variant Price | Current selling price; plain decimal number without currency symbols. |
| Sale Price | _sale_price | Variant Compare At Price | Original strikethrough price; must be higher than Variant Price. |
| Images | Featured image + Gallery | Image Src / Image Position | Publicly hosted image URLs; secondary images require additional rows. |
Handling Complex Variable Products
The biggest pitfall when migrating from WooCommerce is the breakdown of variable products. In WooCommerce, attributes (e.g., Size: S, M, L) and variations are stored as separate child posts in the database.
In Shopify, a variable product is represented across multiple sequential rows in a single CSV file, tied together by a shared Handle:
Handle,Title,Option1 Name,Option1 Value,Variant SKU,Variant Price,Image Src classic-linen-shirt,Classic Linen Shirt,Size,Small,CLS-S,45.00,https://example.com/shirt-front.jpg classic-linen-shirt,,Size,Medium,CLS-M,45.00,https://example.com/shirt-front.jpg classic-linen-shirt,,Size,Large,CLS-L,45.00,https://example.com/shirt-front.jpg classic-linen-shirt,,,,,,https://example.com/shirt-back.jpg
- Row 1: Declares the product
Title, the primary description, the first variant (Small), its specificVariant SKU, itsVariant Price, and the primaryImage Src. - Rows 2 & 3: Leave
TitleandBody (HTML)blank, maintaining the exact sameHandle, while specifyingMediumandLargealong with their respective SKUs. - Row 4: Declares an additional product photo (
shirt-back.jpg) under the same handle, leaving all variant and title columns empty.
Using an automated tool like the Shopify Product Extractor automatically builds this exact multi-row structure from the WooCommerce Store API, preventing the common disaster where 1 product with 6 variations imports into Shopify as 6 separate, disconnected listings.
4. Salesforce Commerce Cloud (SFCC) to Shopify
Migrating from Salesforce Commerce Cloud (SFCC)—formerly known as Demandware—represents an enterprise-grade migration. SFCC is used by global retail brands (such as Khaadi, Sapphire, Under Armour, and Columbia) and utilizes a vastly different architectural model than Shopify.
┌────────────────────────────────────────────────────────────────────────┐
│ Salesforce Commerce Cloud (SFCC / Demandware) │
└───────────────────────────────────┬────────────────────────────────────┘
│
┌──────────────────────────┴──────────────────────────┐
▼ ▼
[Enterprise Backend XML Export] [Storefront Web Extraction]
• Business Manager catalog.xml • SFCC Storefront Parser
• Master catalog + variation groups • Reads dwvar_ variation URLs
• Requires custom XML-to-CSV parser • Direct 96-column Shopify CSV
• Internal API / credentials needed • No administrative keys needed
Clarifying SFCC Architectural Models
When exporting product data from Salesforce Commerce Cloud, it is critical to distinguish between backend administrative exports and public storefront extraction:
1. Backend Business Manager XML Export
In SFCC Business Manager, product catalogues are stored as complex, hierarchically linked XML files (catalog.xml).
- Products are categorized into Master Products, Variation Groups, and Variation Products.
- Pricing is separated from the catalogue XML and stored in independent Price Book XML feeds (
pricebook.xml). - Standard exports require extracting these XML files via WebDAV or SFTP and running custom ETL (Extract, Transform, Load) pipelines to merge prices and variation matrices into a Shopify CSV.
2. Public Storefront Extraction
For merchants or merchandising teams who do not have access to backend Business Manager credentials or enterprise XML export pipelines, storefront extraction provides an immediate alternative.
Modern SFCC storefronts (built on SiteGenesis or SFRA — Storefront Reference Architecture) expose structured product data on their frontend:
- Demandware Parameters: Variation selections are passed via structured query parameters (e.g.
?dwvar_productID_color=...&dwvar_productID_size=...). - Client-Side Data Layers: Storefronts embed CQuotient analytics, OpenGraph tags, and Product JSON-LD within product detail pages (PDPs).
- Category Tiles: Product listing pages (PLPs) render paginated product grids with consistent query structures (
start=0&sz=36).
The Shopify Product Extractor features a dedicated SFCC extraction engine that scans public SFCC storefronts, reads product tiles, traverses collection pagination, extracts variation matrices, resolves high-resolution imagery, and exports a verified 96-column Shopify CSV without requiring access to Salesforce Business Manager.
Note: Storefront extraction captures public catalogue data. It cannot export proprietary B2B contract pricing, internal ERP inventory records, or customer purchase histories.
5. Exporting Products from Other Supported E-Commerce Storefronts
Beyond WooCommerce and Salesforce Commerce Cloud, thousands of modern e-commerce stores run on custom headless architectures, Laravel/Vue storefronts, BigCommerce, Magento, or Shopify itself.
The Universal Extraction Protocol
When extracting product data from an unfamiliar e-commerce platform, the extraction engine evaluates the target URL using a hierarchical data cascade:
[Target Storefront URL]
│
▼
1. Native API Endpoints ────► (Shopify /products.json or WooCommerce Store API)
│ (if not available)
▼
2. Platform-Specific Engine ─► (SFCC Demandware parser or Laravel data feeds)
│ (if not detected)
▼
3. Schema.org JSON-LD ──────► (Embedded <script type="application/ld+json">)
│ (if missing/incomplete)
▼
4. OpenGraph Metadata ──────► (og:title, og:image, product:price:amount)
│ (if missing)
▼
5. Semantic HTML Heuristics ─► (DOM tag scanning, price classes, gallery links)
What Can and Cannot Be Extracted Globally
┌──────────────────────────────────────┬──────────────────────────────────────┐ │ Genuinely Extractable │ NOT Extractable │ │ (Public Storefront) │ (Private / Backend) │ ├──────────────────────────────────────┼──────────────────────────────────────┤ │ • Product Titles & Subtitles │ • Customer Names, Emails & Logins │ │ • Rich HTML Descriptions │ • Historical Orders & Financials │ │ • Visible Prices & Strikethroughs │ • Backend Cost per Item (COGS) │ │ • Variant Options (Sizes / Colors) │ • Real Warehouse Inventory Numbers │ │ • Active SKUs & Barcodes (if shown) │ • Draft or Unlisted Products │ │ • Full-Resolution Gallery Images │ • Supplier Contact Information │ └──────────────────────────────────────┴──────────────────────────────────────┘
6. Preparing and Structuring Your Data for Shopify
Once you have generated your product CSV, inspecting and validating the data before touching the Shopify admin is essential. Shopify's importer is strict; minor syntax errors in headers or handle groupings will corrupt your store layout.
The Anatomy of Key Shopify CSV Columns
Handle(Mandatory): The URL slug of the product (e.g.womens-running-shoe). Every variant belonging to the same product must share the exact same handle. Handles must be lowercase, alphanumeric, and use hyphens instead of spaces.Title(Mandatory on First Row): The display name of the product. Leave this blank on all subsequent variant or secondary image rows.Body (HTML): The main product description. Standard HTML tags (<p>,<ul>,<li>,<strong>) are supported. Ensure any proprietary WordPress shortcodes (such as[contact-form]or[gallery]) are stripped out.Vendor: The manufacturer or brand. Leaving this blank in the extractor retains the source store's brand; overriding it brands all products with your store name.Variant SKU: The unique stock keeping unit for that specific option combination. SKUs prevent inventory overlap and streamline fulfillment.Variant Price: The retail price customers pay. Must be formatted as a plain decimal number (e.g.29.99), with no currency symbols ($or£) and no thousands commas.Variant Compare At Price: The original strikethrough price used to display sales. Must be higher thanVariant Price. If a product is not on sale, leave this cell empty.Image Src: The absolute HTTP/HTTPS web address of the product photo. Shopify downloads the image file directly from this link during import.Image Position: Integer indicating display order (1,2,3).
7. Importing and Validating the CSV in Shopify: Step-by-Step
Follow this tested protocol to import your CSV file into Shopify without errors:
[Download shopify-products.csv]
│
▼
[1. Spreadsheet Review] ────► Spot check handles, prices, SKUs & image URLs
│
▼
[2. Create Pilot File] ─────► Extract 2 sample products into test-import.csv
│
▼
[3. Run Test Import] ───────► Shopify Admin → Products → Import (Status: Draft)
│
▼
[4. Inspect Live Preview] ──► Verify variants, pricing display & photo order
│
▼
[5. Full Batch Import] ─────► Upload complete catalogue with confidence
Step 1: Conduct a Spreadsheet Audit
Open your CSV in Google Sheets, Microsoft Excel, or Apple Numbers. Perform these three quick sanity checks:
- Check Column A (
Handle): Ensure handles are grouped together and do not alternate randomly. - Check
Variant Price: Sort or filter to ensure no currency symbols ($,€,PKR) or text strings crept into pricing cells. - Check
Image Src: Copy 2–3 image links and paste them into a private browser window to confirm they load publicly without requiring a password.
Step 2: The Two-Product Pilot Rule
Never upload a 500-product file on your first attempt. Create a small test file containing just the first 2 products (and their variant rows).
- Sign in to your Shopify Admin.
- Navigate to Products.
- In the top-right corner, click Import.
- Click Add file and select your 2-product pilot file.
- Uncheck "Overwrite any current products that have the same handle" unless you intend to update existing items.
- Click Upload and continue.
Step 3: Review the Shopify Import Preview
Shopify displays a preview window showing how it parsed the first product:
- Verify that Option names (e.g.
Size,Color) are mapped correctly. - Verify that the variant count matches reality.
- Click Import products.
Step 4: Verify the Imported Products
When the import completes, open both products in Shopify admin:
- Photos: Did all images download successfully? Are they crisp and in the right order?
- Pricing & Compare-at: Does the sale badge display correctly on your theme preview?
- Options: Does changing the dropdown from Small to Medium update the SKU and price appropriately?
- Status: If everything looks accurate, you are ready to upload the complete catalogue.
8. Common Migration Mistakes and How to Avoid Them
Mistake 1: Broken or Disappearing Images
Symptom: Products import with correct titles and prices, but images are missing or broken.
Cause: Shopify does not store image bytes inside the CSV; it reads the web address in Image Src and downloads the file during import. If the source store blocks bots (common on Cloudflare-protected sites), uses relative URLs (/images/shirt.jpg instead of https://store.com/images/shirt.jpg), or deletes images before the import finishes, Shopify fails to fetch the media.
Remedy: Ensure all image links are absolute URLs and test them in an incognito window.
Mistake 2: Variant Splitting (Handle Mismatches)
Symptom: A dress that comes in 4 sizes appears in Shopify as 4 separate products instead of 1 product with 4 size options.
Cause: Inconsistent Handle values. If Row 1 has handle summer-dress and Row 2 has handle summer-dress-1, Shopify treats them as two completely independent products.
Remedy: Verify that all rows belonging to a single product share the exact identical Handle.
Mistake 3: Unintentional Product Overwrites
Symptom: Importing new products accidentally overwrites existing best-sellers in your Shopify store.
Cause: Checking the "Overwrite existing products" box when an imported product shares a generic handle (like gift-card or cotton-t-shirt) with a live product.
Remedy: Ensure imported handles are unique, or leave the overwrite box unchecked during initial catalogue building.
Mistake 4: Missing 301 Redirects
Symptom: Migrating from WooCommerce destroys your Google organic search traffic.
Cause: WooCommerce product URLs follow /product/product-name/, whereas Shopify URLs follow /products/product-name/. Without 301 redirects, search engines hitting old links will receive 404 errors, causing search rankings to plunge.
Remedy: Build a URL redirect mapping table in Shopify Admin → Online Store → Navigation → View URL Redirects pairing old WooCommerce URLs with new Shopify URLs.
9. Frequently Asked Questions
Can I migrate customer accounts, passwords, and order histories via CSV?
No. Shopify's standard CSV import handles product and inventory records only. Customer passwords are cryptographically hashed and cannot be exported or imported in plain text. Customer records and historical order records must either be migrated using authorized API migration apps (such as Matrixify or LitExtension) or customer accounts must be re-invited via Shopify's account activation flow.
Do I need WooCommerce administrative access to extract products?
No. If you are using storefront extraction via the Shopify Product Extractor, the tool reads public storefront endpoints (such as the WooCommerce Store API) or Schema.org JSON-LD markup. This is particularly valuable when migrating catalogues from older staging sites, supplier storefronts where you have distribution rights, or archives where WordPress admin logins have been misplaced.
How does Salesforce Commerce Cloud handle variants compared to Shopify?
Salesforce Commerce Cloud uses an enterprise "Master and Variation" model where a Master Product defines shared attributes, and Variation Products represent individual purchasable SKUs with dedicated variation attributes (dwvar_). Shopify uses a simpler flat multi-row model where all variants share one Handle. The Shopify Product Extractor automatically flattens SFCC variation dropdowns into Shopify's Option1 Name and Option1 Value columns.
Can products be extracted from stores protected by Cloudflare or bot firewalls?
It depends on the strictness of the firewall. Some enterprise stores employ aggressive web application firewalls (WAFs) like Akamai Bot Manager or Cloudflare Turnstile that return an HTTP 403 Forbidden response to automated crawlers. When this occurs, automated tools cannot access page contents, and products must be entered manually or exported via authenticated backend access.
10. Conclusion: Choose the Right Tool for Your Migration
Migrating an e-commerce catalogue to Shopify does not require tedious manual copy-pasting, nor does it require hiring expensive development agencies for straightforward storefronts.
- For complete database migrations involving historical order archives, customer logins, and private accounting records, an authorized API migration tool or custom GraphQL pipeline is necessary.
- For moving products, variants, titles, prices, descriptions, and photography, storefront extraction provides the fastest, cleanest, and most reliable bridge into Shopify.
Ready to migrate your catalogue? Open the Shopify Product Extractor, paste a product, collection, or store link, and download your Shopify-ready 96-column CSV in minutes. For an operational walkthrough of every setting, consult our step-by-step Extractor Guide.