J2Commerce 6 Migrator
Free
$0.00

Your Old Store Walks Into Your New One Like It Always Lived There

The component that actually knows where your products, orders, customers, addresses, coupons, taxes, and images need to land. Plug in. Press Migrate. Stop sweating.

All
Catalog, orders, customers, images, menus, templates — one tool
In Box
J2Store 4 / J2Commerce 4 adapter included
100%
Verification report after every run — receipts for everything

Migration. The Word That Makes Store Owners Sweat.

You've been putting this off, haven't you. The catalog you've built over years. The thousands of orders. The customers, addresses, saved carts, the discount codes you handed out last Black Friday. All of it lives in the old place. All of it has to end up in the new place. And the little voice in your head has been whispering “what if it breaks” for six months.

That's not migration. That's a hostage situation, and your data is the hostage. The longer you wait, the more data you have to move, the higher the stakes, the worse the eventual scramble. The store down the street already moved. They're outrunning you while you stare at a phpMyAdmin window like it's going to migrate itself.

Stop Being Held Hostage By Your Own Database

Not a CSV exporter. Not a generic data importer that asks you to map 80 fields by hand. An actual migration engine that knows where everything goes.

One-Click Dashboard

Open the component. See every tier. Press Start. Watch the progress badge tick through. No console commands required.

Tier-Based Engine

Catalog → customers → orders → images → menus → templates. Each phase finishes before the next starts. A bad row doesn't blow up the entire run.

Pre-Flight Analyzer

Before a single row moves, the analyzer scans your source database and tells you what's coming, what's risky, and what needs your attention. You see the report. You decide.

ID Mapping That Doesn't Break References

Source ID 4827 becomes destination ID 12. The map gets stored. Orders still reference the right products. Customers still own the right addresses. The thing nobody else gets right.

Image Migration That Actually Works

Discovers every product image. Copies the file. Rewrites the reference. Your three years of product photography land in the new store still attached to the right product. No gray boxes.

Menu Migration — SEO Stays Alive

Your Joomla menus that pointed at old store views get rewritten to point at the new ones. Your URLs stay alive. Your Google rank doesn't get nuked.

CSS & Template Migrator

Your custom CSS and custom templates from the old store get translated and ported across. Your custom look survives the move. Your designer doesn't get a 2 a.m. phone call.

Akeeba Backup On Autopilot

One toggle. The migrator asks Akeeba to take a fresh backup before it touches a row. Your safety net is automatic. If anything goes sideways, you're already covered.

Verification — Receipts For Everything

Products in: 2,847. Products out: 2,847. Orders in: 18,219. Orders out: 18,219. One screen tells you “you're whole.” The difference between a confident go-live and a panicked one is having receipts.

Row-Level Error Log

Anything that didn't import lands here with source row, destination row, and actual error message. You debug surgically. You stop grepping log files at midnight.

Runs History — Forever

Every migration run logged. Re-run, audit, compare. Your migration history becomes a paper trail you can show your accountant, your partner, or your future self.

CLI Commands For Massive Stores

Migrating a million-product catalog from a laptop browser is a recipe for a timeout. Run it from the shell instead. No browser babysitting. No spinner forever.

Stores That Stopped Procrastinating

Lighting and home decor importer. By 2024 the catalog was 8,000 products, 30,000 variant combinations, 90,000 orders, 4 GB of product photography. Two manual export-import attempts ended in tears. A “migration consultant” quoted $12,000 — hung up. Installed the migrator. Pre-flight ran in four minutes. Pressed Migrate during lunch. Catalog moved by 1pm. Orders by 2pm. Customers by 2:15. Images by 4pm. Verification: 100% match. Total cost: zero. Total downtime: zero. Two years of procrastination resolved in an afternoon. You can imagine the cuss words.

Coffee subscription business. 4,200 active subscribers, each with billing schedules, address history, payment tokens, skip-month records, and pause/resume logs. Migrating without breaking a single auto-charge was non-negotiable. The adapter knew where subscription records lived in the source. The ID map preserved every subscriber-to-billing-schedule link. The verifier confirmed all 4,200 matched. The first auto-charge cycle after migration ran clean. Not one chargeback. Not one customer service ticket.

