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:
- products, variants, collections or categories, images, and inventory;
- customers, orders, taxes, discounts, and gift cards;
- apps, subscriptions, reviews, custom fields, and integrations;
- theme content, navigation, domains, redirects, and analytics;
- legal, payment, shipping, and transactional-email settings.
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
- Export a fresh Shopify product CSV and keep an untouched copy.
- Record the export time, selected scope, product count, and variant count.
- Back up the destination and use a staging WooCommerce site.
- Pause unrelated catalog edits or define how changes made after export will be replayed.
- 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.
| Shopify export | WooCommerce target | Decision required |
|---|---|---|
URL handle | Slug or a migration crosswalk | Preserve a stable lookup, but do not treat the handle alone as a variation parent. |
Title | Name | Confirm grouping so repeated variant rows do not create duplicate products. |
SKU | SKU | Require a nonblank, unique SKU for every variant you intend to reference. |
Price and Compare-at price | Regular price and Sale price | If 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/value | Attribute columns plus variable-parent and variation rows | Declare parent attributes and give each child only its selected values. |
Image URL | Images | Verify each URL is directly reachable from staging and decide image order. |
Status | Published and catalog visibility | Create an explicit rule for active, draft, and archived; there is no safe universal one-to-one assumption. |
| Vendor and product category | Categories, tags, attributes, brand extension, or metadata | Map into the destination taxonomy actually installed. |
| SEO title, SEO description, and cost | Plugin-specific metadata or manual follow-up | Core 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.
- Create one WooCommerce parent row with
Typeset tovariable. - Assign the parent a stable ID or SKU that child rows can reference.
- Declare each option as an attribute on the parent and include all allowed values.
- Create one
variationrow per real Shopify variant—not per extra image row. - 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.
- product and variation counts match the approved source batch;
- SKUs remain exact, including leading zeros;
- regular and sale prices show the intended relationship;
- every variation is selectable and attached to the right parent;
- images load in the intended order without broken remote URLs;
- status, visibility, inventory, tax, and shipping behavior match the written rule.
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.
| Control | Evidence | Pass condition |
|---|---|---|
| Catalog coverage | Source products and variants versus destination parents and children | Every difference is explained and approved. |
| Identity | SKU and migration-crosswalk duplicates or blanks | No unresolved identifier collision. |
| Commercial data | Price and sale exceptions | No inverted, missing, or unintended sale. |
| Media | Broken image requests and spot checks | No required image is unavailable. |
| Publication | Active, draft, and archived decision report | Every 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
- Importing the Shopify export directly: destination columns and variation relationships are not the same.
- Flattening variants into products: size or color choices become duplicates instead of selectable children.
- Copying price labels literally: compare-at and current selling price can reverse the intended WooCommerce regular/sale relationship.
- Assuming archived equals draft: publication and catalog visibility require an explicit business rule.
- Counting import success instead of records: a completed job can still omit unmapped columns or remote images.
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.