The verdict in three sentences
Mobile money reconciliation means cross-checking three sources — your site orders, operator webhooks and the settlement statement — so every franc collected matches a real order. Without this matching, a payment confirmed on the customer side but absent from the statement becomes an invisible accounting gap that blocks your close. The good news: on 2,000 transactions a month, a three-source method brings close time down from 6h to 45 min and makes every gap traceable in a single line.
Why gaps appear
A gap is always born from a lag between what the customer sees and what the merchant collects. The browser shows "payment successful" after a redirect, but the money only lands in the settlement account later — sometimes the next day. In between, a webhook can be lost, a refund can slip through, or an order can stay "pending" even though the wallet was actually debited.
The classic trap: counting revenue from orders marked "paid" on the site, without ever checking the real statement. On 2,000 transactions with an average basket of 12,000 FCFA, or 24,000,000 FCFA in volume, a 1.5% discrepancy rate means 30 lines and roughly 360,000 FCFA to trace. Those lines do not vanish: they resurface on the balance sheet.
| Source to match | What it proves | Retrieval frequency |
|---|---|---|
| Site order database | Purchase intent, expected amount | Real time |
| Operator webhook (M-Pesa, Wave) | Server confirmation of debit | Per event |
| Settlement statement | Money actually credited | Usually T+1 |
| Refund log | Outflows to deduct | Daily |
| Settlement detail file | Line by line of grouped payout | With settlement |
The rule: an order is only "collected" when the first three sources agree. Until the settlement statement confirms it, it stays in transit.
The causes of gaps and how to close them
Each type of gap has an identifiable cause and a closing action. Documenting this table once avoids re-investigating every month.
| Gap cause | Symptom | Closing action |
|---|---|---|
| Lost webhook | Order "pending" but wallet debited | Status polling, then mark as paid |
| Duplicate webhook | Two confirmations, one debit | Deduplication by transaction_id |
| Unlogged refund | Statement below site revenue | Match the refund log |
| Grouped settlement | 1 bank credit = 300 sales | Use the detail file |
| Operator fees | Constant gap of 1 to 1.8% | Provision fees per transaction |
| USSD timeout | Customer payment without order | Reconcile by operator reference |
An often-forgotten point: operator fees. If M-Pesa or Wave takes a percentage at source, the credited amount is lower than the amount paid. This is not a gap to correct but a charge to provision line by line, otherwise each transaction generates a micro-gap that accumulates.
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
Awa runs an online store in Nairobi. In March 2026, her site shows 2,000 paid orders for 24,000,000 FCFA (equivalent). Her M-Pesa settlement statement only shows 23,600,000 FCFA credited. Panic: 400,000 missing?
By cross-checking the three sources, she breaks down the gap: 360,000 FCFA are 3 customer refunds not logged in the site, and 40,000 FCFA are operator fees (about 0.17% taken at source, provisioned separately). Not a franc lost. The reconciliation, which took her 6h by hand, now runs in 45 min because the 1,987 matching lines are set aside automatically and she only reviews the 13 anomalous lines.
FAQ
How often should you reconcile? For volumes above 1,000 transactions a month, a daily reconciliation on the previous day's settlement (T+1) avoids buildup. Below 300 transactions, a weekly rhythm is enough.
What discrepancy rate is acceptable? A gross discrepancy rate of 1 to 1.5% is normal before investigation; after analysis, the unexplained gap should fall below 0.1%. Beyond that, there is a webhook or logging problem.
Do you need a tool or is a spreadsheet enough? Under 500 transactions a month, a spreadsheet with the three exports works. Above 2,000, automated matching that sets aside agreeing lines saves several hours per close.
What do you do with a payment that has no matching order? Trace it by the operator reference: often a USSD timeout or a customer who paid twice. Reconciliation by reference lets you attach or refund safely.
How long should you keep statements? At least 10 years to align with accounting obligations, keeping both the detail file and the refund log.
Let's talk about your project. We set up your three-source reconciliation so every close is clean and fast. 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.

