Skip to content
FundiPay

M-Pesa B2C vs B2B

M-Pesa looks like one thing from the outside, but under the hood it is several different products. Sending wages to a fundi's phone, paying a subcontractor's till and collecting money from a customer all use different channels, with different rules, costs and records. Choosing the wrong one for wages is a common and expensive mistake. This guide compares M-Pesa B2C vs B2B and the alternatives, so you can pay your site on the right rail.

Updated October 17, 2026 · Guides

What each M-Pesa channel is actually for

The channel should match the direction of money and the party receiving it. Confusing them is where most payroll errors begin.

  • B2C (Business to Customer) — the business pays out to an individual's personal M-Pesa number. This is the correct channel for wages.
  • B2B (Business to Business) — the business pays another registered organisation, such as a subcontractor firm's till or paybill.
  • STK Push (M-Pesa Express) — a prompt sent to a customer's phone to collect money. Useful for contributions, never for wages.
  • Personal accounts — a person sending to a person. Convenient, but not a payroll system.

Why wages belong on B2C

Wages go to individuals, so they go B2C. A payroll run can pay a whole site in one instruction, each fundi receives the money directly on their own number, and every transaction carries a reference back to the attendance record it was built from. That is what turns a transfer into an auditable payment.

The costly mistake: paying wages from a personal account

Paying wages from your personal M-Pesa is the single most common short cut on Kenyan sites, and it quietly costs you. Transactions go one at a time, so a 40-worker site takes an afternoon of tapping. Fees are charged at personal rates rather than business rates. Worst of all, there is no payroll record — no payslip, no returns, no way to prove who was paid. When NCA, KRA or a developer asks, the trail does not exist.

How to read an M-Pesa transaction result

A B2C payment returns a result per worker, not per run. Watch for three states: success, where the money has landed and a confirmation SMS went to the fundi; pending, where the request is still with Safaricom; and failed, usually because the number is wrong or the account is inactive. Failed payments return to your float and can be retried individually after you verify the number with the worker, without rebuilding the whole payroll. FundiPay shows every result on one screen and reconciles each line against the M-Pesa callback.

Frequently asked questions

Can I pay a subcontractor through B2C as well?

You can pay a subcontractor's workers B2C if you are running their payroll, but a firm's own account or till is paid B2B. Many contractors use both: B2B to settle the subcontractor firm, and B2C where they pay the gang directly.

Is there a limit on a B2C payment to one worker?

Safaricom sets tiered per-transaction B2C limits, commonly quoted up to KES 250,000 depending on the channel tier. Daily construction wages sit far below that, and larger sums are split across transactions automatically.

Do I need my own Daraja integration to use B2C?

Not with FundiPay. We run M-Pesa B2C on approved channels, so you pay wages without building or maintaining a Daraja integration yourself. Your business still gets the full transaction trail and payslips.

What happens to a failed wage payment?

The money returns to your float, and FundiPay flags the failure with the reason. You correct the number, confirm it with the worker and their ID, then retry that single payment — the rest of the payroll is unaffected.

Keep reading

Pay every fundi on Friday

Direct M-Pesa B2C, geofenced muster rolls and a 14-day payroll float — built for Kenyan construction sites. Bila ya kutoa.