Migration guide

X-Cart to Shopify

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 to Shopify: moving a self-hosted PHP store without losing its history

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.

Why stores leave X-Cart

  • Every upgrade is a rebuild. X-Cart 5.5 became a Symfony application with a new file structure, and X-Cart 5.6 moved to Symfony 6.4, PHP 8.4 and a fixed URL structure. Custom modules and templates rarely survive these jumps without rework.
  • Hosting and security are yours. On a self-hosted install, PHP versions, server patches, PCI scope and backups all land on your team or your developer.
  • The product has changed direction. X-Cart now presents itself as an automotive ecommerce platform for auto parts businesses, with fitment data and distributor integrations at the center. That suits parts sellers, and it leaves general retailers asking where the roadmap is heading for them.
  • A shrinking developer and app pool. Finding people who maintain X-Cart 4 code, or X-Cart 5 modules written by a vendor that no longer exists, gets harder every year. Shopify’s app ecosystem and developer market are far larger.
  • Checkout. Shop Pay, accelerated wallets and a hosted checkout that Shopify keeps compliant replace a checkout you have to maintain yourself.

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.

What migrates from X-Cart to Shopify

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.

DataSource on X-CartMoves to Shopify?
Products with SKU, name, descriptions, price, sale price, stock, weight, images, meta tagsProducts 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 imageProduct 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 attributesClasses and attributes CSV, product attribute values CSVYes. Variant-generating attributes become options; the rest become metafields with definitions, which also drive storefront filters.
CategoriesCategories CSVYes, as collections, with the hierarchy carried in menus.
Customers with addresses and membership levelCustomers CSV; MySQL for X-Cart 4Yes. Membership levels become tags or B2B companies. Newsletter consent is carried from the subscriber data.
PasswordsHashed in the databaseNo. 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 numbersOrders export (with the add-on), REST API or MySQLYes. Real orders with the original number and date, a paid transaction, per-shipment tracking and real refund records.
ReviewsProduct Reviews add-on exportYes, into Judge.me or your chosen app.
Coupons and gift certificatesAdmin and databaseCoupons become discount codes; open gift certificate balances become Shopify gift cards.
Wholesale pricesWholesale 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 pagesTemplates and add-onsDesign 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 URLs and redirects

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.

  • X-Cart 4 dynamic URLs: /product.php?productid=16133 for products and /home.php?cat=248 for categories. The numeric ID is the join key.
  • X-Cart 4 clean URLs: /Product-Name.html for products, plus the entries in X-Cart 4’s clean URL history, which records earlier values that still resolve.
  • X-Cart 5 dynamic URLs: /cart.php?target=product&product_id=31, with the same pattern for categories using category_id.
  • X-Cart 5.4 and 5.5 clean URLs: /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/.
  • X-Cart 5.6 URLs: fixed prefixes, /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.

Tools

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.

How we run it

  1. Audit. X-Cart version, add-ons and custom modules, database access, export samples, URL crawl, option and attribute analysis, integrations. The result is a fixed-price scope.
  2. Build in a free Shopify development store. As a Shopify Plus Partner we build there, so you pay Shopify nothing until launch. Theme, checkout, payments, shipping and taxes are configured.
  3. Catalog. Products, variants, attributes as metafields, collections, images and SEO fields.
  4. Customers and membership levels. Addresses, consent, tags or B2B companies, tax-exempt flags.
  5. Orders. Original numbers, dates, totals, refunds and tracking numbers.
  6. Redirects for every URL generation the store has used.
  7. Sample, then full import. A sample of each entity for your sign-off, then the full run with a reconciliation of counts and totals against the source.
  8. Cutover with a delta sync of the orders and customers created during the build, then DNS.
  9. Post-launch SEO evaluation. Once Google has re-crawled the store and the first real analytics exist, we review the 404 log, Search Console coverage and rankings, and fix what they show.

Cost and timeline

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 versus X-Cart 5: two different migrations

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.

Option price modifiers

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.

Membership levels and wholesale pricing

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.

Custom modules and multi-vendor stores

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.

What you get at handover

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.

Questions we settle in the survey

  • Which X-Cart version and edition you run, and whether we can have database and REST API access.
  • Which add-ons and custom modules the store depends on, and who maintains them.
  • Whether products use variants, variations or price modifiers, and how many combinations the largest products have.
  • How many membership levels exist and whether any customers need net terms or tax exemption.
  • Whether the store has run on more than one URL scheme over the years.

Frequently asked questions

Can you migrate X-Cart 4 as well as X-Cart 5?

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.

Will our X-Cart order history come across?

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.

What happens to our old X-Cart URLs?

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.

Can customers keep their X-Cart passwords?

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.

What does an X-Cart to Shopify migration cost?

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

A X-Cart migration is four jobs. We do all four.

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.

01 · Data

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.

  • Sample first
  • Reconciled
  • Audited
02 · Storefront

The front end, designed and built

Rebuilt exactly as it is, given a facelift, or redesigned completely. Quoted inside the migration, not as a second project.

  • Pixel-perfect
  • Facelift
  • Redesign
03 · Apps

Every app accounted for

Reviews, search, subscriptions, loyalty, bundles, email. Matched to a Shopify equivalent, dropped where the platform now does it, or rebuilt as a custom app.

  • Klaviyo
  • Reviews
  • Subscriptions
  • Custom apps
04 · Systems

The back office keeps working

ERP, CRM, PIM, 3PL, POS, accounting and EDI, reconnected and tested before cutover. Nobody rekeys orders on launch day.

  • ERP
  • CRM
  • 3PL
  • POS
  • EDI

The first question we ask

Pixel-perfect, a facelift, or a complete redesign?

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.

Route 01

Pixel-perfect

Indistinguishable from the old store, down to the spacing, but rebuilt on a current Shopify theme so it is faster and maintainable underneath.

  • Same look
  • New foundations
Route 02

A facelift

The same structure, better executed: typography, spacing, color, photography, product pages and navigation. The shape your customers know stays put.

  • Keeps the map
  • Modern build
Route 03

A complete redesign

A new storefront, designed as a prototype you click through before a line of Liquid is written, then built on Horizon.

  • Prototype first
  • Horizon
  • Upgradeable

Included with every migration

After go-live, we audit the store again.

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.

Ready when you are.

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.