Hosting & Domain Manager 1.5.6: Move Your Whole Hosting Book in an Afternoon
When I released Hosting & Domain Manager for Perfex CRM, the most common reply was not a question about features. It was a variation on the same sentence:
I like it. But I have two hundred domains in a spreadsheet and I am not typing them in.
Fair enough. That was the honest reason not to switch — and it had nothing to do with the module being good or bad. It was the cost of the first afternoon.
Version 1.5.6 removes it. Here is what has landed since launch, and why each piece exists.
Bring everything in from a spreadsheet
Import and export now work for both services and domains, using the same column layout in each direction — a file you export is already a valid file to re-import.
The important part is the middle step. You upload the file, and before a single record is written the module shows you a dry-run preview: what it will create, what it will update, and which rows it cannot match and why. Nothing happens until you confirm. And if you confirm and immediately think better of it, every commit gets a batch ID you can undo.
Export matters for a less obvious reason: it is how you leave. Your whole book — services, domains, prices, dates, registrars — comes back out as CSV whenever you want it. A tool you can walk away from is a much easier tool to adopt.
One thing the vault will never do: export a decrypted secret. Credential metadata comes out; passwords and keys never do. A CSV of plaintext logins in somebody’s Downloads folder would undo every safeguard the vault has.
See the year ahead, not just the year behind
Every report in the module used to answer the same shape of question: what already happened. Useful for the accountant, less useful on a Tuesday when you are deciding whether to take on another client or replace a server.
The new revenue forecast answers the other one. Twelve months of scheduled renewals — every active service and domain, at its real price, net of tax — laid out month by month. Renewals that are overdue or in grace are counted separately as at risk, so you can see which part of that total is a sure thing and which part still needs a phone call.
Domains that renew for more than a year
Plenty of domains are not annual. Australian .au registrations default to two years, and many other extensions sell in multi-year blocks or let you buy a decade at once.
The module now records a registration period of one to ten years per domain and uses it everywhere it matters — the invoice line, the renewal date, the reminder ladder, the CSV. Before this, a two-year domain drifted a full year out of step after its first renewal. Wrong renewal dates are the one thing this module exists to prevent, so that needed fixing properly rather than being worked around.
Two smaller things you will notice every week
Link a domain to its hosting from either side. Until now the connection could only be made from the domain, which meant whichever record you happened to create first decided how much work the link took. Now the service has a Linked domains field too. Same relationship, two doors.
Know what a domain actually earns you. A new margin report puts your sell price against what you pay the registrar, per currency, divided by the registration period so a two-year domain compares honestly with a one-year one. Domains with no cost entered are flagged rather than quietly counted as pure profit.
The part I would rather not write about
Three of the fixes in this update are worth naming out loud, because they touched money and because you would want to know.
- Correcting a renewal date could produce a second invoice. The guard against billing the same renewal twice compared dates as exact text. Nudge a date by one day between invoicing and payment — something you do when the registrar’s real cut-off turns out to be different — and the module stopped recognising its own invoice. A renewal period is now identified by where it ends, and correcting a date changes nothing about it.
- Auto-suspend could take a site offline over an invoice still sitting in your drafts. The customer had received nothing — no invoice, no payment link, no reminder — and the first they would have known was their site going down. Suspension now requires an invoice that is genuinely owed.
- The module could believe its database was up to date when it wasn’t. An upload that did not land whole left a step missing while the module recorded it as done. It now refuses to skip, checks itself after every upgrade, and repairs what it finds — plus there is a Database check button in Settings for the day you need it.
None of these came in as a customer report. They came from running the module on my own hosting book and reading the code again with fresh eyes. I would rather tell you about them than have you find them.
Updating takes about two minutes
Upload the new ZIP in Setup → Modules, click Upgrade Database, and you are done. Your services, domains, credentials and settings come through untouched — there is no manual SQL step and no upgrading through each point release in between. The user manual has been rewritten to match, and ships with the download.
If you already own a licence, this update is free. It always will be — one payment, no subscription, no licence key, no activation server, and nothing in the module that ever phones home. For something holding your clients’ cPanel and SSH credentials, that is the only sensible way to build it.
Not using it yet?
There is a full live demo — a real Perfex install with a realistic agency portfolio already loaded: around 35 hosting services, 57 domains, 18 months of invoices and live monitoring data. It resets every hour, so break whatever you like. Sign in as [email protected] / demo.
Then bring your own spreadsheet. That is rather the point of this release.
Full details are on the module page. If you install it and hit something the manual doesn’t answer, or you want something that isn’t there yet, tell me — most of what is in this release started as somebody’s email.



