ISPStack
FY 2026 · Q2 · period 5

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.

Double-entry Multi-currency KRA-aware
FibrePulse Networks Ltd.
Statement of Profit & Loss
Period 5 · May 2026 · KES
Revenue
Internet subscriptions4,182,450
Installation fees128,200
Hotspot vouchers46,800
Total revenue4,357,450
Cost of revenue
Upstream transit 812,000
Equipment depreciation 214,300
Field labour 328,750
Total COGS1,355,050
Gross profit
Margin68.9%
Operating expenses1,498,720
Net profit1,503,680
Prepared automatically by ISPStack v.5.18 · 2026-05-25
Capabilities

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.

Auto-journal

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.

payment.received KES 2,500 · Mwangi N. · inv #INV-04812
JV-2026-05-1844
M-Pesa Settlement (Bank)
acct 1010
Cash in
Debit
2,500.00
Credit
Accounts Receivable
acct 1200
Customer cleared
Debit
Credit
2,500.00
Bank Charge Expense
acct 5810
Daraja fee
Debit
5.00
Credit
Balanced · debits = credits = 2,505.00
posted in 132 ms · trial balance updated
The picture

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.

accounting
ledger
posts · reports
Billing
created
Payment
received
Payroll
run
Inventory
adjustment
Assets
depreciated
Tax
period
Event → journal map
  • 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
Month-end close

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. 1
    Day 1
    Accruals
    cron 02:00
    Recurring accrual + reversal entries posted from templates
  2. 2
    Day 2
    Quiet day — reports refreshable in real time
  3. 3
    Day 3
    Depreciation
    cron 02:00
    Fixed-asset depreciation journals run on schedules
  4. 4
    Day 4
    Bank import
    cron 06:00
    Statements pulled from bank feeds; smart-match runs against open invoices
  5. 5
    Day 5
    Tax accrual
    cron 02:00
    VAT, withholding, and PAYE accrual lines from tax-service
  6. 6
    Day 6
    Reconciliation
    cron 08:00
    Unmatched lines surface; reviewer queue ready
  7. 7
    Day 7
    Close + reports
    cron 17:00
    Trial balance, P&L, balance sheet, cash flow auto-published
Cron-driven
All five jobs schedule per fiscal calendar — overrideable per tenant.
Audit-safe
Each cron writes a JV with a reproducible source-id; nothing posts that can't be unposted.
One human button
Reviewer presses Close on day 7; statements lock and publish.
Want to talk?

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.