The verdict in three sentences
The transaction date (when the customer pays) and the settlement date (when the money lands in your account) are never identical — confusing them breaks every reconciliation. In Nairobi in 2026, the gap ranges from T+0 to T+2, with payout fees taken on the platform side. The only reliable method is a 3-level reconciliation: gateway, provider statement, bank.
Who settles when: the 2026 settlement table
Each rail has its own rhythm. A merchant expecting two providers on the same day is off by one or two days of cash.
| Rail | Settlement delay | Payout fee (order of magnitude) | Daily receiving cap |
|---|---|---|---|
| M-Pesa (instant rail) | T+0 | 0.5 to 1 % | 2 to 10 M FCFA-eq |
| Airtel Money | T+1 | 0.8 to 1.2 % | 2 to 5 M FCFA-eq |
| Card gateway | T+1 to T+2 | 1 to 1.5 % | 2 to 5 M FCFA-eq |
| Wallet aggregator | T+1 to T+2 | 1 to 1.5 % | 1 to 3 M FCFA-eq |
| Bank transfer | T+2 to T+3 | 500 to 1,500 FCFA-eq fixed | No cap |
The average gap found before automation is 0.2 to 0.8 % of volume: mis-anticipated payout fees, unresolved pending transactions, and refunds booked on the wrong day.
The 3-level reconciliation workflow
One level is never enough. You must cross-check three independent sources and handle gaps by category.
| Level | Source compared | What it catches | Frequency |
|---|---|---|---|
| 1 — Gateway | App transaction log | Duplicates, inconsistent status | Real time |
| 2 — Provider statement | M-Pesa/Airtel export | Actual vs expected fees | Daily |
| 3 — Bank | Settlement account statement | Actual settlement received | Daily / weekly |
The status mapping table is the heart of the system: successful at the gateway must map to settled at the provider and then to a bank credit. Any transaction still pending beyond 48 h triggers a getStatus call, then, if still undetermined, manual handling with a provider ticket.
Need a professional website?
Kolonell builds websites that attract clients, optimized for the Sénégalese market. Free quote in 2 minutes.
Mini case study
Koffi runs an online grocery in Nairobi, 6,000,000 FCFA-equivalent collected per month, split M-Pesa 55 %, Airtel 30 %, card 15 %. Before automation, he reconciled everything "at payment date" and found a ~30,000 FCFA gap (0.5 %) each month-end, wrongly blamed on unpaid orders. Switching to 3-level reconciliation isolated the cause: card payout fees (1.3 %) and aggregator settlements shifted to T+2. Residual gap after automation: under 0.05 %.
FAQ
Why does my bank balance never match my daily revenue? Because settlement is delayed: today's revenue lands at T+0 to T+2 depending on the rail. Always compare to settlement date, not sale date.
What about a transaction pending for 3 days? Beyond 48 h, call getStatus. If the provider confirms failed, cancel the order; if successful, force reconciliation. These cases are 0.1 to 0.5 % of volume.
Are payout fees fixed? No. They range from 0.5 % (instant rail) to 1.5 % (card/aggregator). Including them in reconciliation avoids blaming these amounts on unexplained gaps.
Do I need to reconcile daily? Levels 1 and 2 yes, daily. The bank level can be weekly at low volume, but daily from 5,000,000 FCFA-equivalent per month.
Is slower settlement always worse? Not always: a T+2 bank transfer with no receiving cap can suit high volume despite the delay. It depends on your cash needs.
Let's talk about your project. We build your 3-level reconciliation workflow with a status mapping table and automatic handling of pending transactions. WhatsApp +221 77 596 93 33.
Mohamed Bah
Fondateur, Kolonell
Passionate about digital and entrepreneurship in Africa, Mohamed has been helping Sénégalese businesses with their digital transformation since 2020. Founder of Kolonell, he believes every SME deserves a professional and accessible online présence.
