Ledgerly Documentation
Everything you need to install, license, set up and run Ledgerly — a complete double-entry accounting system inside WHMCS.
Overview
Ledgerly turns WHMCS into a true accounting system of record. It keeps a full double-entry general ledger, posts your invoices, payments and expenses automatically, and produces proper financial statements — without exporting anything to external accounting software.
The module is admin-only and installs like any other WHMCS addon. Every subsystem (loans, budgeting, permissions, tax, and more) can be switched on or off from Settings, so you can run only the parts you need. Each WHMCS installation keeps its own independent set of books.
System requirements
| Component | Requirement |
|---|---|
| WHMCS | WHMCS 8.x (built and tested on 8.13) |
| PHP | PHP 8.1 or newer (8.1–8.4). Activation checks this automatically. |
| PHP extensions | pdo, json, mbstring |
| Database | MySQL / MariaDB (the same database WHMCS uses) |
| ionCube Loader | Required for the distributed (encoded) build |
| Access | WHMCS admin area only |
Installation
- Download the module archive and unzip it.
- Upload the
accountingfolder to/modules/addons/in your WHMCS installation, so the path becomes/modules/addons/accounting/. - In WHMCS admin, go to System Settings → Addon Modules (or Setup → Addon Modules).
- Find Ledgerly in the list and click Activate.
- Click Configure, choose which admin role groups may access the module, enter your License Key, and save.
On activation, Ledgerly automatically creates its database tables, seeds a default chart of accounts, sets up the current financial year, and applies default settings. If your server doesn’t meet the requirements, activation stops with a clear message rather than failing silently.
accounting folder with the new version. The module migrates its own database changes automatically the next time you open it — no manual steps.Activation & licensing
Ledgerly is licensed per WHMCS installation and is domain-locked. You enter your key on the module’s configuration screen.
- Go to Setup → Addon Modules → Ledgerly → Configure.
- Paste your License Key into the field.
- Save, then open the module. On first load it validates the licence against the licensing server and unlocks.
Licence states
- Active — the module works normally. You can see the licence status at the foot of the Tools page (status, last checked, valid until).
- Needs attention — if a licence is invalid, expired or suspended, the module shows a full-screen renewal notice instead of its normal content. Your accounting data is never touched; access resumes the moment the licence is valid again.
First-time setup
Follow this order the first time you set up Ledgerly. It takes a few minutes and gets your books opening from the right position.
- Open Settings and set your Accounting Basis (cash or accrual), base currency, and company / entity name (shown on reports). Turn optional modules on or off here.
- Review the Chart of Accounts. A sensible default is provided — rename, add or adjust accounts (for example, your specific bank and mobile-money accounts) to match your business.
- Enter opening balances (Tools → Opening Balances) if you’re moving from another system, so your ledger starts from your current figures.
- Import from WHMCS (Tools → Import) to bring historical paid invoices into the ledger, if you want history reflected.
- Set up Revenue Mapping so income from different products routes to the accounts you want.
- Review Settings once more — approval workflow, tax options, and any modules you want enabled.
Settings reference
Key settings you’ll find under the Settings tab. Most subsystems are toggles — turn off what you don’t use to keep the interface focused.
| Setting | What it does |
|---|---|
| Accounting basis | Cash or accrual — determines how and when revenue is recognised and posted. |
| Base currency | The currency your books are kept in; foreign balances are converted to it. |
| Company / entity name | Legal name shown on financial statements and reports. |
| Require journal approval | When on, entries are created as drafts and must be approved before they post to the ledger. |
| Default revenue account | The catch-all income account used when no revenue-mapping rule matches. |
| VAT / tax options | Enable VAT tracking and set rates for tax reporting. |
| Withholding tax | Enable WHT on supplier payments and set the default rate. |
| Module toggles | Switch Loans, Budgeting, Permissions and other subsystems on or off. |
Dashboard
The dashboard is your at-a-glance financial overview. It shows key figures for the current period — revenue, expenses, net profit, cash across your bank and mobile-money accounts, and receivables — along with charts including a 12-month trend and breakdowns by account.
Receivables are pulled live from WHMCS unpaid invoices, so the figure always reflects what your clients currently owe.
Chart of accounts
The chart of accounts is the backbone of your ledger — the list of accounts transactions post to. Ledgerly ships with a complete default chart covering assets, liabilities, equity, income and expenses, which you can edit freely.
- Add, rename or deactivate accounts to match your business.
- Each account has a code, name and type, and can be assigned a currency for foreign-currency accounts.
- Accounts in use can be deactivated (hidden from new entries) but are retained so historical reports stay accurate.
Automatic posting
Ledgerly watches WHMCS and posts the accounting for you. What gets posted depends on your accounting basis:
Cash basis
Revenue is recognised when money is received. When an invoice is paid, Ledgerly posts the receipt — debit your bank/cash account, credit the appropriate income accounts (split by invoice items), and credit output VAT where applicable. Refunds post the reverse. Add-funds payments are credited to customer credit.
Accrual basis
Revenue is recognised when invoiced, with payments settling the receivable. Choose the basis that matches how your accountant reports.
Journals
Journals are manual double-entry transactions for anything not posted automatically — adjustments, accruals, corrections, and one-off entries.
- Every entry must balance (total debits equal total credits) before it can be saved.
- With approval enabled, new entries start as drafts; approve them to post. Drafts can be edited or deleted freely.
- Posted entries are voided rather than deleted, so the audit trail stays intact. Voided entries are excluded from reports.
- Bulk actions let you approve or manage multiple drafts at once.
Revenue mapping
Revenue mapping controls which income account each sale posts to. Instead of everything landing in one revenue account, you can route hosting, domains, SSL, add-ons and other products to separate income accounts for clearer reporting.
- Go to Tools → Revenue Mapping.
- Add a rule matching a product group or item type (hosting, domain, add-on, other) to the income account of your choice.
- Anything without a matching rule uses your default revenue account.
Expenses
Record everything the business spends. Each expense posts a balanced entry to the ledger and can carry a receipt.
- Attach receipts (PDF or image) directly to an expense for a complete audit trail.
- Recurring expenses post themselves automatically on the schedule you set.
- Optionally apply withholding tax when paying a supplier directly.
- Import expenses in bulk from a CSV file via Tools.
Accounts payable (bills & vendors)
Track what you owe suppliers. Enter bills against vendors, record payments (including part-payments), and keep sight of outstanding balances and due dates.
- Vendors — maintain a list of suppliers you buy from.
- Bills — record supplier invoices; settle them fully or partially.
- Recurring bills — automate regular supplier charges.
- Withholding tax — when settling a bill, optionally withhold tax; the payment reduces by the WHT amount and the balance posts to a WHT payable account.
Fixed assets & depreciation
Register capital assets and let Ledgerly handle depreciation.
- Add an asset with its cost, acquisition date and depreciation settings.
- Ledgerly calculates and posts depreciation automatically each period via the daily task.
- An asset register and depreciation schedule are available under Reports.
Loans
Track loans and their repayments with correct principal/interest splits. (Enable the Loans module in Settings if it isn’t already on.)
- Add a loan with its amount, term, interest rate and the bank account the funds landed in.
- Ledgerly generates a reducing-balance amortisation schedule automatically — or you can upload your lender’s own schedule (CSV with due date, payment, principal and interest) for an exact match.
- Each period, due repayments post automatically: debit loan principal, debit interest expense, credit the bank account. The loan closes when fully repaid.
Budgeting
Set budgets by account and track performance against them through the year. The Budget vs Actual report shows where you’re over or under, so overspend is visible early rather than at year-end.
Bank & M-Pesa reconciliation
Reconciliation confirms your ledger matches your real-world statements.
- Match ledger entries against your bank or mobile-money statement.
- Mark items as reconciled so your cleared cash position is always accurate.
- Unreconciled items remain visible so nothing is missed.
Transfers
Move money between your own accounts — for example, bank to mobile-money, or between currency accounts.
- Go to Tools → Transfer Funds.
- Choose the source and destination accounts and the amount.
- Cross-currency transfers are supported, with any exchange difference posted to FX gain/loss, and an optional bank charge recorded as an expense.
Multi-currency & FX
Ledgerly is fully multi-currency. Accounts can hold foreign balances, and transactions in other currencies are converted to your base currency for reporting.
- Assign a currency to any account that holds foreign funds.
- FX revaluation restates foreign balances at period-end and posts the unrealised gain or loss, so your balance sheet reflects current rates.
- Exchange differences on settlement and transfers post to your FX gain/loss accounts automatically.
VAT & withholding tax
VAT
Enable VAT in Settings to track output tax on sales and input tax on purchases. VAT-related reports summarise tax collected and paid for your return.
Withholding tax (WHT)
Enable WHT and set a default rate to handle tax withheld on supplier payments. When applied, the supplier is paid net of WHT and the withheld amount is held in a WHT payable account until remitted. A withholding-tax report summarises amounts withheld.
Reports & financial statements
Ledgerly includes the full set of financial statements plus 40+ operational and tax reports, generated directly from the ledger. Every report can be exported to CSV or printed to PDF.
Financial statements
- Profit & Loss
- Balance Sheet
- Trial Balance
- Cash Flow
- Statement of Changes in Equity (reconciles to the balance sheet)
- Comparative statements — compare any period against another
Operational & tax reports
General ledger and journal detail, aged receivables, revenue by product / gateway / country, expenses by category, top customers and client profitability, domain registrations, asset register and depreciation, budget vs actual, VAT and withholding-tax summaries, and more.
Customer & vendor statements
Produce a statement of account for any customer (what they’ve been billed and paid) or vendor (what you owe and have paid), over any date range — useful for queries, collections and supplier reconciliation.
Periods & year-end close
Closing periods protects your historical figures from later changes.
- Period close locks a period so entries can’t be added or altered after the fact.
- Year-end close posts a closing entry that carries the year’s result into retained earnings. Closing entries are excluded from the Profit & Loss and Cash Flow so they don’t distort the new year.
User permissions
Control who can see and do what, keyed to your WHMCS admin roles.
- Enable permissions in Settings (off by default, so existing setups are unaffected).
- Go to Tools → User Permissions (full administrators only).
- For each admin role, tick which areas they can view and which actions they can perform.
Restrictions are enforced on the server, not just hidden in the interface. Full administrators always have complete access.
Audit log
Ledgerly records significant actions — who did what and when — in an audit log you can review. Combined with the void-don’t-delete approach to posted entries, this gives you a complete, tamper-evident history.
Attachments
Attach supporting documents (PDF or image, up to the configured size limit) to expenses and entries, so receipts and evidence live with the transaction they relate to — ready for audit or review.
Tools & import
The Tools tab gathers setup and maintenance utilities:
- Import from WHMCS — bring historical paid invoices into the ledger (idempotent, so it won’t double-post).
- Opening balances — set starting balances when migrating from another system.
- Expense CSV import — bulk-load expenses.
- Transfer funds — move money between accounts.
- Revenue mapping — route income to accounts.
- User permissions — role-based access (full admins).
- FX revaluation — restate foreign balances at period-end.
- Danger Zone — permanently remove all accounting data (full admins only, with a typed confirmation). Use only for a clean slate or uninstall.
Multiple installations
If you run more than one WHMCS installation (for example, separate brands), install Ledgerly on each. Every installation keeps its own independent set of books — nothing is shared or mixed — and each installation is licensed separately.
Updating the module
- Back up your WHMCS files and database (standard good practice).
- Replace the
accountingfolder with the new version. - Open the module once — it migrates any database changes automatically.
Your data, settings and chart of accounts are preserved across updates. Updating never removes data.
Troubleshooting
The module shows a licence notice
Confirm your License Key is entered under Setup → Addon Modules → Ledgerly → Configure, that your licence is active, and that you’re on the licensed domain. Reload after saving.
Activation failed with a requirements message
Your server doesn’t meet a requirement (usually PHP version or a missing extension). The message names what’s needed — update PHP to 8.1+ or enable the listed extension, then activate again.
A figure looks wrong on a report
Check your accounting basis (cash vs accrual), that the relevant entries are posted (not still drafts), and that the report’s date range and any period close are as expected. Voided entries are excluded by design.
Revenue is landing in the wrong account
Review your Revenue Mapping rules; anything unmatched uses the default revenue account.
FAQ
Does Ledgerly replace QuickBooks or Xero?
For most WHMCS-based businesses, yes — it keeps full double-entry books and produces the standard statements inside WHMCS, with no need to export to external software.
Will it change my WHMCS invoices or billing?
No. Ledgerly reads from WHMCS to post the accounting; it doesn’t alter your invoices, billing or client-facing behaviour.
Can I start part-way through a year?
Yes. Set opening balances and optionally import history, and Ledgerly keeps the books from there.
Is my data safe if I deactivate the module?
Yes. Deactivating keeps all data. Removal is a separate, deliberate action in the Danger Zone.
Can I limit what my staff can see?
Yes, via role-based User Permissions, enforced on the server.
Support
For help with Ledgerly, renewals or licence questions, contact your vendor through the support channel listed on your purchase, or via the licence-renewal page shown in the module. When reporting an issue, include your WHMCS version, PHP version, and a clear description of what you did and what happened.