{"id":363191,"date":"2026-09-06T21:20:49","date_gmt":"2026-09-06T21:20:49","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/store-migrator-for-woocommerce\/"},"modified":"2026-09-07T05:29:48","modified_gmt":"2026-09-07T05:29:48","slug":"yuupee-store-migrator-for-shopify","status":"publish","type":"plugin","link":"https:\/\/ug.wordpress.org\/plugins\/yuupee-store-migrator-for-shopify\/","author":23549640,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.1.0","stable_tag":"1.1.0","tested":"7.1","requires":"6.4","requires_php":"7.4","requires_plugins":null,"header_name":"Yuupee Store Migrator for Shopify","header_author":"Abid","header_description":"Migrate a Shopify store into WooCommerce \u2014 products, variants and images from a CSV export (free), plus collections, customers, orders, coupons and 301 redirects (premium). Batched with Action Scheduler and resumable.","assets_banners_color":"7c5d9e","last_updated":"2026-09-07 05:29:48","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/Abdoudiba\/yuupee-store-migrator-for-shopify","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":81,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.1":{"tag":"1.0.1","author":"abdoudiba","date":"2026-09-06 21:20:34","revision":3683966},"1.0.2":{"tag":"1.0.2","author":"abdoudiba","date":"2026-09-06 22:49:54","revision":3684003},"1.1.0":{"tag":"1.1.0","author":"abdoudiba","date":"2026-09-07 05:29:48","revision":3684211}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3683966,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3683966,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3683966,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3683966,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.1","1.0.2","1.1.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3684003,"resolution":"1","location":"assets","locale":"","width":1600,"height":519},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3684003,"resolution":"2","location":"assets","locale":"","width":1600,"height":852},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3684003,"resolution":"3","location":"assets","locale":"","width":1600,"height":1877}},"screenshots":{"1":"Step 1 \u2014 Connect: upload the \"Plain CSV\" products export from your Shopify admin.","2":"Step 2 \u2014 Analyze: the background index pass reports product, variant and image counts, then the pre-flight dry run flags duplicate SKUs and unreachable images before anything is written. Warnings let the run proceed; blocking issues stop it.","3":"Step 4 \u2014 Report: every product row with a link to the created WooCommerce product, the full per-run log (downloadable as CSV), and a one-click rollback that deletes everything the run created."}},"plugin_section":[],"plugin_tags":[8225,87,4155,23548,286],"plugin_category":[45,59],"plugin_contributors":[278145],"plugin_business_model":[],"class_list":["post-363191","plugin","type-plugin","status-publish","hentry","plugin_tags-csv-importer","plugin_tags-import","plugin_tags-migration","plugin_tags-shopify","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_category-utilities-and-tools","plugin_contributors-abdoudiba","plugin_committers-abdoudiba"],"banners":{"banner":"https:\/\/ps.w.org\/yuupee-store-migrator-for-shopify\/assets\/banner-772x250.png?rev=3683966","banner_2x":"https:\/\/ps.w.org\/yuupee-store-migrator-for-shopify\/assets\/banner-1544x500.png?rev=3683966","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/yuupee-store-migrator-for-shopify\/assets\/icon-128x128.png?rev=3683966","icon_2x":"https:\/\/ps.w.org\/yuupee-store-migrator-for-shopify\/assets\/icon-256x256.png?rev=3683966","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/yuupee-store-migrator-for-shopify\/assets\/screenshot-1.png?rev=3684003","caption":"Step 1 \u2014 Connect: upload the \"Plain CSV\" products export from your Shopify admin."},{"src":"https:\/\/ps.w.org\/yuupee-store-migrator-for-shopify\/assets\/screenshot-2.png?rev=3684003","caption":"Step 2 \u2014 Analyze: the background index pass reports product, variant and image counts, then the pre-flight dry run flags duplicate SKUs and unreachable images before anything is written. Warnings let the run proceed; blocking issues stop it."},{"src":"https:\/\/ps.w.org\/yuupee-store-migrator-for-shopify\/assets\/screenshot-3.png?rev=3684003","caption":"Step 4 \u2014 Report: every product row with a link to the created WooCommerce product, the full per-run log (downloadable as CSV), and a one-click rollback that deletes everything the run created."}],"raw_content":"<!--section=description-->\n<p>Yuupee Store Migrator for Shopify brings a Shopify catalogue into WooCommerce\nwithout a hosted middleman. You export the standard CSV files from your Shopify\nadmin, upload them here, and the plugin creates the matching WooCommerce\nproducts.<\/p>\n\n<p>Every object it creates is recorded in an internal ID map, so:<\/p>\n\n<ul>\n<li>re-running an import <strong>updates<\/strong> products instead of duplicating them;<\/li>\n<li>a one-click <strong>rollback<\/strong> removes everything a run created;<\/li>\n<li>a later premium tier can do <strong>incremental<\/strong> re-runs (only new orders, etc.).<\/li>\n<\/ul>\n\n<p>Large catalogues are processed in the background with Action Scheduler (the\nsame queue WooCommerce itself uses), so a 20,000-product store migrates\nwithout a long-running request and picks up where it left off if interrupted.<\/p>\n\n<h4>Free<\/h4>\n\n<ul>\n<li>Products and variants from the Shopify <strong>Products CSV<\/strong> (simple and variable).<\/li>\n<li>Product images by URL, product type as category, tags.<\/li>\n<li>Background batching, ID map, dry-run, rollback, per-row log.<\/li>\n<\/ul>\n\n<h4>Premium (sold separately)<\/h4>\n\n<ul>\n<li>Live <strong>Shopify Admin API<\/strong> connection \u2014 no CSV juggling.<\/li>\n<li>Collections to product categories, customers and addresses, full orders,\ndiscount codes to coupons, blog posts and pages.<\/li>\n<li><strong>301 redirect<\/strong> generation for the old Shopify URLs.<\/li>\n<li><strong>Incremental<\/strong> re-runs.<\/li>\n<\/ul>\n\n<h4>Known limits<\/h4>\n\n<ul>\n<li>Shopify never exports password hashes (no API, no CSV), so migrated\ncustomers set a new password on first login.<\/li>\n<li>Smart-collection rules can't be reproduced one-to-one; membership is copied.<\/li>\n<li>Shopify has no native product reviews (they come from apps), so reviews are\nout of scope.<\/li>\n<\/ul>\n\n<!--section=installation-->\n<ol>\n<li>Install and activate WooCommerce.<\/li>\n<li>Upload this plugin to <code>\/wp-content\/plugins\/<\/code> or via Plugins \u2192 Add New \u2192 Upload, and activate.<\/li>\n<li>In your Shopify admin, export Products (and, with premium, connect the Admin API).<\/li>\n<li>Go to WooCommerce \u2192 Shopify Import and follow the wizard.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"do%20i%20need%20a%20paid%20shopify%20plan%3F\"><h3>Do I need a paid Shopify plan?<\/h3><\/dt>\n<dd><p>No. The free tier works entirely from the CSV files Shopify lets every plan\nexport. The premium Admin API connection needs a custom app in your Shopify\nadmin, which any plan can create.<\/p><\/dd>\n<dt id=\"can%20i%20undo%20an%20import%3F\"><h3>Can I undo an import?<\/h3><\/dt>\n<dd><p>Yes. Each run is tagged, and the wizard's rollback deletes every WooCommerce\nobject that run created.<\/p><\/dd>\n<dt id=\"will%20it%20duplicate%20products%20if%20i%20run%20it%20twice%3F\"><h3>Will it duplicate products if I run it twice?<\/h3><\/dt>\n<dd><p>No. Matching is by the Shopify source ID (then by SKU as a fallback), so a\nsecond run updates the existing product.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.1.0<\/h4>\n\n<ul>\n<li>Adds integration hooks so a separately-sold premium add-on can extend the migration wizard (<code>stwm_wizard_steps<\/code>, <code>stwm_wizard_render_step_{slug}<\/code>, <code>stwm_connect_before_form<\/code> \/ <code>stwm_connect_after_form<\/code>, <code>stwm_after_preflight<\/code>). No change to the free CSV importer's behaviour.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Documentation only: added screenshots of the Connect, Analyze and Report steps to the WordPress.org listing. No code changes.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Renamed to \"Yuupee Store Migrator for Shopify\" (slug: yuupee-store-migrator-for-shopify) per WordPress.org naming guidelines.<\/li>\n<li>Hardened the image-reachability pre-flight check: it now uses <code>wp_safe_remote_head()<\/code> so a CSV-supplied image URL can't be used to probe internal\/private network addresses.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<p>First public release.<\/p>\n\n<ul>\n<li>Import Shopify products from the standard Products CSV: simple and variable\nproducts, variants (price, sale price from Compare At, SKU, stock, backorders,\nweight, barcode, tax, virtual), product type as category, tags, vendor and SEO\nfields. Product and variant images are sideloaded into the media library and\nde-duplicated.<\/li>\n<li>Background processing through Action Scheduler (the queue WooCommerce itself\nuses): an index pass over the uploaded CSV, then batched import with a live\nprogress report, resumable if interrupted.<\/li>\n<li>Idempotent: matching is by Shopify source ID (SKU as a fallback), so a second\nrun updates products in place instead of duplicating them.<\/li>\n<li>One-click rollback: deletes every product, variation and image a run created.<\/li>\n<li>Pre-flight checks on the Analyze step: a dry run over the CSV flags duplicate\nSKUs, unparseable prices, rows with no title, missing columns and unreachable\nimage URLs before anything is written. Blocking issues stop the import until\nthe file is corrected; warnings are shown but let the run proceed.<\/li>\n<li>Independent per-run log (WooCommerce's logger is off on many stores), shown on\nthe report screen and downloadable as CSV.<\/li>\n<li>Crash-safety: a product's mapping row is written the moment the product is\ncreated, before its images and variations, so a batch that dies partway can\nstill be rolled back cleanly.<\/li>\n<\/ul>","raw_excerpt":"Migrate a Shopify store into WooCommerce \u2014 products, variants and images from a CSV export, batched and resumable, with a full rollback.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/363191","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=363191"}],"author":[{"embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/abdoudiba"}],"wp:attachment":[{"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=363191"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=363191"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=363191"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=363191"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=363191"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/ug.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=363191"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}