The verdict in three sentences
Most lines that refuse to match come from two culprits: fees booked gross instead of net, and cancelled or reversed transactions. The fix isn't to match harder but to normalise before matching. In 2026 a clean rule set moves the anomaly rate from 3-8 % to under 1 % and shrinks the close from 2 days to 3 hours.
The 7 error classes
Before blaming the software for bad matching, understand where the gaps come from. Seven classes recur systematically on mobile-money statements.
| # | Error | Cause | Fix |
|---|---|---|---|
| 1 | Gross vs net fee | amount shown before fees | normalise on net |
| 2 | Reversals | cancelled then replayed | flag and exclude |
| 3 | Partial refunds | credited ≠ debited | match by reference |
| 4 | Timezone drift | UTC vs local timestamp | force one time zone |
| 5 | Duplicate references | same ref on 2 lines | sequential suffix |
| 6 | Rounding | cents vs whole unit | ±1 tolerance |
| 7 | Till vs Paybill | two M-Pesa accounts mixed | split the channels |
On M-Pesa, till fees range between 0 and 0.55 % by tier — enough to create a systematic gap if you compare gross to net.
Before / after normalisation
The impact of a rule set is dramatic. Here is the order of magnitude observed on a typical 2026 monthly close.
| Metric | Before rules | After rules 2026 |
|---|---|---|
| Flagged lines | 3 to 8 % | < 1 % |
| Close duration | ~2 days | ~3 hours |
| Unexplained gaps | frequent | rare |
| Reversals handled | manual | auto-excluded |
| Trust in the numbers | low | high |
The secret: apply the 7 fixes upfront, once, then let the matching engine work on already-clean data.
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
Grace runs a hair salon in Nairobi with two M-Pesa accounts (one Till, one Paybill). Her monthly close took 2 days because 6 % of lines didn't match: she compared the displayed gross to the net amounts credited, and mixed Till and Paybill. After splitting the channels and normalising on net, her anomalies fell to 0.7 %. Her close now takes 3 hours, and she caught 3 reversals of 12,000 KES she had wrongly counted as revenue.
FAQ
Why do gross/net fees cause so many gaps? Because the statement often shows what the customer paid, while your bank receives the net after fees. Comparing the two creates a systematic gap equal to the fee.
How do I handle reversals cleanly? Flag them with a dedicated status and exclude them from revenue. Never treat them as cancelled sales buried in the pile — it's the number-one source of wrong books.
Is timezone drift really a problem? Yes. A payment at 23:45 local can appear the next day in UTC, breaking your daily matching window. Force a single time zone everywhere.
What anomaly rate should I target after cleanup? Under 1 %. Above 2 %, a rule is almost always unapplied — usually mixed Till vs Paybill or rounding.
Do I need software or is a spreadsheet enough? Under 100 transactions a day, a spreadsheet with well-set rules is enough. Beyond that, an automated engine avoids human error and month-end fatigue.
Let's talk about your project. We can set your 7 normalisation rules and make your close reliable. 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.

