Achekam

Reconciling M-Pesa takings in your Kenyan books

How a Kenyan business follows M-Pesa money from the customer's phone to the bank through a clearing account, with charges, rounding and missed payments.

By Achekam · · 5 min read · For Running a business businesses in Kenya

M-Pesa reconciliation accounting

M-Pesa makes getting paid easy and reconciling hard. A customer pays your paybill from a matatu stage, a cashier takes a Buy Goods payment at the counter, and by the end of the month the money has moved twice: once onto your M-Pesa account, and again, less charges, into the bank. If the books only see the second movement, nothing lines up. Sales look short, the bank looks long, and the difference hides in a suspense account until year end.

The fix is to give M-Pesa its own place in the ledger and follow the money through it, step by step. This article shows how that works in Achekam, for invoice payments and for till sales, and what to check before you call the month done.

A clearing account between the phone and the bank

Treat money received through M-Pesa as sitting in a clearing account until it reaches your bank. A receipt goes into the clearing account when the customer pays. A payout comes out of it when you move the money to the bank, together with the charges that were deducted on the way. Whatever is left in the clearing account at month end should be exactly the money still sitting on your M-Pesa account.

Achekam works this way. Till sales paid by M-Pesa post to their own account (1070), separate from cash, card and bank transfers. Invoice payments made through a payment gateway go to that gateway's clearing account. Either way, M-Pesa money has a home of its own until it is paid out.

Invoice payments through the clearing account

A Kenyan business can send an M-Pesa payment prompt to a customer's phone for a shilling invoice, to its paybill or Buy Goods till. The payment is confirmed with Safaricom before it counts. When it is verified, Achekam records a receipt against the invoice: it debits the gateway's clearing account and credits trade receivables, and the invoice shows as paid or part-paid. The amount is checked against what the prompt asked for, and a repeated notification never pays the invoice twice.

Two details affect reconciliation:

  • Only whole shillings are requested. If an invoice ends in cents, the cents stay due on the invoice. Agree with your accountant how you will clear those small balances, rather than letting them pile up on the debtors list.
  • Production use needs Safaricom's Go-Live. Until your short code has been through it, prompts are not live. See taking M-Pesa live.

Till sales and rounding differences

At the till, Achekam takes M-Pesa by a prompt to the customer's phone, or lets the cashier claim a payment the customer made directly to the paybill or till by its M-Pesa code. Every till sale that reaches the server posts a balanced journal in the same step: the M-Pesa account, revenue, output VAT, and cost of sales against inventory.

By default, an M-Pesa amount at the till is rounded up to the whole shilling. A business can set rounding to down or to nearest instead, and the difference is recorded on the sale. When you reconcile, those differences explain why the M-Pesa total does not equal the sum of the shelf prices to the cent. Look at them as a group each month: a steady trickle is normal; a large or one-sided pattern deserves a question.

Payments picked up by status checks

Sometimes the customer pays and the notification never arrives. The phone shows the money gone; your system shows nothing. For M-Pesa, Paystack and Pesapal, Achekam still picks the payment up, because the server asks the provider about open payments on a schedule and while the pay page is open.

That reduces the classic M-Pesa headache of a customer holding a confirmation message for an invoice that still shows unpaid. It does not remove the need to look. If a customer says they paid and the invoice is still open, check the M-Pesa statement for their code before you chase them.

Recording payouts to the bank, with their charges

When money leaves your M-Pesa account for the bank, record the payout against the clearing account, with its fees. For M-Pesa, you record it by hand. (Paystack and Flutterwave payouts can be read from those providers' own payout lists.)

A worked example in words. During the week, the clearing account collects every M-Pesa receipt. On Friday you move the balance to the bank. The bank receives the amount transferred, less Safaricom's charges. You record one payout: the amount that reached the bank goes to the bank account, the charges go to an expense account, and the total of the two comes out of the clearing account. The clearing account is now back to whatever has come in since.

Safaricom's M-PESA Paybill page describes the paybill service, including the real-time reports and statements you can draw on to check each payout against what was collected.

Matching the bank line

Import the bank statement as PDF, CSV, Excel, OFX, QIF, MT940 or CAMT.053. Each import is checked so that the opening balance plus the movements equals the closing balance, which catches a missing page before it becomes a missing payment.

Bank lines are then matched by suggestion, and a person accepts each match. The payout you recorded should match the bank's credit from M-Pesa. A bank line that is not yet in the books becomes a suggested journal that a person approves. The reconciliation completes only when the books and the statement agree, or when every leftover line has been explained.

One limit to keep in mind: the ledger screens currently show every amount in rand, and the chart of accounts is stored in ZAR, even for a Kenyan business. Bear that label in mind when you compare the ledger with an M-Pesa statement in shillings.

A month-end routine

  1. Download the M-Pesa statement for the month.
  2. Compare the receipts on it with the receipts in the clearing account, looking for codes that appear on one and not the other.
  3. Review the till rounding differences as a group.
  4. Check every payout to the bank is recorded, with its charges.
  5. Confirm the clearing account balance equals the money still on the M-Pesa account.
  6. Reconcile the bank, accepting matches and explaining every leftover line.

Schools collecting fees by paybill face the same steps at a larger volume; see school fees through M-Pesa paybill. For payouts from several gateways at once, read gateway payouts and fees.

General guidance only, not advice on your own circumstances. Tax and payroll rules change: check the current position with the authority or your adviser.

Related articles

More on Running a business

See how Achekam handles it with your own records: create your account