Panellicense

Migrate WHMCS to Blesta: end-to-end checklist

End-to-end WHMCS-to-Blesta migration checklist covering fresh install, UTF8 collation fix, Import Manager run, and the auth_legacy_passwords cutover.

5 min readUpdated 2026-05-16blesta · whmcs · migration · import-manager
schema: HowToschema: FAQPage

Moving a live billing platform is the part of switching panels nobody wants to own. Done badly, you lose invoice continuity, break recurring charges, or force every customer to reset their password on day one. Done correctly, the cutover is a DNS change and a config flag.

This checklist covers a WHMCS-to-Blesta migration end-to-end: staging install, character set repair, Import Manager run, the auth_legacy_passwords trick that keeps old WHMCS password hashes valid, and the modules you have to recreate by hand. It assumes Blesta 5.2+ importing from WHMCS 5.2 through 8.2. Want the business case first? Read Blesta vs WHMCS in 2026.

1. Install Blesta on a staging server

Do not migrate in place. Stand up a fresh Blesta on a separate host (or at minimum a separate database and document root) so the WHMCS instance keeps running until cutover. You will run the import multiple times before you trust the result.

# typical layout
/var/www/blesta-staging          # Blesta 5.x source
blesta_staging                   # empty target database

Activate the Blesta license against the staging hostname; you can move the license to the production hostname at cutover from the client area.

2. Repair the WHMCS character set

WHMCS installs from before 7.x default to latin1. Blesta's Import Manager reads the data, but anything beyond ASCII — accented client names, non-Latin domains, emoji in ticket replies — arrives mangled. Fix the source schema before importing, not after.

ALTER DATABASE whmcs CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Database-level alone is not enough; existing tables keep their old collation. Generate the per-table statements:

SELECT CONCAT('ALTER TABLE `', table_name,
       '` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;') AS stmt
FROM information_schema.tables
WHERE table_schema = 'whmcs' AND table_type = 'BASE TABLE';

Pipe the output back through mysql. Take a dump first — a few TEXT columns can hit row-size limits and need their type adjusted.

3. Install the Import Manager plugin

In Blesta admin go to Settings → Company → Plugins → Available, find Import Manager, and install. It ships with the core distribution but is not enabled by default.

4. Run the import

Settings → Company → Plugins → Import Manager → Import. Choose WHMCS as the source, then enter the WHMCS database host, name, user, password, and the cc-encryption key from WHMCS configuration.php. Without the key, credit card data does not decrypt and clients with auto-pay break.

The importer walks: clients → contacts → packages → services → invoices → transactions → support tickets. Expect 10-15 minutes per 1,000 clients on a 2-vCPU VPS. Watch /var/www/blesta-staging/logs_blesta/ for plugin errors; a single malformed invoice can halt the run.

5. Enable legacy password compatibility

Out of the box, Blesta cannot validate WHMCS bcrypt hashes — the salts differ. Without the legacy flag every existing user has to reset their password at cutover. Avoid that by enabling backwards compatibility:

// /var/www/blesta-staging/config/blesta.php
Configure::set('Blesta.auth_legacy_passwords', true);

With this on, Blesta tries its native hash check first, then falls back to the WHMCS algorithm. On a successful legacy login the password is rehashed to Blesta's format silently. Leave the flag enabled for at least 90 days post-cutover, then audit and disable.

6. Sanity-check on a sample account

Pick five accounts that exercise the awkward paths: an annual prepayment, a monthly with a credit balance, a closed account, a reseller, and a domain-only client. Verify invoice totals match the WHMCS originals to the cent, next-due dates are unchanged, and the credit card token still charges (test with a $1 manual invoice on Stripe sandbox — see Blesta Stripe Payments setup).

7. Recreate modules and gateways

The Import Manager moves data, not configuration. Provisioning modules (cPanel, Plesk, Virtualmin), registrar modules (Enom, ResellerClub), and payment gateways do not migrate — Blesta and WHMCS use different module APIs. Reinstall each from Settings → Company → Modules / Gateways, configure with the same API credentials, then link existing services to the new module instance.

Email templates also do not transfer. Export the customer-facing templates from WHMCS, paste into Blesta's template editor, and adjust the {$client} style tags to Blesta's {client.first_name} syntax.

8. Cutover

Schedule a 30-minute maintenance window. Freeze WHMCS (disable cron, set the storefront to read-only), run a final delta import, change DNS for billing.example.com to the Blesta host, and swap the Blesta license to the production hostname. Keep WHMCS reachable on an internal hostname for 30 days for audit lookups, then archive the database and shut it down.

How long does a WHMCS to Blesta migration take?+
End-to-end, 1-3 days of elapsed work for a typical host: an afternoon to install and configure Blesta, a day for trial imports and module reconfiguration, a 30-minute cutover window. Importer runtime is roughly 10-15 minutes per 1,000 clients.
Will my customers have to reset their passwords?+
No — enable Blesta.auth_legacy_passwords in config/blesta.php before cutover. Blesta then validates WHMCS-format hashes on first login and silently rehashes to its native format. Disable the flag 90+ days later once the long tail has logged in.
Does the Import Manager move WHMCS modules and registrars?+
No. Provisioning modules, registrar modules, and payment gateways have to be reinstalled and reconfigured in Blesta manually. Only the data — clients, services, invoices, transactions, tickets — migrates.
Why are accented characters and emoji broken after importing?+
The source WHMCS database is on latin1. Convert it to utf8mb4 before running the importer — database default plus per-table CONVERT TO CHARACTER SET. Fixing after import requires re-running the entire import on a clean target.
Can I migrate from WHMCS 8.x to Blesta?+
Yes. Blesta 5.2 and later import from WHMCS 5.2 through 8.2. Older WHMCS installs work but may need a WHMCS upgrade first to bring the schema to a supported revision.

Next steps

Switch in an afternoon

Switch from your current reseller — free.

We migrate active cPanel, Plesk, LiteSpeed and CloudLinux licenses from any reseller. We prorate the first month so you never pay twice, and your customers see zero downtime during the swap.