FCHubFCHub.co

CartShift Overview

WooCommerce to FluentCart migration tool. Products, customers, orders, subscriptions, and coupons — mapped and migrated with full ID tracking and rollback support.

CartShift is a one-time migration tool that moves your WooCommerce store data into FluentCart. Products, customers, orders, subscriptions, and coupons — everything gets mapped to FluentCart's data model and migrated in controlled batches with full progress tracking.

I built this to handle real-world WooCommerce stores. That means dealing with variable products, guest customers, HPOS order storage, WC Subscriptions billing cycles, and all the edge cases that come with stores that have been running for years.

One-time migration tool

This plugin is designed for a single migration. Run it once, verify your data, then deactivate and remove it. It is not a sync tool and does not keep WooCommerce and FluentCart in sync after migration.

What Gets Migrated

Products

Simple and variable products with all variations, prices, descriptions, images, SKUs, stock levels, and categories. Downloadable and virtual product types are preserved.

Customers

Registered WordPress customers and guest customers extracted from order billing data. Billing and shipping addresses are migrated as FluentCart customer addresses.

Orders

Full order history with line items, billing and shipping addresses, payment transactions, refunds, taxes, shipping costs, and discount totals. HPOS and legacy storage supported.

Subscriptions

WC Subscriptions data mapped to FluentCart subscriptions. Billing intervals, trial periods, signup fees, payment counts, and all subscription dates preserved.

Coupons

Discount codes with type conversion (percentage and fixed), usage limits, minimum/maximum amounts, expiry dates, and free shipping flags.

Categories

WooCommerce product categories migrated to FluentCart's product-categories taxonomy with full parent-child hierarchy preserved.

Key Features

Preflight Checks

Before any data moves, the migrator validates your environment. WooCommerce active, FluentCart active, PHP memory adequate, and existing FluentCart data detected. No surprises mid-migration.

Batch Processing

Records are processed in batches of 50 to keep memory usage low and avoid timeouts. Each batch updates progress so you always know where you stand.

ID Mapping

Every WooCommerce record is linked to its FluentCart counterpart in the cartshift_id_map table. Orders reference the correct customers. Line items reference the correct products. Nothing gets orphaned.

Dry Run Support

Run the entire migration in dry-run mode first. Every record is validated and logged without writing anything to FluentCart. Review the log, fix any issues, then run the real migration.

Progress Tracking

Real-time progress for each entity type: total records, processed, skipped, and errors. Poll the progress endpoint or watch the admin UI update as batches complete.

Cancellation

Cancel a running migration at any time. The migrator checks for cancellation between every record, so it stops cleanly without leaving partial data.

Rollback

Made a mistake? Rollback deletes all FluentCart records created by the migration using the ID map. Reverse order ensures referential integrity: subscriptions first, then orders, then customers, then products.

Migration Log

Every record processed gets a log entry with status (success, skipped, error) and a descriptive message. Paginated log endpoint for reviewing what happened.

Requirements

RequirementMinimum
WordPress6.5+
PHP8.3+
WooCommerceActive (any recent version)
FluentCartActive
WC SubscriptionsOptional (required only for subscription migration)

PHP memory

The migrator recommends at least 256 MB of PHP memory. Batch processing keeps memory usage manageable, but large stores with complex products benefit from higher limits. The preflight check will warn you if your memory limit is below the recommendation.

How It Works

The migration follows a strict dependency order:

  1. Categories are migrated first (as part of the products step)
  2. Products come next, with variations and product details
  3. Customers — both registered users and guests extracted from orders
  4. Coupons are migrated independently
  5. Orders come after products and customers so line items and customer references resolve correctly
  6. Subscriptions come last, referencing orders, products, and customers

Each entity type has a dedicated migrator class (ProductMigrator, CustomerMigrator, etc.) paired with a mapper class (ProductMapper, CustomerMapper, etc.) that handles the data transformation from WooCommerce's schema to FluentCart's schema.

The StatusMapper translates between the two platforms' status systems — order statuses, payment statuses, subscription states, billing intervals, and coupon types all get mapped to their FluentCart equivalents.

REST API

The migrator exposes a REST API under the cartshift/v1 namespace. All endpoints require manage_options capability (WordPress administrator).

EndpointMethodDescription
/cartshift/v1/preflightGETRun preflight environment checks
/cartshift/v1/countsGETGet WooCommerce entity counts
/cartshift/v1/migratePOSTStart the migration
/cartshift/v1/progressGETGet current migration progress
/cartshift/v1/cancelPOSTCancel a running migration
/cartshift/v1/rollbackPOSTRollback migrated data
/cartshift/v1/logGETRetrieve paginated migration log

The admin UI at Tools > CartShift uses these same endpoints. You can also call them directly with any REST client for automation or debugging.

Next Steps

Ready to migrate? Start with Installation to get the plugin set up, then follow the Migration Guide for a complete step-by-step walkthrough.

On this page