How to Export Products to Shopify from WordPress & WooCommerce

Published 24 October 2026 by WeCalculator

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?


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:

  1. Check the Admin Sidebar: Look for the dedicated WooCommerce and Products menus in wp-admin. If they exist, your site is running WooCommerce.
  2. Inspect the REST API: Navigate to https://your-domain.com/wp-json/wc/store/v1/products in your browser. If this endpoint returns a JSON array of products, your site has public WooCommerce API support enabled.
  3. 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 FieldWooCommerce ImplementationShopify CSV RepresentationMapping Rule & Notes
Product HandlePost Slug (post_name)HandleUnique URL identifier; groups multi-row variants.
TitlePost Title (post_title)TitleMust appear on Row 1 of the product; blank on subsequent variant rows.
DescriptionPost Content (post_content)Body (HTML)Clean HTML formatting; embedded shortcodes must be stripped.
VendorCustom taxonomy or Store NameVendorDefaults to brand or store name; can be overridden in bulk.
CategoriesHierarchical Product CategoriesProduct Category / TagsShopify uses standardized categories; Woo categories map best to collections or tags.
VariantsVariable Products / AttributesOption1 Name, Option1 ValueUp to 3 option axes (e.g. Size, Color, Material).
SKUProduct / Variation SKU (_sku)Variant SKUTransferred per variant row for precision inventory tracking.
Regular Price_regular_priceVariant PriceCurrent selling price; plain decimal number without currency symbols.
Sale Price_sale_priceVariant Compare At PriceOriginal strikethrough price; must be higher than Variant Price.
ImagesFeatured image + GalleryImage Src / Image PositionPublicly 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 specific Variant SKU, its Variant Price, and the primary Image Src.
  • Rows 2 & 3: Leave Title and Body (HTML) blank, maintaining the exact same Handle, while specifying Medium and Large along 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

  1. 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.
  2. Title (Mandatory on First Row): The display name of the product. Leave this blank on all subsequent variant or secondary image rows.
  3. 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.
  4. 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.
  5. Variant SKU: The unique stock keeping unit for that specific option combination. SKUs prevent inventory overlap and streamline fulfillment.
  6. 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.
  7. Variant Compare At Price: The original strikethrough price used to display sales. Must be higher than Variant Price. If a product is not on sale, leave this cell empty.
  8. Image Src: The absolute HTTP/HTTPS web address of the product photo. Shopify downloads the image file directly from this link during import.
  9. 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).

  1. Sign in to your Shopify Admin.
  2. Navigate to Products.
  3. In the top-right corner, click Import.
  4. Click Add file and select your 2-product pilot file.
  5. Uncheck "Overwrite any current products that have the same handle" unless you intend to update existing items.
  6. 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.

Frequently asked questions

Can I move products from WordPress to Shopify if my site does not use WooCommerce?

Standard WordPress is a content management system for posts and pages, not an e-commerce platform. Without WooCommerce or an e-commerce plugin, WordPress lacks dedicated product structures like SKUs, variant prices, weights, and inventory trackers. To export to Shopify, content must either be manually mapped into Shopify's 96-column CSV structure or scraped from custom product display pages that publish structured Schema.org data.

What is the difference between native WooCommerce CSV export and storefront extraction?

Native WooCommerce export runs from inside WordPress admin (Tools → Export or WooCommerce → Products → Export), producing a raw database dump that requires manual column remapping into Shopify's format. Storefront extraction reads the public WooCommerce Store API or frontend page data, generating a pre-formatted, 96-column Shopify CSV with handles, variant rows, and image matrices ready for direct import without column mapping.

Does the Shopify Product Extractor connect directly to Salesforce Commerce Cloud Business Manager?

No. The tool does not connect to Salesforce Business Manager, OCAPI, or SCAPI, nor does it require administrative API keys. Instead, it extracts publicly accessible product data, variation dropdowns (sizes/colors via Demandware dwvar parameters), and high-resolution galleries directly from public SFCC storefronts (such as Khaadi or Sapphire) into a clean Shopify CSV.

Why do product images sometimes fail to appear in Shopify after a CSV import?

During import, Shopify downloads images from the URLs provided in the Image Src column. If the source store blocks automated hotlinking, requires authentication, uses relative paths, or deletes the image files before Shopify completes its background download, Shopify cannot retrieve the image file. Always verify image URLs in a browser before running bulk imports.

Will product variants, options, and compare-at prices transfer cleanly?

Yes, provided the CSV follows Shopify's multi-row handle structure. One product with multiple variants (such as 3 sizes × 2 colors) must share the exact same handle across all rows, with each row declaring its specific option values, SKUs, and prices. Strikethrough sale prices are preserved in the Variant Compare At Price column.