Collect cash with zero signal — with zero risk of double-posting.
On a rural route an agent can go hours with no connectivity. The Ustawi app records every collection on-device and syncs it later — engineered so that a retry can never post the same cash twice.

The problem this solves
Picture an agent working a route with hours of zero connectivity, collecting cash from borrower after borrower. Without a reliable offline mechanism, two things go wrong: collections either aren't captured at all, or a naive retry-on-reconnect posts the same collection twice — a genuine cash-custody and audit failure, where the ledger shows money that was never collected twice over.
This is not a hypothetical. Double-posted collections are one of the classic ways field cash reconciliation breaks down. The Ustawi app is engineered specifically so it cannot happen.
How the offline collection flow works
Each collection is recorded against a specific loan and installment from the agent's worklist, and written to a local on-device queue with a unique idempotency key. The agent sees the payment captured immediately, whether or not there is signal.
When connectivity returns, the queue syncs to the server. The server deduplicates by idempotency key, so even if the same queued write is sent twice — after a dropped connection, say — it is only ever posted once.
Why idempotency matters
An idempotency key is what makes 'try again' safe. The agent's phone can resend a queued collection as many times as the flaky network forces it to, and the server will still record exactly one posting. That single guarantee is the difference between a trustworthy field-cash trail and one that quietly drifts out of balance.
When a sync genuinely fails
A genuine failure — a malformed payload or a mismatched loan reference — is not silently dropped. It lands in a recoverable exception queue and is resolved by an operations supervisor through the Collections & Delinquency app. Nothing disappears; a broken write stays visible until a human clears it.
Offline-sync flow
- 1Select borrowerFrom the day's worklist, against a specific loan and installment.
- 2Enter amountRecorded on-device instantly, online or offline.
- 3Queue with idempotency keyA unique key is attached to the local write.
- 4Signal returnsThe queue begins syncing automatically.
- 5Server deduplicatesPosted exactly once, even if resent.
- 6Confirmed / exceptionSynced cleanly, or routed to a recoverable exception queue.
Step by step
Related features
- Digital Receipts & SyncEvery collection gets a receipt, online or offline, finalized on sync.
- EOD Cash ReconciliationPhysical cash reconciled against the digital collection log at close of day.
- GPS & Visit VerificationLocation and promise-to-pay captured at the point of visit.
- Device Security & EnrolmentA phone must be enrolled and trusted before it can transact.
- Worklist & RoutesThe agent's daily list of borrowers/installments due, synced from /sync/bootstrap.
See the field agent app in a live walkthrough.
FAQ
What stops a collection being posted twice?
Every collection is queued with a unique idempotency key. When the queue syncs, the server records only one posting per key — so a retry after a dropped connection can never double-post the cash.
What happens if I lose signal mid-collection?
Nothing is lost. The collection is written to the on-device queue and marked as saved; it syncs automatically when connectivity returns.
Which phones or operating systems does the app run on?
The field app is available on Android; an iOS version is planned.
What if a sync genuinely fails?
A genuine failure (for example a mismatched loan reference) lands in a recoverable exception queue and is resolved by an operations supervisor via the Collections & Delinquency app — it is never silently discarded.
Does the borrower get anything at the point of collection?
Yes — an instant digital receipt is issued for every collection, online or offline. See Digital Receipts & Sync.