Finance → Accounting → Bank Accounts → /banks
Every receipt, expense payment, refund, disbursement and wallet top-up names a bank account. The bank account record is what connects that movement to the general ledger and, for collections, to the paybill a tenant actually pays into.
What a bank account record holds
| Field | Purpose |
|---|---|
| Account name | The display name staff will choose from. Make it unambiguous. |
| Account number | The account identifier. Also the key incoming bank/M-Pesa webhooks match on. |
| Bank name / display name | The institution. |
| Account type | The kind of account. |
| Ledger account | The chart-of-accounts account this bank maps to. Without it, cash movements cannot post. |
| Paybill | The mobile-money paybill or till used for collections into this account. |
| Payment reference separator | How a payer's account reference is composed, for automatic matching. |
| Automated | Whether receipts into this account arrive automatically through an integration. |
| Admin only | Hides the account from payer-facing checkout entirely, regardless of Availability. |
| Status | Active or inactive. |
Adding a bank account
Create the account
Name, bank, account number and type.
Map it to the ledger
Choose the chart-of-accounts cash/bank account. This is the step that makes reconciliation possible.
Configure collection details
Paybill and reference separator, where tenants pay into this account.
Set automation
Mark it automated if receipts arrive through an integration rather than being keyed in. If the account collects by M-Pesa STK push, set up the push credentials on the M-Pesa tab (see below).
Activate it
Only active accounts appear in payment, refund and disbursement forms.
The account drawer
Opening an account shows a set of tabs. Which ones appear depends on the account:
| Tab | Shows | Who can change it |
|---|---|---|
| Overview | Balance tiles (paid, arrears-relevant totals) and recent activity | — |
| M-Pesa | STK push credential setup — only shown on accounts configured for Daraja push | Admins |
| Activity | The account's payment history | — |
| Sharing | Which properties collect through this account | Staff with Banks permissions |
| Availability | Which units and charge types may pay into this account | Staff with Banks permissions |
| Settings | How the account behaves, in plain language, plus its identity details | Staff with Banks permissions; identity fields are locked once the account has activity |
M-Pesa / STK push setup
For accounts that collect by Safaricom Daraja STK push, the M-Pesa tab holds the consumer key, consumer secret, passkey and business short code. Once saved, the secret fields display masked — re-entering the shortcode alone does not blank the stored credentials.
Account sharing
Multiple properties can collect through the same settlement account — a paybill shared across a portfolio, for example. The Sharing tab lists every property you're allowed to grant, shows which are already sharing the account, and how much each has collected through it, so you can see the impact before withdrawing access. The property that owns the account can't be removed.
Availability
Sharing an account with a property doesn't mean every unit in it should pay there. Availability controls which units — and which charge types — may use the account, in three modes:
- All units — no restriction (the default).
- Include only — pick specific blocks or units allowed to pay into this account.
- Exclude — allow everywhere except specific blocks or units.
Charge types (Rent, Water, Service Charge, and so on) are a separate, independent restriction on the same tab — leave unset for no restriction.
Settings and locked fields
The Settings tab explains, in plain language, what each switch on the account currently does (not just whether it's on) — active status, admin-only visibility, automation, and the payment reference format, complete with a live preview of what a tenant would see on their reference.
Once an account has real activity — payments received, resolvable STK credentials, or reconciliation turned on — its identity fields (account number, paybill, bank) lock. This protects the trail: an account number is the key every bank and M-Pesa webhook matches against, so changing it after receipts exist would split that history across two values. The form explains why a locked field can't be edited and what would break if it could.
If an account's identity is genuinely wrong, don't fight the lock — deactivate it and create a correct replacement. That keeps historical payments and ledger postings pointing at the account they actually happened against. A super admin can override a locked field directly, but only with a recorded reason, and it's a last resort.
Active and inactive accounts
Accounts can be deactivated rather than deleted. An inactive account:
- no longer appears when recording new payments, expenses, refunds or disbursements;
- keeps every historical movement, so past reconciliations and statements stay intact.
Payer-facing checkout
Where tenants pay through a portal or a checkout flow, the set of accounts they may pay into is derived from your bank accounts, filtered by Admin only, Availability, and — for a specific invoice — which charge type it's for and which payment rails the account actually supports (bank transfer, STK push, and so on). An account intended for owner disbursements should not appear as a rent-collection destination.
Review the payer-facing list whenever you add an account or change Availability, so a new internal account does not quietly become a tenant payment option.
Reference matching
Automatic matching of an incoming mobile-money or bank payment to a lease relies on the payer using the right reference. The payment reference separator defines how that reference is constructed, so the receipt can be attributed without a human reading it. The Settings tab shows a live preview of the composed reference, so you can confirm it before communicating it to tenants.
Communicate the reference format on invoices and in reminders. Most unmatched receipts are payers using a reference nobody told them to use.
Reconciliation
Enrolling an account
Statement reconciliation is opt-in per account. Open the account, press Edit, and switch on Reconcile this account's statements under Integrations.
Until it is on, the reconciliation engine skips the account entirely — including any statement already imported against it — and it does so without reporting anything. A match run over an unenrolled account completes having examined nothing, which on screen is indistinguishable from "everything already reconciles". Enrol the accounts you actually hold statements for, and no others.
The account's detail page reports the state as Enrolled / Not enrolled, and enrolling an account locks its account number against editing — the statements filed against it are matched on that number. See Payments reconciliation for the rest of the flow.
Working a reconciliation
Work one account and one period at a time
Mixing accounts is how items get double-counted.
Match on reference, not amount
Amounts repeat; references do not.
Check all four directions of movement
Receipts in, expense payments out, refunds out, owner disbursements out. A bank line with no counterpart in any of the four is an unrecorded transaction.
Confirm the ledger balance
The mapped ledger account's balance should equal the reconciled bank balance.
Common problems
| Symptom | Cause and fix |
|---|---|
| Bank account not selectable | It is inactive, marked Admin only, or Availability excludes that unit or charge type. |
| Cash postings missing from the trial balance | The bank account has no ledger account mapped. |
| Receipts arriving unmatched | Payers using the wrong reference, or the reference separator is misconfigured. |
| Tenant paid to the wrong paybill | An account exposed to payers that should not have been. Review Availability and the Admin only flag. |
| Can't edit account number, paybill or bank | The account has activity and its identity fields are locked. Deactivate it and create a corrected account instead. |
| STK push test passes but pushes still fail | Test only checks the consumer key and secret — a wrong passkey or short code won't show up there. |
| A property shares an account but its units still can't pay | Sharing grants the property; Availability separately controls which units and charge types within it. Check both tabs. |