← Open the migration preflight

Migration guide · reviewed August 20, 2026

Shopify to WooCommerce product CSV migration checklist

A Shopify product export is not a WooCommerce import file. The two platforms represent product identity, prices, publishing state, and variations differently. Build an explicit field map, test it in staging, and reconcile the result before changing the live store.

This checklist covers product-catalog planning. It does not migrate orders, customers, discounts, gift cards, apps, themes, domains, or redirects. WooCommerce’s own Shopify migration guidance treats those as separate parts of a store move.

1. Define the migration boundary

Write down what “complete” means before transforming a row. A product CSV can describe catalog records, but it cannot prove that the rest of a Shopify store has moved. Use separate workstreams and acceptance checks for:

For this checklist, the success boundary is narrower: a WooCommerce staging catalog whose product and variation counts, identifiers, prices, images, and publication decisions reconcile with an approved source snapshot.

2. Protect the source before conversion

  1. Export a fresh Shopify product CSV and keep an untouched copy.
  2. Record the export time, selected scope, product count, and variant count.
  3. Back up the destination and use a staging WooCommerce site.
  4. Pause unrelated catalog edits or define how changes made after export will be replayed.
  5. Test a small representative batch before a full catalog import.

WooCommerce recommends backing up first, using staging, and testing a small batch before a large import. Those controls protect against both mapping mistakes and destination-specific behavior.

3. Build a field map—do not rename columns blindly

The built-in WooCommerce importer expects its own product schema and leaves unrecognized columns unmapped by default. A reliable conversion therefore needs a written rule for every source field that matters.

Planning map for common product fields
Shopify exportWooCommerce targetDecision required
URL handleSlug or a migration crosswalkPreserve a stable lookup, but do not treat the handle alone as a variation parent.
TitleNameConfirm grouping so repeated variant rows do not create duplicate products.
SKUSKURequire a nonblank, unique SKU for every variant you intend to reference.
Price and Compare-at priceRegular price and Sale priceIf compare-at exists, it is commonly the higher regular price and Shopify price the sale price; validate the relationship instead of copying by label.
Option1–3 name/valueAttribute columns plus variable-parent and variation rowsDeclare parent attributes and give each child only its selected values.
Image URLImagesVerify each URL is directly reachable from staging and decide image order.
StatusPublished and catalog visibilityCreate an explicit rule for active, draft, and archived; there is no safe universal one-to-one assumption.
Vendor and product categoryCategories, tags, attributes, brand extension, or metadataMap into the destination taxonomy actually installed.
SEO title, SEO description, and costPlugin-specific metadata or manual follow-upCore import compatibility depends on the destination extensions and must be tested.

The map is a design document, not a direct-import promise. Check it against the current WooCommerce importer documentation and product CSV schema for the destination version.

4. Rebuild variants as parent and child records

Shopify groups product and variant rows by URL handle. WooCommerce represents a variable product with a parent row and separate variation rows. The parent declares the available attributes; each variation refers back through Parent and carries the selected attribute values.

  1. Create one WooCommerce parent row with Type set to variable.
  2. Assign the parent a stable ID or SKU that child rows can reference.
  3. Declare each option as an attribute on the parent and include all allowed values.
  4. Create one variation row per real Shopify variant—not per extra image row.
  5. Give every variation a unique SKU, parent reference, selected values, and reviewed price.

Missing SKUs, duplicate SKUs, incomplete option pairs, and extra-image rows mistaken for variants are conversion blockers because they make the target relationship ambiguous.

5. Convert and test a representative batch

Choose a batch that includes a simple product, a variable product, multiple images, a sale, a draft or archived product, and any custom taxonomy or metadata. Import it into staging and review both the importer log and the rendered storefront.

A clean CSV parse does not replace this test. WooCommerce settings, extensions, inventory locations, and remote image access can change the result after the file leaves the browser.

6. Reconcile before cutover

Do not accept “the import finished” as proof. Compare source and destination using totals and exceptions that someone can reproduce.

Minimum reconciliation record
ControlEvidencePass condition
Catalog coverageSource products and variants versus destination parents and childrenEvery difference is explained and approved.
IdentitySKU and migration-crosswalk duplicates or blanksNo unresolved identifier collision.
Commercial dataPrice and sale exceptionsNo inverted, missing, or unintended sale.
MediaBroken image requests and spot checksNo required image is unavailable.
PublicationActive, draft, and archived decision reportEvery state follows the approved rule.

Keep the source export, transformation version, import file, importer log, gap report, and reconciliation result together. That evidence makes a rollback or correction possible without guessing.

Common failure modes

Frequently asked questions

Can I upload a Shopify product CSV directly to WooCommerce?

Not safely as a general rule. WooCommerce uses a different product schema and parent/variation model. Convert against an explicit map and test the result in staging.

Does the product CSV migrate orders and customers?

No. Treat customers, orders, discounts, gift cards, apps, redirects, and other store data as separate migration scopes with their own checks.

Do all Shopify fields have a WooCommerce equivalent?

No universal equivalent exists for every field. Taxonomy, SEO metadata, cost, subscriptions, reviews, and app data often depend on the destination configuration or extensions.

Does passing the preflight mean the file is ready to import?

No. Passing means no implemented blocker was found in the Shopify product source. Conversion, destination mapping, staging import, and reconciliation are still required.

Primary sources and limitation

Reviewed sources: Shopify product export guidance, Shopify product CSV documentation, WooCommerce Shopify migration guidance, and the WooCommerce product CSV importer documentation. Platform formats and installed extensions can change; verify current documentation and destination behavior before a live cutover.

For a reviewed field map and migration path, see the $149 catalog review.