Industrial parts distributor. 1,200 wholesale accounts, each on a customer-group pricing tier. Different prices for the same products depending on who's logged in — the messiest data model in the catalog. Conflict mode set to “preserve existing.” Customer groups migrated first. Customer-to-group assignments second. Group-specific prices third. Verifier confirmed every account landed in the right pricing tier. The first wholesale customer to log into the new store saw their negotiated prices exactly as they'd been negotiated. No support call. No “is this right?” email. Just business as usual on a new platform.

Bespoke gift shop. The previous owner had hired a designer to do a custom template with 800 lines of custom CSS that overrode everything. The owner was certain that part wouldn't survive the move. CSS migrator translated the class names. Template-code transformer ported the layout. Sub-template migrator handled the per-product overrides. The new store opened with the same custom design the customers were used to. The owner kept staring at the screen waiting for it to look wrong. It never did.

Install It. Press Migrate. Have Dinner.

You can keep telling yourself the migration is too risky, too expensive, too disruptive. You can keep limping along on a store platform that's slowly bleeding you. Or you can install the migrator, point it at your old database, press Start, and have your new store running by dinner.

Translated In The Following Languages

Arabic Unitag (ar-AA), Chinese, Traditional (zh-TW), Danish (da-DK), Dutch (nl-NL), English (en-GB), English, USA (en-US), Finnish (fi-FI), French (fr-FR), German (de-DE), Greek (el-GR), Hebrew (he-IL), Italian (it-IT), Japanese (ja-JP), Norwegian Bokmål (nb-NO), Persian Farsi (fa-IR), Polish (pl-PL), Portuguese, Brazil (pt-BR), Portuguese, Portugal (pt-PT), Russian (ru-RU), Spanish (es-ES), Swedish (sv-SE), Turkish (tr-TR)


  • Developer J2Commerce
  • Extension Type Migration, Component
  • J2Commerce Version 6.x
  • Joomla Version 6.x
Language Translations
Arabic UnitagArabic Unitag
Chinese, TraditionalChinese, Traditional
DanishDanish
DutchDutch
EnglishEnglish
English, USAEnglish, USA
FinnishFinnish
FrenchFrench
GermanGerman
GreekGreek
HebrewHebrew
ItalianItalian
JapaneseJapanese
Norwegian BokmålNorwegian Bokmål
Persian FarsiPersian Farsi
PolishPolish
Portuguese, BrazilPortuguese, Brazil
Portuguese, PortugalPortuguese, Portugal
RussianRussian
SpanishSpanish
SwedishSwedish
TurkishTurkish

Improvement Require Super User permissions for the Access Control step and tool

Improvement Require Users admin permission for the Shopware customer groups tool

Improvement Require Users permissions for the Shopware customer import

Improvement Require Users delete permission for the Shopware migration reset

Improvement Require Users permissions for the onboarding clean start when it resets user data

Fix Show translated labels for the resync conflict-mode options instead of raw language keys

Fix Show the menu migration empty state with its translated title, text and button

New Feature Add the missing labels for adapter status, run status, menu actions and the configuration step

Improvement Translate 226 strings that were missing from 20 locales

Improvement Number the placeholders in five multi-value strings so translations can reorder them

Fix Fix the Sync Store screen failing to load its settings for the page scripts

Improvement Resolve the event dispatcher from the DI container across the component

Improvement Apply the template tools' administrator check in the templates model as well

New Feature Register the remaining Tools screen labels used by its report and summary

New Feature Keep every migrated customer on the same user ID as the source site

New Feature Show user ID conflicts in a modal so each one can keep a new ID or overwrite

Improvement Move a matched or displaced account and everything that references its user ID

Improvement Never move a Super User account or the account running the migration

Improvement End the sessions and remove the passkeys of any account whose user ID changes

Improvement Never reuse a user ID that rows from a deleted account still reference

Improvement Number accounts that cannot keep their ID from a block above the source range

Fix Fall back to bootstrap5 for a menu subtemplate nothing on the site can render, instead of a fatal product page

Improvement Hold both core-tier routes for contacts, menus, modules and redirects to the same component rights as their tools

Improvement Map any migrated item whose access level has no migrated match to the most restrictive level and report it

New Feature Migrate Joomla menus, menu types and site modules with their menu assignments

New Feature Migrate contacts and contact categories

New Feature Convert sh404SEF URLs and aliases into Joomla redirects so old links keep working

Fix Copy custom field values, which a table with no primary key left empty

Fix Point content tags at the migrated articles instead of the source article ids

