A client came to me last month with a familiar problem. They were running a Shopify store with around 340 products, mid-range catalogue complexity variable products, multiple image galleries, categories, and a couple of years’ worth of customer reviews they absolutely did not want to lose.
They’d been on Shopify for three years. Their monthly app bill had quietly climbed to just over $200, $49 for a bundle builder, $39 for a back-in-stock tool, $29 for a review importer, plus the base plan.
They’d already set up WordPress and WooCommerce on their new host. They just needed everything moved over cleanly.
I’d done this kind of migration before CSV exports, manual field mapping, and the whole painful workflow. I wasn’t looking forward to it. So I went looking for a better option.
I landed on Shop2Woo. Here’s what actually happened.
The Project That Made Me Go Looking
My previous Shopify-to-WooCommerce migrations had gone one of two ways. Either I used Cart2Cart, which works but requires setting up API credentials on both ends for every single client, a 20-minute setup per project that adds up when you’re handling multiple migrations in a quarter.
Or I exported a CSV from Shopify and spent the better part of a day reformatting columns, fixing image URLs, and manually mapping fields before the WooCommerce importer would accept it without errors.
Neither option was particularly billable-friendly. The CSV method, especially, you can’t really charge a client for three hours of spreadsheet work and expect them not to raise an eyebrow.
So when I saw that Shop2Woo claimed to work without a Shopify API key, just a store URL — I was sceptical enough to dig into how that actually works before recommending it to anyone.
What I Actually Needed from a Migration Tool
Let me be specific, because “migration tool” covers a lot of ground and the requirements vary depending on the project.
For this particular job, I needed:
- Clean product import — titles, descriptions, SKUs, prices, stock levels, all attributes and variations
- Image transfer — not just URL references, but actual images downloaded and hosted on the client’s server
- Category mapping — Shopify collections mapped to WooCommerce categories without manual intervention
- Review migration — the client had 3+ years of native Shopify product reviews and losing them wasn’t an option
- Progress visibility — I needed to know what was happening and be able to show the client a log, not just a spinner and a prayer
- Clean uninstall — whatever the plugin writes to the database during import, it needs to clean up after itself when it’s done
What I didn’t need:
- Order history migration (client was keeping Shopify live for historical order lookups)
- Customer account migration
- A recurring subscription to a tool I’d use once per project
What Shop2Woo Is (and What It Isn’t)

Shop2Woo is a WordPress plugin. You install it on the destination WooCommerce site the same way you’d install anything else: upload via the WordPress admin, activate, and done.
No separate app to install on Shopify. No OAuth dance. No API credentials to generate and manage.
It pulls product data by reading Shopify’s public-facing JSON feed the same endpoints that Shopify exposes to anyone with the store URL.
This is the key architectural decision that separates it from tools like Cart2Cart or LitExtension, which connect to Shopify’s REST API and require a private app setup on the merchant’s Shopify account.
That matters from a workflow perspective. Every client migration I do with an API-dependent tool requires me to:
- Log into the client’s Shopify admin
- Navigate to Apps → Develop Apps → Create App
- Configure the required API scopes
- Copy the API key and secret into the migration tool
- Wait for the client to approve the private app installation
With Shop2Woo, that entire sequence is replaced with: paste the Shopify store URL.
Is that a significant time saving? Per project, it’s maybe 15–20 minutes. Across ten projects in a year, that’s three to four hours of setup overhead eliminated, plus the back-and-forth with clients who aren’t sure where to find the API credentials section.
What Shop2Woo is not is a full-store migration tool. It doesn’t migrate order history, customer accounts, or discount codes. If those are requirements on your project, you’ll need a different tool or a supplementary workflow for those specific data types.
For product-focused migrations, which is the majority of what I handle, the scope is exactly right.
How It Works Under the Hood
Images are downloaded to the WordPress media library during import, not stored as external URLs pointing back to Shopify’s CDN.
This is non-negotiable for any production migration; you can’t have product images depending on a Shopify CDN you’re about to stop paying for.
Categories are created as WooCommerce product categories during import, mapped from Shopify’s collection structure.
Attributes and variations are handled through WooCommerce’s attribute taxonomy system, the right way, not as custom meta fields that look right in the admin but break product filtering.
What Transferred Cleanly

