AG

Case study · Agent banking

Finseer: agent banking for rural India, on three rails and one ledger

By · Published · Updated

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
Team
Up to seven Fynarfin engineers over the engagement, with GIV's finance and operations teams
Outcome
About 2.5 years in production; two forced partner migrations absorbed; restore-verified backups staged in a second AWS region

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 I had earlier taken to bank scale for Novopay and IDFC's Bharat Banking division, 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.

Agent device fingerprint scanner, QR, bills Finseer API one endpoint per service; adapters behind it Fino AePS cash-out Razorpay UPI / BharatQR BBPS bill payment Apache Fineract ledger agent float, customer accounts, GTV Grafana / Kibana published only after matching finance's reports
Every rail sits behind Finseer's own API and posts into one Fineract ledger. Dashboards read from the Elasticsearch analytics store and are published only after they match GIV finance's own reports.

Tradeoffs worth keeping

Still open at handover

Not everything was finished, and the backlog says so rather than hiding it. Three items were still open when the engagement ended in September 2024: moving the ledger database from MariaDB/MySQL to Postgres, a continuous-integration pipeline for the newer Fineract CN codebase, and a larger automated test suite. Long-term archival of the verified backups to cold storage was planned but not done. If I ran this again, the test suite would come first: both partner migrations had to be proven jointly with GIV in production, and more automated coverage would have shortened that.

← All case studies