Core banking · Field app

One screen.
One visit.
No paper.

Sacco is core banking for SACCOs on Apache Fineract, and Sacco Field, the tablet your field officers carry. Routes, group meetings, cash and M-Pesa collection and member files, built to keep working without a signal and to land in the one ledger the branch runs.

Sacco Field Home screen on a tablet: a greeting for the field officer, 14 stops on today's route, three M-Pesa pushes pending, eight quick actions and today's collections
What Sacco is

Two surfaces. One ledger.

The branch keeps the books. The field officer meets the members. Sacco gives each of them their own screen, and one set of accounts behind both.

Sacco at the branch: the overview dashboard with total portfolio, active loans, savings deposits and collections today (sample data) The branch overview, with sample data. Deployed

Sacco at the branch

Core banking on Apache Fineract for SACCOs, MFIs and community-finance organisations. The back office the branch already runs.

  • Loan origination, appraisal and disbursement
  • Savings accounts and fixed deposits
  • M-Pesa and Airtel collection through Payment Hub
  • Accounting, tax and compliance, custom reports, multi-tenant
Sacco Field: today's route, overdue stops listed worst first with the loan, the amount and the days overdue In development

Sacco Field, in the field

A tablet app for the field officer, built for a market with no signal. Everything is saved on the tablet first and sent when it can be.

  • Today's route, worst first, from the collection sheet
  • Group meetings with attendance and a keypad per member
  • Cash, M-Pesa push, paybill and passbook deposits
  • The member's file: accounts, guarantors, collateral, next of kin

What the officer collects at 10:15 goes to the branch ledger when the tablet next has a signal — and nothing on the tablet says Posted before the ledger has confirmed it.

A day with Sacco Field

Follow one field officer from the branch to the market and back.

Every screen below is the app itself on a tablet, running its labelled demo dataset: Alice Wanjiru's Kiambu route and the Umoja Self-Help Group. The names and amounts are that sample data.

Today's route with Overdue (worst first) 5, Upcoming 5 and Paid tabs; Daniel Mutua Kioko 12 days overdue at the top
07:40
The route

The day opens worst first

Fourteen stops from the collection sheet, split into overdue, upcoming and paid. The member twelve days behind is at the top, not the one nearest the branch. Tap a stop and it opens beside the list, so the rest of the day never leaves the screen.

Umoja Self-Help Group meeting: members listed with their loan and what is still due, Wanjiku's pane open with 1000 typed on a numeric keypad and SEND M-PESA PUSH directly above the keys
08:30
The group meeting

Fourteen members, one screen, a keypad each

Umoja meets at Gikomba. Each row shows what the member still owes today and their outstanding balance; a long-press marks them present, absent or late. Tap Collect repayment and a pane opens with its own keypad, and the send button sits just above the keys.

A member who has paid half today owes the rest, not the whole — so the row says the rest.

Collect repayment pane for Otieno Brian Ochieng beside the route: step 1 evidence, step 2 amount and channel with CASH chosen, step 3 confirm Payment Successful dialog: collected KES 1,430.00, account Otieno Brian Ochieng, method cash, with DONE and PRINT RECEIPT
10:15
A stall, in cash

Three steps, then a receipt

Evidence, amount and channel, confirm. The officer carries the cash; the tablet records who paid, how much, where and when. Payment Successful appears only once the ledger has taken it and the tablet has read it back — and the receipt can be shared from the same dialog.

PUSH SENT! dialog: an M-Pesa request of KES 1,000.00 on its way to Wanjiku's phone, awaiting client confirmation Daniel's loan page opened again: the pane shows the push already on his phone, not a second form
11:00
An M-Pesa push

"Sent" is not "paid"

An STK push is a request the member has to accept on their own phone. So the tablet says PUSH SENT! and Awaiting client confirmation, and the member's row stays Waiting to sync until M-Pesa answers. Open that loan again from anywhere — the route, the picker, the loan page — and the tablet shows the prompt already on the phone instead of inviting a second one.

A loan page: outstanding balance, account number, interest rate, product, next instalment and due date, with Pay full amount The member's file on the Client Info tab, with tabs for accounts, identification, charges, guarantors, next of kin, collateral and pinpoint location
12:30
A member's file

Everything about a member, in one place

Client info, accounts, identification, charges, guarantors, next of kin, collateral and a pinpoint of where the business is. From a loan, Pay full amount opens the collect pane on the loan's total outstanding, with the member's M-Pesa number already filled in.

Deposit pane beside the meeting: Passbook Savings 000005203, balance KES 2,160.00, amount, payment type M-Pesa and the member's phone number
14:00
A deposit

