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 Joomla stores on VirtueMart, HikaShop, J2Store, JoomShopping and the OpenCart bridges to Shopify: variants, group prices, orders, SEF redirects and passwords, for 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?

Joomla has no store of its own. Every Joomla shop runs on an extension, and each extension keeps its catalog, customers and orders in its own database tables with its own product model. A Joomla to Shopify migration is therefore really a VirtueMart, HikaShop, J2Store or JoomShopping migration, with Joomla’s users, menus and SEF URLs wrapped around it. This guide covers what the family has in common and where each extension differs, including the parts that export screens and automated tools leave behind.
To be fair, Joomla is a strong content system, VirtueMart and HikaShop are both actively developed for current Joomla versions, and a store with heavy editorial content has good reasons to keep Joomla for that content. We cover that option below.
Built-in export varies by extension, so we work from the database for every one of them. Customer accounts live in Joomla’s own #__users table, with addresses and store data in the extension’s tables.
| Data | Source on Joomla | Moves to Shopify? |
|---|---|---|
| Products with SKUs, descriptions, prices, stock, weights, images, meta data | Extension product tables (VirtueMart, HikaShop, JoomShopping); Joomla articles plus J2Store tables for J2Store | Yes. Meta titles and descriptions carry to Shopify’s SEO fields. |
| Variants | VirtueMart child products; HikaShop characteristics and variants; J2Store variants; JoomShopping dependent attributes | Yes, as Shopify variants within the three-option limit. See each extension below. |
| Price-adding options | VirtueMart cart custom fields; HikaShop options; J2Store options; JoomShopping independent attributes | Partly. Shopify has no native price modifier on a non-variant choice, so each one is redesigned. |
| Group prices and shopper groups | VirtueMart shopper groups; HikaShop price access levels (Business edition); Joomla user groups | Yes, as customer tags, B2B companies and catalogs, or discounts. |
| Categories and manufacturers | Extension tables | Yes, as collections and vendors, with the hierarchy carried into menus. |
| Orders with line items, taxes, shipping, statuses | Extension order tables and order history | Yes. Real orders with original numbers and dates, transactions and refunds. |
| Tracking numbers | Order history comments or a shipping plugin’s table, where the store recorded them | Yes, as fulfillments, wherever the data exists. |
| Customers and addresses | #__users plus extension address tables | Yes, with group membership as tags. |
| Passwords | Joomla hashes (bcrypt on current versions) | No. Shopify cannot import password hashes. See below. |
| Reviews | Extension review tables | Yes, into Judge.me or your chosen review app. |
| Articles and pages | #__content | Yes, as Shopify pages or blog posts, or left on Joomla. See below. |
| Template, modules and plugins | Joomla files | No. The design is rebuilt on Shopify and each plugin is mapped to an app or native feature, or dropped. |
Every Joomla store has a non-SEF form that search engines may have indexed, such as /index.php?option=com_virtuemart&view=productdetails&virtuemart_product_id=42&virtuemart_category_id=7, /index.php?option=com_hikashop&ctrl=product&task=show&cid=42&name=blue-mug or /index.php?option=com_jshopping&controller=product&task=view&category_id=7&product_id=42. Joomla’s SEF router then builds paths from the menu item alias, so the same product can appear as /shop/mugs/blue-mug-detail (VirtueMart adds a -detail suffix by default), /index.php/shop/mugs/blue-mug-detail when URL rewriting is off, /component/virtuemart/... when no menu item matches, or with a .html suffix and a language prefix such as /en/. J2Store products are articles, so they follow article URLs.
Third-party SEF extensions change the picture. sh404SEF, discontinued by its developer Weeblr on 17 August 2023, stored its generated URLs and custom aliases in its own tables, and its successors 4SEF and 4SEO do the same. Joomla’s core Redirects component may also hold older redirects. Shopify uses /products/handle, /collections/handle and /pages/handle. We build the map from the SEF extension’s URL table where one exists, the router’s output where not, every non-SEF form keyed on product and category IDs, the existing redirect list (collapsed so nothing chains), and Search Console. Every redirect is requested against the live domain before launch.
Cart2Cart, a partner of ours, lists VirtueMart, HikaShop and other Joomla carts as sources, and LitExtension supports VirtueMart, HikaShop and J2Store. Both are fine for a first pass on products and customers. Their limits are the ones we see on every platform: tracking numbers do not come across, refunded orders tend to land as plain paid orders, and redirects are built from guessed slugs rather than the URLs Joomla actually served. We finish those parts ourselves. Because Joomla is self-hosted, we read the database directly, so nothing is limited to what an export screen offers.
A Joomla to Shopify migration starts from $2,500 for stores under 500 products and 5,000 orders ($3,500 for larger stores), and typically takes six to eight weeks for smaller stores. B2B price structures, multiple stores and integrations are quoted as a fixed price after the audit. Terms are 50% to begin and 50% once the store is live and you are fully satisfied with the figures.
VirtueMart 4 runs on Joomla 4 and 5, and is the most common source we see. Its variants are child products: each child inherits from its parent and overrides price, stock, SKU or images, and a Multi Variant or Generic Child Variant custom field ties the children together on the page. We rebuild each parent and its children as one Shopify product, with the Multi Variant axes as options. Other custom fields become metafields, and cart custom fields that add a price are sorted into variants, add-on products or line item properties.
Shopper groups control prices, visibility, and payment and shipping methods. Each product price can be tied to a shopper group, a currency and a quantity range, so one product may carry several prices. Group prices become B2B catalogs or tagged discounts; quantity ranges become volume pricing on B2B catalogs. Multi-currency stores map to Shopify Markets, and fixed prices per currency are carried as market price lists where you want them kept.
HikaShop comes in three editions: Starter (free), Essential and Business, and the edition decides what the data can contain. Characteristics are in every edition and define the variant axes; each variant is stored as a child product with its own code, price and stock, which maps cleanly to Shopify variants. Options, which attach other products as paid extras, need Essential or Business, and product custom fields need a paid edition too; we move options to an options app and custom fields to metafields. Prices restricted to Joomla user groups through access levels are a Business feature, and they become B2B catalogs or customer-tag discounts. HikaShop also runs on WordPress, and the same mapping applies there.
J2Store turns Joomla articles into products, so the description, images and URL sit in Joomla’s content tables and the price, stock and variants in J2Store’s. Its original developers stopped development in October 2024; the project continues as J2Commerce, maintained by members of the Joomla community, with J2Store 4 kept for Joomla 4 and 5 and a rewritten J2Commerce for Joomla 6. We join the article and product records, carry variable-product combinations as variants, and treat price-modifying options the same way as elsewhere. Because the product is an article, its URL follows the article’s menu route, which matters for the redirect map.
JoomShopping, developed by the German company MAXXmarketing, is still maintained for current Joomla versions. Dependent attributes form combinations with their own price, code and stock, and become Shopify variants. Independent attributes add or subtract a price per value and need the same redesign as any price modifier. Free attributes, which capture customer text, become line item properties, and characteristics (specifications) become metafields that drive Search & Discovery filters. Multi-language names are stored in per-language columns, which we carry into Shopify’s translations.
These are not Joomla stores in the data sense. MijoShop, AceShop and JooCart embed OpenCart inside Joomla, and MiwoShop does the same inside WordPress, so the catalog, customers and orders sit in OpenCart’s table structure within the Joomla or WordPress database. We migrate them exactly as we would an OpenCart store, and our OpenCart to Shopify migration guide covers that model. The Joomla part is the URL layer, since the bridge serves pages through Joomla’s router, and older bridge installs are often pinned to Joomla 3.
Many Joomla stores still run Joomla 3 because an extension, template or payment plugin never made the jump. Moving them to a supported Joomla means two CMS upgrades and a store extension upgrade before anything new is built. Moving to Shopify instead skips that work, and we read Joomla 3 databases directly, so an old version is no obstacle to the migration itself.
Stores with large article libraries, forums or member areas sometimes keep Joomla for that content and move only the store. The usual setup puts Shopify on the main domain and Joomla on a subdomain, or the reverse, since Shopify is not built to run in a subfolder of another site. You then keep two systems, two logins and two sets of updates. Moving everything puts articles into Shopify’s blog and pages, which suits most stores whose content supports the products. We recommend one or the other in the audit, based on what the content actually does.
Current Joomla versions hash passwords with bcrypt through PHP’s password functions, and older accounts may still hold legacy hashes that Joomla upgrades on the next login. None of these can be imported into Shopify, which does not accept password hashes from other systems. Customers come across with their accounts, addresses and order history intact, and sign in with Shopify’s one-time email code or set a new password. We plan the announcement email with you.
A reconciliation ledger from the Joomla and extension tables to the live Shopify counts for products, variants, customers, orders and fulfillments, with every exclusion named; the redirect verification list with the status each URL returned; the variant, option and custom field mapping; the group and currency pricing decisions; the content decision and where each article went; and a recorded walkthrough of the Shopify admin for your team.
Yes. Parent and child products become one Shopify product with variants, custom fields become metafields, shopper group prices become B2B catalogs or discounts, and orders import with their original numbers and dates.
VirtueMart, HikaShop, J2Store and J2Commerce, JoomShopping, and the OpenCart bridges MijoShop, AceShop and JooCart. The bridges store data in OpenCart tables, so we migrate them as OpenCart stores.
We redirect SEF paths, non-SEF index.php URLs, language prefixes and URLs generated by sh404SEF or its successors to the matching Shopify pages, and test each redirect before launch.
No. Shopify cannot import Joomla password hashes. Customer accounts, addresses and order history move, and customers sign in with a one-time email code or set a new password.
From 2,500 dollars for stores under 500 products and 5,000 orders (3,500 dollars for larger stores), typically over six to eight weeks for smaller stores. B2B pricing, multiple stores and integrations are a fixed price after the audit. Terms are half to begin and half once the store is live and you are fully satisfied with the figures.
Start with the migration survey. If your Joomla store runs on an OpenCart bridge, read the OpenCart guide, and see every platform we migrate.
More than the data
Getting the records out of Joomla 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 Joomla 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.