AG

Case study · Agent banking

Agent banking for rural India, on three rails and one ledger

Grameen Impact Ventures runs a network of village agents who give rural customers cash withdrawals, bill payments and merchant payments. I was architect and product owner of Finseer, the open-source platform behind that network, which ran in production from 2022 into 2024.

Client
Grameen Impact Ventures (Grameen Foundation India)
Delivered through
Fynarfin
When
2021 – 2024
My role
Architect and product owner; production escalation
Stack
Apache Fineract, Fino Payments Bank (AePS), Razorpay (UPI and BharatQR), BBPS, Elasticsearch, Grafana, Kubernetes on AWS

The problem

Agent banking is how formal finance reaches most of rural India. A local shopkeeper with a fingerprint scanner lets customers withdraw cash from their Aadhaar-linked bank account (AePS), pay bills over the national BBPS network, and pay merchants by scanning a UPI QR code. The agent earns a commission, supervisors manage clusters of agents, and the programme measures itself on gross transaction value (GTV) and agent income.

The outcome

What shipped, when

WhenMilestone
Mar 2022BharatQR merchant collection live, in UPI-only mode
May 2022Root cause of daily outages found; incident protocol and deploy pipelines in place
Jan 2024Fino's new authenticated cash-withdrawal flow live in production
Apr 2024QR registration and callbacks migrated to Razorpay's new event model, tested with GIV
Jun 2024Full backup of every data store, restore verified, staged in a second AWS region

How it worked

Finseer extends Apache Fineract, an open-source core banking system, so customers and agents have real savings accounts, overdraft limits and a full ledger, not just a payment switch. Each partner rail sits behind Finseer's own API. When Fino changed its withdrawal contract, agents' devices kept calling Finseer, and only the adapter behind it changed:

Agent device ─► Finseer: authenticate agent    (wraps Fino's new auth call)
             ◄─ auth transaction ID
Agent device ─► Finseer: cash withdrawal       (carries the auth transaction ID)
                  ├─► Fino: withdrawal
                  └─► Ledger: post to agent float and customer account

Razorpay's change followed the same pattern: the registration and callback APIs changed inside Finseer, were tested against stubs first and then with GIV, and existing customers were re-registered.

Tradeoffs worth keeping

← All case studies