Into the passbook, at the meeting

From the meeting's + button: Deposit, then the member. The pane names the savings account and its balance, and the new balance is read back from the ledger after the deposit posts. An account the branch has not activated yet says so, and takes no amount.

Money out is always a withdrawal request the branch approves. The tablet never pays out.

Sync centre: three M-Pesa pushes waiting to sync, the morning's five payments posted, each with its OB reference, time and amount
16:45
Back in signal

Saved first, sent when it can be

The Sync centre lists everything the tablet holds: what failed first, with the server's own reason, then what is waiting, then what is done, kept for thirty days. Sync runs by itself every fifteen minutes and whenever the connection returns; Sync now sends it straight away.

The rule the whole app keeps

Four words. Never a fifth.

A field app that says paid when it means sent teaches officers to tell members something the ledger will contradict tomorrow. Sacco Field has four words for where money is, and uses no others.

Waiting to sync Posted Failed Discarded
Saved, waiting to sync: not yet in the ledger, with the local reference
Saved · Waiting to sync

On the tablet, with a reference, and plainly not yet in the ledger.

PUSH SENT: the M-Pesa request is on its way to the member's phone
Push sent

A request on the member's phone. Nothing is collected until they accept it.

Payment Successful: collected, account, method and location, with a receipt
Payment Successful

Only after the server has taken it and the tablet has read it back.

Failed: the server's own reason, with Edit and retry or Discard
Failed

The server's own words. Edit & retry, or Discard by typing the amount back.

When the connection drops mid-send and the server will not say whether the money arrived, the tablet does not guess: it names the reference to look for on the account and asks the branch before anything is sent again. Rendered from the app's screenshot tests.

Try it

Pick a screen.

Home: greeting, today's route count, pending pushes, eight quick actions and today's figures Today's route, overdue stops worst first Group meeting mode for the Umoja Self-Help Group Who is paying: a search for Otieno, the stop he has paid in full shows Paid A member's client info tab A loan page with outstanding balance, next instalment and Pay full amount The Sync centre

Home. The officer's day at a glance: fourteen stops, three M-Pesa pushes still waiting for members to accept, eight quick actions and today's collections.

Also built in

The small things a field day needs.

Demo data mode

A whole realistic day on the tablet with no server: a route, two meetings, a morning of payments. Try it before you connect a tenant.

Attendance

Present, absent or late, a long-press on the member, kept on the tablet with the meeting.

Receipts

Share a receipt from the success dialog, built from what the ledger read back, not from what was typed.

Visit location

Where each capture was taken, with its accuracy, or "not recorded" when the tablet could not tell.

Centres and groups

Every centre and group with its members, signatories, documents and meeting calendar.

My performance

Today's collections against the sheet, from the figures on the tablet, never an estimate.

Landscape and portrait

List and detail side by side on a tablet held either way; the screens are checked at both.

Two themes

Emerald by default, Savanna for SACCOs that already know it, switched in Settings.

Pending pushes on Home

The M-Pesa prompts still waiting for members to accept, counted on Home and one tap away.

Under the hood

A native app, and the core it posts to.

The tablet app

Native Android in Kotlin and Jetpack Compose, with an on-device database that every capture is written to first.

The outbox

Every capture carries one idempotency key, sent three ways. A retry after a dropped connection is checked against the ledger before anything is sent again.

Apache Fineract

The ledger, with the Sacco custom modules for mobile money and the collection sheet. The tablet reads back what it posted before it says so.

Payment Hub

M-Pesa and Airtel collection for the branch. The tablet's STK push goes through the Sacco mobile-money module on the same core.

KotlinJetpack ComposeRoomWorkManagerHiltApache FineractPayment Hub EEDocker / K8sREST API
Designed in the open

Every screen, every state, every open question.

Sacco Field is designed in the open, on Mifos Fineract: each screen drawn before it is built, each state named, and the questions we have not answered written down beside them. Ask us for the walkthrough.

Ask for the design walkthrough
Six Sacco Field tablet screens: Home, today's route, a group meeting, cash collection, a member's file and the Sync centre

Captures of the app on its demo day.

Work with us

Three ways in.

See it on a tablet

A walkthrough of the branch software and Sacco Field together, on the demo day or on your own tenant.

Request a demo

Or download the one-page fact sheet (PDF)

Walk a day with us

We are looking for SACCO field teams to shadow for a day: the route, the meetings, the cash count at the end. Everything the app does comes from days like that.

Message us on WhatsApp

Implementers

Running Fineract for a SACCO or MFI? Bring a tenant and we bring the tablet. We would rather hear what we have wrong now than after the pilot.

Talk to the team