On my client’s 340-product store, here’s what came over without any manual cleanup:
Products: All 340 products transferred with correct titles, full descriptions, short descriptions (mapped from Shopify’s description field), SKUs, regular prices, and stock quantities. No duplicates. No truncation issues on longer descriptions.
Variants: Variable products with multiple options (size + colour combinations) came over correctly structured as WooCommerce variations with individual SKUs and pricing where they’d been set in Shopify. This is where CSV migrations frequently break, because Shopify and WooCommerce handle variation data very differently in flat file format.
Images: All product images downloaded and attached to the correct products. Featured images set correctly. Gallery images for products with multiple shots came over in order. Total image count matched between stores, which I verified by comparing Shopify’s product JSON against the WordPress media library.
Categories: Shopify collections mapped to WooCommerce categories. Hierarchy wasn’t deeply nested on this particular store, so I can’t speak to how it handles multi-level collection structures from personal experience on this project — worth testing if that’s a requirement.
Reviews: This was the one I was most uncertain about. All native Shopify product reviews transferred, including reviewer names, ratings, and review text. They were imported as WooCommerce reviews and appeared correctly on the product pages.
The client specifically checked several reviews they remembered and confirmed they matched.
What to Watch Out For
A few things that came up during the migration that are worth flagging before you run this on a client site:
Run on staging first, obviously. This shouldn’t need saying, but run the full import on a staging environment before touching production.
Shop2Woo imports create real database entries — products, terms, attachments — and while the plugin does include a rollback/clean option, cleaning up a partial import on a live store is a conversation you don’t want to have with a client.
Check your PHP memory limit and execution time. For large catalogues, Shop2Woo is doing a lot of sequential HTTP requests and file downloads. On shared hosting with a 128MB memory limit and a 30-second execution timeout, you’ll hit walls.
Set memory_limit = 256M and max_execution_time = 300 in your php.ini or .htaccess before kicking off a large import. My client’s store ran on managed WordPress hosting with sensible defaults, so this wasn’t an issue, but on cheaper shared hosting it will be.
Third-party review apps won’t transfer. If your client’s Shopify reviews live in Okendo, Yotpo, Junip, or any other third-party review app rather than Shopify’s native review system, Shop2Woo won’t touch them.
Those apps store review data in their own systems, not in Shopify’s product database. You’ll need to export from those apps directly and use a WooCommerce-compatible review importer for those records.
Metafields require custom handling. If the client’s store uses Shopify metafields for custom product data, technical specs, downloadable files, or custom attributes, those won’t transfer automatically. Plan for a cleanup pass if metafields are part of the data model.
Redirects are your responsibility. Shop2Woo handles the product import; it doesn’t set up 301 redirects from old Shopify URLs to new WooCommerce URLs.
That’s a separate task. Set up your permalink structure in WooCommerce before import, then use Redirection or a similar plugin to map old /products/product-name URLs to new /product/product-name URLs. Don’t skip this step at any store with existing search traffic.
Code Quality & Plugin Behaviour: The Stuff That Actually Matters to Developers

This is where I spent time before recommending the plugin to the client, because a plugin’s marketing copy tells you what it does — the code tells you how.
No third-party analytics. The plugin doesn’t phone home. No usage tracking, no data sent to external servers during the import process. Your client’s product data stays between their Shopify store and their WooCommerce installation.
Clean uninstall. Removing the plugin removes the plugin’s own data. It doesn’t leave orphaned database tables, stray options in wp_options, or imported product data behind — the imported products are WooCommerce products and behave like any other WooCommerce product after the import is done.
WPML and Polylang compatibility. Confirmed compatible for multilingual projects, which matters if you’re handling stores in multiple language markets. This comes up more often than you’d expect in EU client work.
No subscription. $24.99 one-time. Add it to the project quote as a tool cost, bill it, and move on. No annual renewal to explain to the client, no ongoing cost that bleeds into post-project billing conversations.
How It Stacks Up Against the Other Tools I’ve Used
| Shop2Woo | Cart2Cart | LitExtension | Manual CSV | |
|---|---|---|---|---|
| API Key Required | ❌ No | ✅ Yes | ✅ Yes | ❌ No |
| Products + Variants | ✅ | ✅ | ✅ | ⚠️ Error-prone |
| Images Downloaded | ✅ | ✅ | ✅ | ❌ Manual |
| Reviews | ✅ Native only | ✅ | ✅ | ❌ |
| Order History | ❌ | ✅ | ✅ | ❌ |
| Progress Visibility | ✅ | ✅ | ✅ | ❌ |
| Uses WC Native API | ✅ | ⚠️ Varies | ⚠️ Varies | ❌ Direct DB |
| No SQL Injection | ✅ | ⚠️ Unclear | ⚠️ Unclear | ❌ |
| Clean Uninstall | ✅ | N/A | N/A | N/A |
| WPML / Polylang | ✅ | ⚠️ | ⚠️ | ❌ |
| Pricing | $24.99 once | $29–$200+ per migration | $69+ / annual | Free (your time) |
| Per-Project Overhead | None | 20 min API setup | 20 min API setup | Hours |
The Cart2Cart comparison deserves a bit more commentary. Cart2Cart is the tool I defaulted to before testing Shop2Woo, and it does handle a wider scope of data — order history, customer accounts, and coupons.
If a client project genuinely requires full-store data migration, including historical orders, Cart2Cart or LitExtension is the right call.
But for product-focused migrations, which in my experience cover around 80% of client requests, the API setup overhead and the per-migration pricing model make it harder to justify in the quote.
The pricing difference is also worth naming directly. Cart2Cart’s cost scales with record count a store with several hundred products and associated media can push into the $80–$150+ range per migration.
Shop2Woo at $24.99 flat, used across multiple client projects on the 3-site license, pencils out significantly better over the course of a year.
My Shop2woo Verdict
For product-focused Shopify-to-WooCommerce migrations, Shop2Woo does exactly what it says, in the way that I’d want a WordPress plugin to do it using WooCommerce’s native APIs, no direct SQL, no third-party data exfiltration, and a clean uninstall.
The no-API-key architecture is the feature that changes the workflow calculus. Eliminating per-project API credential setup is a real time saver when you’re handling this kind of work regularly.
Combined with a one-time price you can invoice to clients without ongoing overhead, it fits cleanly into a professional development workflow in a way that subscription-based migration tools don’t.
It’s not a full-store migration solution. Order history, customer accounts, and third-party review app data are out of scope. Know that going in, set client expectations accordingly, and it delivers cleanly on what it does cover.
My client’s store went live on WooCommerce with all 340 products, images, and reviews intact. The migration took under an hour, including the staging run. The client was happy. That’s the actual metric.
Have you used Shop2Woo on a client project? Specifically curious if anyone has tested the category hierarchy handling on stores with deeply nested collections, or run it against a catalog over 1,000 products. Drop your experience in the comments.
Tagged: WooCommerce development, Shopify migration, WordPress plugins, client workflow, eCommerce tools