Skip to content
FundiPay

How to Pay Construction Workers with M-Pesa in Kenya

Paying construction workers with M-Pesa is now the default in Kenya — the days of the Friday cash envelope are ending, pushed out by risk, regulation and simple convenience. But "sending money on M-Pesa" and "running payroll by M-Pesa" are very different things. This guide walks a contractor through the right way to move wages from the business account to a fundi's phone, with a clean audit trail and every statutory deduction handled.

Updated October 17, 2026 · Guides

Step 1: Choose the right M-Pesa channel

Sending wages from a normal M-Pesa personal account is the most common mistake contractors make. It is slow (one transaction at a time), expensive (per-transaction costs add up), and legally weak — the payments are not tied to any payroll record. Businesses use Safaricom's Daraja APIs instead, which integrate M-Pesa directly into payroll software like FundiPay.

  • B2C (Business to Customer) — the business pays out directly to workers' personal M-Pesa numbers. This is the correct channel for wages, and it is what FundiPay uses.
  • B2B (Business to Business) — money to another registered organisation, e.g. paying a subcontractor firm's till, not the individual workers.
  • STK Push (M-Pesa Express) — collecting money from a customer's phone; useful for contributions, not for wages.

Step 2: Register for the Daraja API and M-Pesa Business

To send B2C payments you need a Paybill or Till number and API credentials from Safaricom's Daraja portal, with B2C enabled on your organisation. This requires KRA PIN and business registration documents. When you use FundiPay, we run this integration for you on our approved channels — the contractor does not have to navigate Daraja at all.

Step 3: Build the payment list from attendance, not memory

The payroll amount should come from a verified source: a locked digital muster roll showing days actually worked, timesheets, or gang allocations. The most expensive line item on Kenyan construction payroll is paying for days nobody worked. FundiPay ties every payment line to an attendance record, so the list pays exactly who was on site.

Step 4: Apply statutory deductions before sending

Wages are not the whole gross. Before money moves, the payroll must account for PAYE (where the worker is on a regular contract), NSSF contributions, the SHIF health contribution and the Affordable Housing Levy. Casual daily wages have their own rules around thresholds. FundiPay calculates these per worker automatically and produces the returns — see our guides on each deduction below.

Step 5: Disburse, confirm and issue payslips

Each worker receives their net wage directly on their phone, with an M-Pesa confirmation SMS and a FundiPay payslip showing gross, deductions and net. The contractor sees one screen with every transaction's result — success, pending or failure — and failed payments can be retried without rebuilding the payroll. Every line is reconciled against the M-Pesa result callback, so the bank position and the payroll always agree.

Frequently asked questions

How much does it cost to pay workers by M-Pesa B2C?

Safaricom charges tiered B2C transaction fees that decrease as volume rises. Because FundiPay runs many sites on shared approved channels, the effective cost per payment is typically far below paying workers individually from a personal M-Pesa account — and the admin time saved is usually larger than the fees themselves.

Is there a limit on how much I can pay a worker by M-Pesa?

Yes — Safaricom sets per-transaction B2C limits (widely used tiers run up to KES 250,000 per transaction, depending on the channel tier). Daily construction wages sit far below this; larger sums, such as loan settlements or supervisor bonuses, are split across transactions automatically.

Do casual workers on daily wages need payslips?

Any worker on a recognised contract is entitled to a payslip showing earnings and deductions. Daily casuals are entitled to a record of days worked and pay received. FundiPay issues digital payslips to every worker on the platform — it costs nothing and ends most pay disputes instantly.

What if a worker's M-Pesa number is wrong or the account is inactive?

The M-Pesa transaction fails and returns to your float. FundiPay flags the failure on the payroll screen with the reason, you update the number after verifying it with the worker (and their ID), and retry the 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.