M-PESA integration for SACCOs is where most digitization projects either earn their keep or quietly fall apart. Collections and disbursements both run on mobile money now, and the difference between a system that reconciles itself and one that needs a person matching statements at month-end is enormous. This guide walks through C2B paybill, B2C disbursement, the Daraja API, and the reconciliation discipline that keeps your ledger trustworthy.

The two flows that matter

Every SACCO touches M-PESA in two directions:

  • C2B (Customer to Business) — members paying into the SACCO via paybill: loan repayments, deposits, share contributions.
  • B2C (Business to Customer) — the SACCO paying out: loan disbursements, dividend payments, refunds.

Get both flowing through your core system automatically and the manual reconciliation problem largely disappears.

Paybill registration and C2B

C2B starts with a registered paybill number and a validation/confirmation URL that Safaricom calls whenever a member pays. The confirmation callback is the moment your system learns money has arrived. The trick is matching that payment to the right member account.

A payment you can't match to a member isn't income — it's a suspense entry waiting to become an audit finding.

A robust C2B handler does three things on every callback: validates the payment, identifies the member from the account reference, and posts to the ledger — or parks it in a clearly-flagged suspense account if the reference is wrong.

{
  "TransID": "RGH4K2P9LM",
  "TransAmount": "12000.00",
  "BillRefNumber": "SK-6417",
  "MSISDN": "2547XXXXXXXX",
  "TransTime": "20260608091402"
}

The BillRefNumber is the member number. Match it, post it, done — no spreadsheet required.

B2C disbursement

B2C is the outbound side: the SACCO instructing Safaricom to send money to a member. This powers loan disbursement and dividend runs. Because it moves money out, B2C demands tighter controls — multi-signer approval before a batch goes out, and a result callback that confirms each payment succeeded or failed so the ledger reflects reality.

Sandbox versus production

Always build and test against Safaricom's Daraja sandbox before going live. The sandbox lets you simulate callbacks and confirm your handlers behave before real money is involved. A safe rollout looks like:

  1. Implement and test C2B + B2C against the sandbox.
  2. Register the production paybill and shortcode.
  3. Run a small, supervised production pilot with real members.
  4. Scale up once reconciliation is clean for a full cycle.

The reconciliation problem — and how to kill it

Manual reconciliation is the tax most SACCOs pay for half-finished integration: someone exports an M-PESA statement, opens a spreadsheet, and matches transactions by hand. It is slow, error-prone, and exactly the kind of process examiners distrust — see the SASRA compliance checklist on audit trails.

Automatic reconciliation flips this. Every C2B callback posts straight to the member's account; every B2C result updates the disbursement record. At month-end there is nothing to match, because it was matched in real time. The few genuine exceptions — wrong references, reversals — surface in a queue instead of hiding in a spreadsheet.

Multi-branch and M-PESA

If you run several branches, payments still arrive on one paybill but belong to members across different home branches. Your system needs to route each payment to the right member regardless of where they bank — which is why multi-branch operations and M-PESA design go hand in hand.

How Sacco Kit handles M-PESA

Sacco Kit ships C2B and B2C as native flows with automatic ledger reconciliation — paybill registration, callbacks, and matching are handled, not left as a CSV export and a prayer. You can see the integration on the features page, and M-PESA C2B is available from the entry pricing tier, with the full suite higher up. The broader case for this approach is in our SACCO digitization guide.

Want to watch a live M-PESA reconciliation? Book a demo and we'll show you C2B and B2C reconciling themselves.