Everything the old store knows
Products, variants, option pricing, customers, the full order history with refunds and tracking, reviews, content and redirects. Reconciled to the cent.
Migration guide
How we move X-Cart 4 and X-Cart 5 stores to Shopify: what the exports and database hold, variants and price modifiers, membership pricing, every old URL form redirected, and a fixed price from $2,500 over six to eight weeks.
Every migration includes the storefront, the apps and your back-office systems, not just the data. Pixel-perfect, a facelift or a complete redesign?

X-Cart stores are usually long-lived and heavily customized. Many still run X-Cart 4, others moved to X-Cart 5 and then met the Symfony rebuild in 5.5 and the new URL scheme in 5.6. Each upgrade has been a project in its own right, which is why owners reach the point of comparing one more upgrade with a move to Shopify. This guide explains how we run an X-Cart to Shopify migration: what the exports contain, what needs direct database work, how the URLs from every X-Cart generation get redirected, and what it costs.
To be fair, X-Cart is flexible and gives you the source code. If your store depends on year, make and model fitment search, weigh that carefully, because on Shopify it comes from an app rather than the core platform.
X-Cart 5’s Catalog, Export page produces separate CSV files for products, categories, classes and attributes, product attribute values and customers. Orders only appear there when the Orders Import add-on is installed, and reviews only with the Product Reviews add-on. Because the store is self-hosted, anything the exports miss we read from the MySQL database directly.
| Data | Source on X-Cart | Moves to Shopify? |
|---|---|---|
| Products with SKU, name, descriptions, price, sale price, stock, weight, images, meta tags | Products CSV (X-Cart 5); product tables in MySQL (X-Cart 4) | Yes. Images are downloaded and rehosted on Shopify before the old server is switched off. |
| Variants with their own SKU, price, stock and image | Product Variants add-on (X-Cart 5, export with attributes on); product variants in the Product Options module (X-Cart 4) | Yes, as Shopify variants. Up to three options per product; the variant ceiling is now 2,048 per product. |
| Classes, global and product-specific attributes | Classes and attributes CSV, product attribute values CSV | Yes. Variant-generating attributes become options; the rest become metafields with definitions, which also drive storefront filters. |
| Categories | Categories CSV | Yes, as collections, with the hierarchy carried in menus. |
| Customers with addresses and membership level | Customers CSV; MySQL for X-Cart 4 | Yes. Membership levels become tags or B2B companies. Newsletter consent is carried from the subscriber data. |
| Passwords | Hashed in the database | No. Shopify cannot use X-Cart password hashes. Customers set a new password from an account invite or use passwordless sign-in. |
| Orders with items, totals, tax, shipping, status and tracking numbers | Orders export (with the add-on), REST API or MySQL | Yes. Real orders with the original number and date, a paid transaction, per-shipment tracking and real refund records. |
| Reviews | Product Reviews add-on export | Yes, into Judge.me or your chosen app. |
| Coupons and gift certificates | Admin and database | Coupons become discount codes; open gift certificate balances become Shopify gift cards. |
| Wholesale prices | Wholesale add-on (X-Cart 5); Wholesale Trading module (X-Cart 4) | Yes, as B2B catalogs with quantity price breaks, or tag-based pricing. See below. |
| Theme, custom modules, content pages | Templates and add-ons | Design is rebuilt. Each module is mapped to a Shopify app or native feature, or retired. Content pages move by hand. |
Two export settings matter. Products must be exported with global and class attributes, or all attributes, because the No attributes option drops variants from the file entirely. And public files should be exported as URLs rather than local paths, so we can fetch every product image from the live server. Old X-Cart descriptions also tend to carry inline styles and layout tables from past templates, which we strip so the text picks up the new theme’s styling.
X-Cart has changed its URL scheme more than once, and older forms often stay in Google’s index and in backlinks long after a store has moved on. We cover all of them.
/product.php?productid=16133 for products and /home.php?cat=248 for categories. The numeric ID is the join key./Product-Name.html for products, plus the entries in X-Cart 4’s clean URL history, which records earlier values that still resolve./cart.php?target=product&product_id=31, with the same pattern for categories using category_id./product-name or /product-name.html for products, and categories as /parent/category/ or /category.html, depending on the store’s configuration. Non-default languages add a prefix such as /de/./product/clean-url, /category/clean-url, /brand/clean-url and /page/clean-url.Shopify uses /products/handle and /collections/handle. We build the redirect map from the clean URL records in the database, a crawl of the live site and the Search Console page list. The dynamic product.php and cart.php forms carry the ID in a query string, so each one is mapped by that ID rather than by name. Every redirect is requested against the live domain before launch.
Cart2Cart, an RDA partner, and LitExtension both list X-Cart as a source for Shopify, covering products, categories, customers, orders, reviews, coupons and manufacturers, and both advertise password and URL options of their own. They are fine for a first pass on products and customers. Neither carries tracking numbers on shipped orders, refunds tend to arrive as plain paid orders, and redirects are generated from guessed slugs rather than the URLs Google actually holds. We finish those parts ourselves. Because X-Cart is self-hosted, we can also query MySQL directly for anything an export or tool misses: X-Cart 4 option data, clean URL history, membership prices and custom module tables.
X-Cart to Shopify migrations start from $2,500 for stores under 500 products and 5,000 orders ($3,500 for larger stores), typically six to eight weeks from kickoff to launch. Larger catalogs, multi-vendor stores and stores with ERP or custom integrations are quoted as a fixed price after the audit. Terms are 50 percent to begin and 50 percent once the store is live and you are fully satisfied with the figures.
X-Cart 4 and X-Cart 5 share a name and little else, so we treat them differently. X-Cart 4, in its GOLD, PLATINUM and PRO editions, keeps options in the Product Options module, where each option group, stored as a class, is either a price modifier, a product variant or a custom text field. Its export tools are limited, so we usually work from the database. X-Cart 5 has attributes organized by scope (global, class and product-specific), a proper CSV export and a REST API module with read-only or read/write keys covering products, orders and profiles. X-Cart 5 also offers two ways to model versions of a product: Product Variants, where one product holds its combinations, and Product Variations, where each version is a separate catalog item grouped with its siblings. Variations usually need to be merged into a single Shopify product with variants, and their old URLs redirected to it.
Both generations let an option change the price or weight without being a stocked variant, for example hardcover adding a fixed amount to a book or gift wrap adding a percentage. Shopify has no native price modifier. We handle them in one of three ways: generate real variants with the modified prices built in, when the combination count fits inside three options; use a product options app for add-ons such as engraving or gift wrap; or, for custom text fields, use line item properties. On X-Cart 5, variants override modifiers, so we check which one each product actually uses before choosing.
X-Cart’s wholesale features price by quantity and membership level, and can set a minimum purchase quantity per level. Shopify B2B now runs on every plan, with up to three active catalogs on Basic, Grow and Advanced and unlimited catalogs on Shopify Plus. Stores with a few membership levels map cleanly onto catalogs with quantity price breaks. Stores with many levels or per-customer pricing need Plus, or a tag-based approach with an app. The membership assignments come from the customer data, so no trade customer loses their pricing at launch.
We inventory every installed module, including abandoned third-party ones and in-house code, and label each as native on Shopify, replaced by an app, or retired. Live carrier rates deserve an early decision, because Shopify’s third-party carrier-calculated shipping needs Advanced or Plus, or Grow on annual billing. X-Cart’s Multi-Vendor add-on, the core of X-Cart Marketplace, charges vendors commission and can run vendors as separate shops. Shopify has no native marketplace, so these stores need a marketplace app and a design decision on commissions and payouts, which is why we quote them after the audit.
A reconciliation ledger from source counts to live counts for products, variants, customers and orders, with every exclusion named; the redirect verification list covering each X-Cart URL form with the status each returned; the attribute and metafield mapping; the membership and wholesale mapping; the module inventory with the decision on each; the image rehost log; and a recorded walkthrough of the Shopify admin for your team.
Yes. X-Cart 4 stores are usually migrated from the database because the export tools are limited, while X-Cart 5 stores use the CSV exports and REST API plus the database for anything they miss. Both end in the same Shopify structure.
Yes. Orders import as real Shopify orders with the original numbers, dates, totals, refunds and tracking numbers, and every order is reconciled against the source before launch.
Every URL form the store has used is redirected, including X-Cart 4 product.php links, X-Cart 5 cart.php links, clean URLs with or without .html and the X-Cart 5.6 prefixed URLs. Each redirect is tested against the live domain.
No. Shopify cannot use X-Cart password hashes. Customer accounts, addresses and order history move across, and customers set a new password from an invite or sign in without one.
From 2,500 dollars for stores under 500 products and 5,000 orders (3,500 dollars for larger stores), typically six to eight weeks. Larger, multi-vendor and integrated stores get a fixed price after the audit, paid 50 percent to begin and 50 percent once the store is live and you are fully satisfied with the figures.
Start with the migration survey. For another self-hosted PHP platform, see the Magento guide, and for heavily customized stores the custom-build store guide.
More than the data
Getting the records out of X-Cart is the part software can do on its own, so it is the part most providers sell. The storefront your customers see, the apps that run the store and the systems behind it are the rest of the work, and where a data-only migration hands the problem back to you. All four are in scope here.
Products, variants, option pricing, customers, the full order history with refunds and tracking, reviews, content and redirects. Reconciled to the cent.
Rebuilt exactly as it is, given a facelift, or redesigned completely. Quoted inside the migration, not as a second project.
Reviews, search, subscriptions, loyalty, bundles, email. Matched to a Shopify equivalent, dropped where the platform now does it, or rebuilt as a custom app.
ERP, CRM, PIM, 3PL, POS, accounting and EDI, reconnected and tested before cutover. Nobody rekeys orders on launch day.
The first question we ask
Your storefront does not have to come across unchanged, and it does not have to be thrown away either. We quote whichever route you pick inside the migration.
Indistinguishable from the old store, down to the spacing, but rebuilt on a current Shopify theme so it is faster and maintainable underneath.
The same structure, better executed: typography, spacing, color, photography, product pages and navigation. The shape your customers know stays put.
A new storefront, designed as a prototype you click through before a line of Liquid is written, then built on Horizon.
Included with every migration
A X-Cart to Shopify migration is not finished when the data lands. Every migration we deliver includes an SEO and growth evaluation once Google has re-crawled the new store and the first real analytics exist: how it is indexed, where it ranks and who outranks it, a technical tag audit, speed, product copy, and quick wins in the order to do them. Here is one we delivered, based on a real engagement.
Other platforms
Tell us about your store in ten minutes. We come back within one business day with an honest assessment, a recommended track and a fixed price.