Fix Keep every row of composite-key link tables such as product filters when paging

Improvement Recreate item-level asset rows through the item tiers instead of copying source ones

Improvement Require a password reset for accounts whose source password cannot be verified here

Improvement Resolve a migrated menu item's component from its rewritten link

Improvement Hold the menus, modules, redirects and contacts tools to their own component's rights

New Feature CLI migrate: separate source database (--mode B/C), --tiles run order and --source-path

Fix Run the Joomla article step from the CLI

Fix Keep contacts whose linked user no longer exists, clearing the link instead

Fix Remap J2Store product permalinks and category filters to their J2Commerce targets

Fix Rewrite the additional-images column using the J2Commerce product image key

Fix Apply the PHP and Joomla version floors the package installer only declared

Improvement Raise the declared PHP floor to 8.3, the version Joomla 6 itself requires

Improvement Move the package installer to the Joomla 6 installer-script interface

Fix Stop the package installer emitting a deprecation notice on every install

Improvement State rollback support explicitly instead of leaving it implied

Update Name the Joomla requirement when installing on a release that is too old

Fix Write a rebuilt image under a name carrying exactly one extension

Fix Read an image reference's type from one canonical extension, so a query string cannot disagree with it

Fix Migrate an SVG whose URL carries a query string, which was previously refused

Fix Apply the allowed-extensions setting to an image reference given as a URL, not only a stored path

Fix Accept gzip bytes only for a .svgz reference, not for a .svg

Update Records why narrowing the SSRF guard opt-in to the source site is not yet possible

Fix Migrate articles and categories from a Joomla 3 source without expiring them on their publish date

Fix Drop source columns the target schema does not have, so a Joomla 3 row no longer fails to insert

Fix Skip the workflow copy when the source has no workflow tables

Fix Remap the legacy Bootstrap 2, 3 and 4 subtemplate names on migrated menu items

Update Applies to a Joomla 3 or J2Store 3 source; a Joomla 4+ source is unaffected

Fix Write additional image, thumbnail and tiny image JSON as an index-keyed object, matching the core component

Fix Treat a protocol-relative image URL as remote instead of a site-relative path

Fix Check a downloaded image's type from its bytes and cap its pixel count before resizing

Fix Refuse a downloaded image the temporary file could not be written for

Update Records what still blocks reusing the core component's own image guard and downloader

Fix Keep tag filters on migrated brand and deal menu items (tag alias to tag id)

New Feature Repair Menu Links restores the tag filter on already-migrated tag menus

Fix Fix Detect Custom Tables report listing no tables when tables exist

Fix Fix Detect Template Overrides report listing nothing

Fix Fix command-line audit printing empty tables

Fix Show Note and Default Page column labels on the migrated menus screen

New Feature Add an accessible label to the migrated menu Note field

Update Requires the j2commerce4 adapter 6.2.1 for the matching data-tile fixes

Fix A dependent step stays locked while a completed step has an unacknowledged ID reassignment, and Run All says so instead of skipping in silence

Fix A preview of a Tools step is reported as a preview rather than as a completed step

Fix A dry run changes no migrated data: no id map row, no category, no account and no completion marker, in the Joomla core lane as in every other tier

Fix Dry-run all and the per-tile Dry-run now run a real preview in report mode and record a Dry Run history row

Fix A sync no longer counts every row a second time as skipped, so processed equals the source count

Fix A user left alone under skip mode is still mapped, so profiles and notes attached to it migrate; the run reports how many were skipped

Fix When the source is the site's own database the Joomla core tiers map rows onto themselves instead of cloning categories, articles and notes

Improvement Hold finishing a run row to the same permission as the actions that write migration data

Fix A source address is screened against all of its DNS answers, not just the first

Fix Apply J2Commerce defaults for dashboard statuses, downloads folder and badges

Fix Clear the id map when a table is reset, so an empty table no longer reads Synced

Fix Count only migration tiles for progress, so a finished run reads as finished

Fix Drop a profile or note whose owner has no mapped target account

Fix Every resync entity group now passes the same backup gate, schema check and source interlock, including Users and Content

Fix Explain the handshake failure when the source server does not offer TLS

Fix Fix inserted rows being counted as skipped and left out of the id map

Fix Fix Order Infos and Order Breakdown reporting Partial 0 of N after a completed run

Fix Hold the tile_completed marker back until the tier accounts for every source row

