Books that close themselves.
Double-entry, multi-currency, with the bank-rule engine and the smart matcher doing the reconciliation work your finance team used to do by hand. Billing posts its own JV; payroll posts its own JV; you click Close.
| Revenue | |
| Internet subscriptions | 4,182,450 |
| Installation fees | 128,200 |
| Hotspot vouchers | 46,800 |
| Total revenue | 4,357,450 |
| Cost of revenue | |
| Upstream transit | 812,000 |
| Equipment depreciation | 214,300 |
| Field labour | 328,750 |
| Total COGS | 1,355,050 |
| Gross profit | |
| Margin | 68.9% |
| Operating expenses | 1,498,720 |
| Net profit | 1,503,680 |
A general ledger built for an ISP.
Not a generic SaaS book-keeping app bolted on the side. The chart of accounts, the depreciation schedules, the period-close cron — all live next to billing, payroll, and inventory.
Double-entry ledger
Every transaction posts to debit + credit accounts with a balancing JV. Trial balance reconciles by construction; period close runs in seconds.
Bank rules + smart match
Statement lines auto-categorise through a per-tenant rule engine, then a fuzzy matcher reconciles them against invoices and bills you posted.
Multi-currency wallets
Per-account base currency with FX-rate snapshots on each transaction. Realised + unrealised FX gains/losses post automatically at period end.
Fixed assets
Asset register with depreciation schedules (straight-line + reducing-balance). Monthly depreciation journals run on a cron, no spreadsheet rebuild.
AR & AP
Receivables aging tracks invoice age across the customer book; payables tracks vendor bills against PO and goods-received notes.
Reports + cash forecast
P&L, balance sheet, cash flow, trial balance — plus a 13-week rolling cash forecast that pulls from open AR, AP, and recurring billing.
One M-Pesa receipt. Three accounts touched. Zero clicks.
When a customer pays an invoice, billing-service emits payment.received. Accounting subscribes; the journal posts the same instant, balanced by construction.
Six modules feed the ledger automatically.
Each sister module emits a documented event; accounting subscribes and posts the corresponding journal. The chart of accounts only ever gets edited by humans for genuinely new account categories.
- billing.invoice.created Dr AR · Cr Revenue · (Cr VAT Payable)
- payment.payment.received Dr Bank · Cr AR
- payroll.run.closed Dr Salary Expense · Cr PAYE/NHIF/Bank
- inventory.stock.adjustment Dr/Cr Inventory · Cr/Dr COGS
- asset.depreciated Dr Depreciation Exp · Cr Accumulated Dep
- tax.period.closed Dr Tax Expense · Cr Tax Payable
The end-of-month dance, scheduled to run itself.
Seven days. Five auto-cron jobs. One human button to click the trial balance when you're ready to publish. Below is the default schedule a fresh tenant ships with — configurable per fiscal calendar.
- 1 Day 1Accrualscron 02:00Recurring accrual + reversal entries posted from templates
- 2 Day 2—Quiet day — reports refreshable in real time
- 3 Day 3Depreciationcron 02:00Fixed-asset depreciation journals run on schedules
- 4 Day 4Bank importcron 06:00Statements pulled from bank feeds; smart-match runs against open invoices
- 5 Day 5Tax accrualcron 02:00VAT, withholding, and PAYE accrual lines from tax-service
- 6 Day 6Reconciliationcron 08:00Unmatched lines surface; reviewer queue ready
- 7 Day 7Close + reportscron 17:00Trial balance, P&L, balance sheet, cash flow auto-published
Watch the books close themselves.
Auto-journal from billing, payroll, inventory, and assets. You press Close on day seven and the statements publish — balanced by construction.