The verdict in three sentences
Manual matching of mobile money settlements costs on average 6 hours a week and leaves 2.3% of transactions unmatched — sales collected but never confirmed, or disputes lost for lack of proof. A webhook + ledger reconciliation matches each payment in real time, with callback latency under 5 seconds on M-Pesa Daraja. Measured result: the error rate falls from 4% to 0.2%, and the 72-hour dispute window stops being a race against the clock.
Why manual matching leaks
The CSV method is simple but fragile: you export operator settlements, export shop orders, and try to match the two by hand. The slightest mismatch — a rounded amount, a T+1 settlement landing the next day, a partial refund — breaks the match. Across hundreds of transactions, error accumulates.
The real-time ledger inverts the logic: each Daraja C2B callback or Wave webhook immediately writes a line into an immutable ledger, auto-matched to the corresponding order. Nothing is lost, nothing is matched by hand.
| Criterion | Manual CSV matching | Real-time webhook ledger |
|---|---|---|
| Weekly time | 6 h | < 15 min (review) |
| Unmatched transactions | 2.3% | 0.2% |
| Match latency | T+1 (at export) | < 5 s (callback) |
| Error rate | 4% | 0.2% |
| Dispute evidence | to reconstruct | timestamped, instant |
| 72h dispute window | tight | comfortable |
| Reversal fee | variable | KES 0 (M-Pesa) |
What real time changes on M-Pesa and Wave
On M-Pesa, the Daraja API sends a C2B callback within 5 seconds of the customer's payment. On Wave, the confirmation webhook plays the same role. The key is idempotency: if a callback is replayed, the ledger creates no duplicate. Without it, a single network retry can count a sale twice.
| Metric | 2026 benchmark |
|---|---|
| Daraja callback latency | < 5 s |
| M-Pesa settlement | T+1 |
| Matching time saved | 6 h / week |
| Dispute window | 72 h |
| Error rate after automation | 0.2% |
| M-Pesa reversal fee | KES 0 |
*2026 orders of magnitude; latencies depend on operator network load.*
Mini case study
Need a professional website?
Kolonell builds websites that attract clients, optimized for the Sénégalese market. Free quote in 2 minutes.
Fatou runs an online grocery in Nairobi, 1,400 M-Pesa orders a month. Manually, 2.3% stayed unmatched — 32 transactions a month in a grey zone. On a KES 1,200 average basket, that's KES 38,400 of poorly tracked revenue monthly, some of it lost to disputes she couldn't prove. With a webhook ledger, she drops to 0.2% (3 transactions), recovers 6 hours a week, and defends every dispute with a timestamp. Within a month, she paid off the automation.
FAQ
What is idempotency and why is it vital?
It's the guarantee that the same replayed webhook creates no duplicate in your ledger. Without it, a network retry can count a sale twice or trigger a double refund.
Does T+1 settlement complicate matching?
No, if the ledger separates payment confirmation (real time) from bank settlement (T+1). You confirm the order immediately and reconcile the transfer the next day, without confusion.
How long to set up automated reconciliation?
Expect 3 to 6 days: wiring Daraja/Wave webhooks, building the idempotent ledger, and a control dashboard. The bulk of the work is testing replays and edge cases.
Can I keep my accounting software?
Yes: the ledger feeds a clean, already-matched export into your accounting. You no longer match — you review.
Let's talk about your project. We wire your M-Pesa and Wave webhooks into an idempotent ledger and remove your manual matching. 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.