Fix Honour Skip on a re-run so an existing account is left completely alone

Fix Honour the category selection when migrating content

Fix Keep a literal #__ in migrated content from being rewritten to the table prefix

Fix Keep one-time tools marked done instead of reverting to Pending on reload

Fix Keep this site's own API token where the source also carries one

Fix Let the SSL/TLS switch turn off for the direct database mode as well

Fix Map the group ids inside copied permission rules instead of reusing source ids

Fix Match migrated view levels to this site's own instead of reusing source ids

Fix Migrate images whose stored path starts with a slash

Fix Rebuild the user group tree after migrating it, as the other tree copies do

Fix Remote image fetches re-check each redirect hop instead of following it blindly

Fix Report real source and target row counts in the verify command

Fix Resolve every user group to a real target group before granting membership

Fix Rewrite leftover J2Store language keys shown as raw text on screen

Fix Show & instead of & in two admin labels

Fix Stop a blank download status list switching every customer download off

Fix Stop a resync wiping profile keys the source has no opinion about

Fix Stop articles being filed into a new category named after a number

Fix Stop the migrator running silently wrong on the PDO MySQL driver

Fix Stop the tools view reporting a tile Synced when only part of its rows migrated

New Feature Add --include-tools to run the held-back tiles in the same pass

New Feature Add a tool that rewrites leftover J2Store keys on a store migrated earlier

New Feature Change detection by watermark or row hash, resumable — a stopped run picks up where it left off instead of rescanning

New Feature Delta Resync: re-run a migration against a source store that kept trading, and move only what changed

New Feature Dry-run mode: see the would-insert / would-update / would-conflict table and a CSV artifact before writing anything

New Feature Fall back to the configured image folder when a source image is not at the root

New Feature Headless `j2commerce:migrator:resync` CLI command so large stores never run a six-figure delta through admin AJAX

New Feature Log every group that could not be mapped, instead of guessing one

New Feature Mandatory backup gate before any resync writes, with a single explicit headless override

New Feature New Console plugin so the migrator's CLI commands appear in `joomla list`

New Feature Payment token copy for J2Commerce 4 sources, off by default

New Feature Pin every mapped tier to the tile the layout puts on it

New Feature Pin the parameter-type return value and the held-back tier list against a silent drift

New Feature Privileged usergroup membership is withheld by default and every grant or withhold is recorded in the run report

New Feature Resync batch size and default conflict mode are configurable in component options

New Feature Resync wizard in the admin, with per-entity-group conflict modes (skip, overwrite, merge, report, newest-wins)

New Feature Resync writes go straight to the tables, so a delta never re-fires order events, customer emails or stock adjustments

New Feature Source Site URL is held to public addresses by default, with an explicit opt-in for local and LAN migrations

New Feature Source Site URL setting so product images can be fetched over HTTP when source files are not on this server

Improvement A command-line run that names no tier now runs the data tiers only

Improvement Align the console plugin and the J2Commerce 4 adapter versions with the component

Improvement Connection wording no longer assumes the source store is J2Store

Improvement One shared guard now decides every outbound fetch, replacing three separate copies

Improvement Rename the connection switch to Use SSL/TLS and add help text

Improvement Repaint a tile carrying an older marker at its real partial progress instead of 100%

Improvement Row-write primitives moved into a shared trait, so adapters reuse the engine instead of duplicating it

Improvement Separate a row matched onto an existing record from a row that was simply skipped

Improvement Tell the tools view which tiers keep no idmap accounting, so their row count is not overwritten with zero

Improvement Trust the completion marker for those tiers only when the current session has no run figures of its own

Improvement Verification now covers the resync path and reports per-entity results

Improvement Adapters that cannot count their source rows keep the previous trust-the-marker behaviour

Improvement An interrupted run on such a tile still reports Partial rather than a false Synced

Update Requires Joomla 6.x and J2Commerce 6.x. Package installs the component plus the J2Commerce 4 adapter and Console plugins

Fix PR928 conflict handling, natural-key matching and an authorization sweep

Fix PR929 close the menu-write authorization gaps and stop the review screen wiping languages

Fix PR930 restore in-place menu items from a recorded link instead of guessing

Fix PR979 diskless report exports, full locale sync

Fix PR984 close the carried-forward authorization and disclosure gaps

Fix PR994 encrypt the source-store connection by default

