Which Shopify Migration Tool Fits Your Store?
Choose a Shopify migration tool by the records you need, then test relationships, changed records, duplicate prevention, and historical-order side effects.
The right Shopify migration tool depends on which records you need to move: start with Shopify's Store Migration app or native CSV imports for supported product and customer data, and evaluate a specialist importer when you need historical orders or more controlled transformations. Before committing, make the tool pass a small import, a changed-record update, and an unchanged repeat run so you can check both completeness and duplicate prevention.
A successful upload is only the beginning of acceptance. Your team needs to find the right customer, sell the right variant, and understand an old order after the move. This guide explains the available routes and gives you a practical rehearsal to use with any vendor. The rehearsal is my recommended evaluation method, not a claim that every tool supports every operation.
Choose the import route by the records you need
Make a list with four columns: source record, destination, transfer method, and person who will approve the result. Give products, customers, historical orders, pages, and redirects separate rows. Shopify's migration guide explicitly allows different methods for different content and specifies this dependency order: products first, customers second, historical orders third.
Separate historical orders from orders still awaiting fulfillment. For the latter, write down which system and team will finish the work. Do the same for subscriptions, outstanding gift balances, loyalty records, and reviews: require a named destination and an explicit transfer plan instead of assuming that “customers and orders included” covers them.
Shopify Store Migration: check the source-specific coverage
Choose this route when its source-specific coverage satisfies your required records and you want a guided starting point. Reject it as the sole migration tool if a required record type is outside that coverage. You can still use it for part of the move if another documented route handles the remainder.
The Shopify Store Migration listing describes a free app for moving product and customer data from Square, WooCommerce, Etsy, Wix, Amazon, eBay, Clover, and Lightspeed R/X. Depending on the source, it uses an uploaded CSV or a supported account connection. The listing also warns that source exports and formats can require edits.
Start here when the documented source and data coverage match your list. Do not read an app's data-access permissions as a promise that it imports every corresponding record type. Ask specifically about your required entities and fields, then inspect them in the destination. A basic catalog transfer and a complete operating history are different scopes.
Native CSV: useful when you can own the mapping
Choose CSV when the team can prepare and review the files, and the required data fits the supported columns. Reject a CSV-only plan when your scope includes historical orders: Shopify's migration guide directs those to apps or APIs, rather than native customer or product CSV imports.
Shopify's product import instructions use Products > Import > Add file > Upload and continue, followed by review and import. This route suits a team that can prepare Shopify's format and check the result without relying on an automated source connector.
The update behavior deserves attention. With Overwrite products with matching handles selected, included columns overwrite matching products. A blank optional column can erase an existing value; an omitted optional column leaves its existing value alone. Without overwrite selected, matching handles are ignored. Review the documented dependent-column requirements before preparing a partial update.
Keep that distinction visible in the handoff: “we do not have a replacement value” should not accidentally become “clear the destination value.” If your team cannot review the mapping and update file confidently, a guided importer may be a better fit. For a WooCommerce catalog, our product import route comparison explores that narrower choice.
Specialist migration apps: test the promised scope
Choose a specialist when it demonstrates the additional records or update controls your project needs. Reject a candidate if its demo cannot expose your difficult records or its operator cannot explain how the final transfer handles records already imported.
The Cart2Cart listing advertises products, customers, orders, reviews, and a demo before the full transfer. Those are useful starting points for a shortlist. They do not replace an agreed list of fields, exclusions, update behavior, and records needing manual work for your particular source platform.
A spreadsheet-oriented importer offers another approach. Matrixify's product documentation, for example, distinguishes merging product media from replacing it: replacement removes existing media and adds the supplied set. Ask whoever prepares the file to explain each destructive command before approving it. More control is valuable when someone owns the consequences.
Choose a specialist because its documented behavior solves a requirement. Avoid choosing solely by the biggest entity count on a pricing page. A store with straightforward products may need less tooling than a smaller store whose customer service relies on complicated historical records.
Custom migration: reserve it for a specific unsolved requirement
Choose custom work when a documented requirement remains unsolved after evaluating existing tools. Reject it if the proposal cannot explain the transformation, matching rules, and failure recovery clearly enough for your team to approve the result.
Shopify lists an API-based custom migration as another supported route. Consider it when the source requires transformations or relationships that your shortlisted tools cannot demonstrate. Require the same acceptance exercise from custom code as from an app, plus a clear owner for failed records and reruns.
Do not commission custom development merely because the catalog is large. First identify the unsupported requirement in writing. If the question is whether your team can supervise the work, use our migration agency versus DIY guide alongside the data scope.
Build a sample that can expose a bad mapping
Choose representative records deliberately. A random handful of simple products can make almost any import look complete. Include a product with variants and variant images, a product with a meaningful shipping weight, a customer with an address that uses a second line, and an order connected to both an imported product and customer.
Where your business uses them, add a discounted order, a partially refunded order, and a product with custom fields. Record the expected result before anyone runs the migration. Keep source exports and screenshots together so that the reviewer does not have to guess whether a missing value was absent before the move.
- Product evidence: source identifier, intended Shopify handle, variant options, SKU, images, publication state, weight, and inventory location.
- Customer evidence: source identifier, intended matching rule, addresses, marketing preference, and expected connection to orders.
- Order evidence: source reference, date, currency, item quantities, discounts, shipping, refund information, and fulfillment state.
- Exception evidence: any field intentionally omitted, why it is omitted, and where staff will retrieve it afterward.
These are proposed acceptance fields; confirm which are supported by the chosen source-to-destination route. An unsupported field discovered during the rehearsal is a planning decision. Discovering it after customer service needs it is a support problem.
Run the same sample three times, for different reasons
First run: prove the relationships
Import into a controlled destination with the agreed settings. Review products under Products, customers under Customers, and historical purchases under Orders. Follow the relationships between records rather than accepting matching totals as proof. Ask a second person to locate the imported order using the reference a customer would provide.
Shopify's customer CSV documentation makes a crucial distinction: Total Spent and Total Orders are not imported with customer details, and a customer CSV cannot import order information. It also cannot carry customer passwords from another store. Treat customer profiles, purchase history, and the future sign-in experience as separate acceptance items.
Second run: prove the update rules
Change one mapped value in the controlled source sample and add one new record. Ask the operator to predict the result before running the update. Which record should change? Which should be created? Which destination fields should remain untouched?
My acceptance rule is simple: one changed source record should update its intended destination record, one new record should create one destination record, and neither action should overwrite a field the team agreed to maintain only in Shopify. If the selected tool cannot perform that safely, agree a different final-transfer procedure before choosing it.
Maintain a small identifier ledger linking source references to destination records. Ask which identifier the tool actually matches on; do not assume a SKU, email address, displayed order number, and internal record ID are interchangeable. Have the operator show the mapping used for your sample.
For a concrete rehearsal, label a test product SOURCE-P17 in your review sheet and record its destination reference. Change its description in the source, but keep a separately approved Shopify-only merchandising tag in the destination. Add test product SOURCE-P18. After the update, require the new description on P17, the retained tag, and exactly one P18. This is a proposed test fixture, not an account of a client migration. If the tool replaces tags as a complete set, resolve that conflict in the mapping before proceeding.
Third run: prove that retrying is safe
Repeat the unchanged sample using the documented update procedure. The intended result is no additional duplicate records and no unexpected field changes. This is an acceptance target, not a universal promise about migration software.
Save the input file, settings, result log, and before-and-after evidence for each run. If the tool needs special commands or a retained mapping file to recognize existing records, put that requirement in the launch instructions. A retry should be reproducible by the person covering the migration, not dependent on one person's memory.
Historical orders need their own side-effect review
Order history deserves a separate decision about notifications and stock. In Matrixify's order documentation, Send Receipt defaults to FALSE and Inventory Behaviour defaults to bypass, which does not claim inventory. Fulfillment receipts have a separate control. The documentation also notes that a Source value of subscription_contract triggers an order confirmation automatically, with possible exceptions for other source values.
Those details illustrate why “notifications off” needs a specific meaning. For the tool you choose, review customer receipts, fulfillment messages, staff alerts, and any connected automation separately. Shopify's migration guide warns that historical imports can generate staff new-order notifications and explains temporarily disabling them.
Use controlled test identities and check the actual messages received. Compare stock before and after the historical-order sample. Ask the fulfillment owner to verify that old completed orders do not enter today's work queue. Record observed results instead of relying solely on a checkbox label.
Approve the final transfer with an exception list
Before launch, record the time covered by the initial import and decide how changes after that point will be collected. Include edits and cancellations as well as newly created records. Name the system that owns inventory during the transition and the person allowed to approve the final quantities.
Request a result summary separating created, updated, skipped, and failed records wherever the tool exposes them. Investigate each category against the agreed scope. “Skipped” can be intentional, but it needs an explanation; a high success count does not tell you whether your most valuable records arrived correctly.
For public catalog checks after publication, our free store scanner can flag issues such as missing shipping weights and duplicate descriptions. Use it as a supplementary storefront check. Private customer and order reconciliation still belongs in the migration review.
Approve the tool when the sample, updates, retries, and operating handoff meet your written expectations. If a requirement remains unsupported, assign a manual process or change the route before the final move. For help defining and executing that scope, our Shopify services cover migration planning and implementation.