Fix PR1003 retire the J2Store 4 adapter

Fix PR1004 migrate the store template setting to a template that exists

Fix PR1006 stop packaging local tooling files into the component zip

Fix PR1007 make the artifacts download_token migration re-runnable

Fix PR1008 move migrated credentials out of the export surface, repair the WordPress verifier

Fix PR1012 carry migrated passwords into Joomla's own format

Fix PR1028 retire the interim credential store

Fix PR1033 complete the shipped locale set

Fix Fix migration stopping early with holes on large tables — the skip-join now paginates the raw source before filtering, so every order, cart, and history row migrates

Fix Fix batched ID-map writes silently dropping rows on an InnoDB deadlock — add a transient-error retry with backoff

Fix Fix table-name resolution corrupting names whose body contains the DB prefix (e.g. prefix commerce_ turned j2commerce_weights into j2weights)

Fix Fix Reset Migration ID Map and the other destructive tools — the typed-confirmation phrase is now sent to the server and the prompt states exactly what to type

Improvement Keep the status summary bar as the last item so tool cards render above it instead of hidden below

Fix

Improvement Widen migration coverage for shortcode-only stores

Improvement Store-settings fix, easycheckout menus, diagnosable tools

Improvement Robust category migration + help URL [version bumped]

Improvement Sanitize legacy-encoded config values so Migrate Store Settings doesn't error [version bumped]

Fix Reset Migration ID Map no longer reports a false error

New Feature Configure Connection link to all adapters

Fix

Fix

New Feature Encrypt stored Mode B/C source-database passwords at rest (AES-256-CBC)

New Feature Add Setup Guide onboarding wizard for first-time migration setup

New Feature Add connection probe-table validation before a migration run

Fix Complete db_password_encrypted schema (install SQL + 6.0.0 update SQL)

Improvement Rebase local feature work onto 6.0.8 base

Update Keeps repo translations, Mode B connection fix, and Linux Akeeba field-case fix

Update Requires Joomla 6.x + J2Commerce 6.x

Fix

Fix Akeeba field types load on Linux

Improvement Updated help links

Improvement Reliable Mode B connection

New Feature Images tile progress

Fix move HikaShop tile layout from component into HikaShop plugin

New Feature support for 19 more languages

Fix Fixed wrong package inclusion

New Feature Update server for automatic updates

New Feature J2Commerce v6 and Joomla 6 support

The J2Store 4 / J2Commerce 4 Adapter Is Already In The Truck

This is the one you came here for. If your store is on J2Store 4 or J2Commerce 4 right now, you already have the moving truck loaded — it shipped in the same package as the migrator itself.

The adapter knows the source layout cold. Products, variants, orders, order items, customers, addresses, coupons, vouchers, taxes, geozones, shipping methods, payment methods, custom fields, downloads, subscriptions — every table you care about has a mapped path into the new store.

  • You don't write column mappings
  • You don't translate primary keys
  • You don't try to figure out where variant options live in the new schema
  • The adapter handles all of it. You watch the dashboard turn green.

The hardest part of any migration is the source-to-destination map, and that map is already drawn for the two source platforms most existing customers are on. The work somebody else would charge you four figures to do — the migrator does it before lunch.

Tier-Based Migration That Doesn't Crash When One Row Misbehaves

Most generic “import everything in one transaction” tools die the second they hit a single bad row. Half your catalog made it, half didn't, and the half that didn't is the half you care about most. You roll back. You panic. You try again. Same result.

This migrator works in tiers, and inside each tier, in batches. A bad row gets logged, the batch finishes, the tier moves on. At the end you have a list of every problem child with exactly what went wrong. You fix those. You re-run the tier.

The phrase you want at 11 p.m. on go-live night is “the rest finished, here's the list of 3 rows to look at” — not “everything failed, start over.”

Verification After Every Run

The migration finishes. Now what? Now you need to trust that everything came across. Not believe — trust, with evidence.

The verification service compares source row counts to destination row counts for every entity. Products in: 2,847. Products out: 2,847. Orders in: 18,219. Orders out: 18,219. Images in: 11,402. Images out: 11,402. One screen tells you you're whole.

If something didn't make it, the verifier names it and the error log explains why. You fix and re-run that slice. You don't re-run the whole migration. You don't lose what already worked.

Stay Updated

Subscribe for free and be the first to know about the latest features, updates, and new additions.