M-PESA Business-to-Customer (B2C) is how a business pays out to a customer, supplier or employee M-PESA number from its paybill. It is the outbound counterpart to Buy Goods and paybill inbound. Used for salaries, supplier payments, customer refunds, insurance payouts, bookmaker winnings and loan disbursements. This guide covers how it works, when to use the Business Portal vs the Daraja API, and how to reconcile against supplier invoices and refund tickets. Note: this guide is for business paying out to customers or suppliers, not customers paying the business.
What B2C is (and is not)
B2C moves M-PESA from a business paybill balance to any customer M-PESA-registered MSISDN. It is not a customer paying a business (that is Buy Goods or paybill C2B). It is not a business paying another business (that is B2B, a separate product line for merchant-to-merchant transfers). It is not a personal send. The recipient sees the transfer as coming from the branded business name.
| Product | Direction | Typical use |
|---|---|---|
| Buy Goods (till) | Customer to business | Retail checkout |
| Paybill C2B | Customer to business | Bills with account reference |
| B2C | Business to customer | Salary, refund, payout, supplier payment |
| B2B | Business to business | Merchant-to-merchant transfer |
When to use B2C vs Buy Goods reversal or personal send
Three common wrong choices we see. First, using a personal M-PESA to refund a customer because it feels quicker: this pollutes the personal wallet, has no audit trail against the business books, and eats consumer send tariffs. Second, initiating a Buy Goods reversal for what should have been a supplier prepayment: reversals are for errors, not routine outbound. Third, doing all supplier payments by bank transfer when the supplier has an M-PESA line and would prefer instant settlement: B2C is often faster and reconciles more cleanly.
Business Portal Bulk Payment vs Daraja B2C API
| Business Portal (Bulk Payment) | Daraja B2C API | |
|---|---|---|
| Best for | Under 20 payments per day, ad-hoc | 20+ payments per day, or real-time payouts |
| Setup | Login only; roles Initiator + Approver | Daraja app registration, credentials, callback endpoints |
| Latency | Manual approval loop (minutes) | Sub-second per transaction |
| Approval flow | Two-user, in-portal | System-level; sign in your own approvals |
| Cost | Bulk Payment feature is free; per-txn tariff still applies | API free; per-txn tariff still applies |
How to send a B2C payment via the Business Portal
- 1. Confirm B2C is enabled on your paybill. Log into m-pesaforbusiness.co.ke. Settings then Product enablement. B2C must be provisioned by Safaricom against your paybill. If not, submit a request through your account manager or Safaricom Business Support (0722 002 100).
- 2. Prepare the payment file. For a single payment, use the Bulk Payment single-entry form: recipient MSISDN, amount, reference, remarks. For batch, download the CSV template, fill (MSISDN, amount, reference, remarks per row), save as CSV.
- 3. Upload and validate. On Bulk Payment, upload the CSV. The portal validates MSISDN format and amount. Fix any red rows before proceeding.
- 4. Initiate for approval. The Initiator role submits the batch for approval. It moves to a queue for the Approver / Checker.
- 5. Approve the batch. A different user with Approver role signs off. Safaricom rules require separation of duties: initiator cannot approve their own batch.
- 6. Safaricom executes and confirms. Each payment is executed within seconds. Portal shows success or failure per row. Recipient receives the branded SMS.
- 7. Reconcile against source. Download the batch result CSV. Cross-check every row against the source invoice or refund ticket in your system. Mark supplier invoices paid.
Daraja B2C API notes
The Daraja B2C API endpoint is at api.safaricom.co.ke and requires OAuth 2 client credentials, a security credential (encrypted initiator password), and callback URLs for result and timeout. The five permitted command IDs are BusinessPayment, SalaryPayment, PromotionPayment, BusinessPayBill and BusinessBuyGoods; use BusinessPayment for supplier and refund flows, SalaryPayment for payroll (better SMS wording to the recipient). Safaricom publishes the full spec at developer.safaricom.co.ke.
Reconciliation against supplier invoices and refunds
Every B2C batch produces a result CSV (or a callback stream in the API case) with transaction reference, MSISDN, amount, timestamp and status per row. Cross-check against the source system:
- Supplier payments. Match by supplier invoice number in the reference field. Mark the invoice paid in your ledger with the M-PESA reference. File the result CSV alongside the invoice PDF.
- Customer refunds. Match by refund ticket number in reference. Update the customer service system with the M-PESA reference. Close the ticket.
- Payroll. Match by staff ID in reference. Update payroll register. Any failed rows get re-run manually the same day.
Per-transaction and per-day limits
Default B2C per-transaction cap is KES 250,000 (Source: Safaricom Consumer Tariffs and Merchant Agreement). Higher limits (KES 500,000 and above) are available for approved paybills subject to additional KYC and category approval. Per-day and per-recipient limits are set in your Merchant Agreement; ask your account manager for the current schedule before modelling payout volume.
Tax and audit angle
Every B2C payout should be tied to a business purpose: supplier invoice, refund ticket, payroll register, payout policy. Ad-hoc B2C payments to friends or family from the paybill are a KRA compliance risk (looks like disguised distributions) and an internal-control failure. Set a policy: no B2C without a matched source document and a two-user approval.
Related business guides
- M-PESA for Business hub
- M-PESA daily till reconciliation
- M-PESA reconciliation mismatch
- Customer disputes and chargebacks
- Float management for shops and agents
- How to accept M-PESA payments in your shop
- How to get an M-PESA paybill number
- Paybill vs Buy Goods charges
- M-PESA charges 2026
FAQ
What is M-PESA B2C?
Business-to-Customer. A business sends M-PESA to a customer or supplier phone number from a paybill shortcode. Used for salary payments, refunds, insurance payouts, betting winnings, loan disbursements and supplier payments. It is the outbound counterpart to Buy Goods (which is inbound). B2C is only available on paybill shortcodes; Buy Goods tills cannot send.
How is B2C different from just sending money from a personal M-PESA?
B2C settles from the paybill balance (business account), not a personal wallet. It carries the business name in the recipient SMS (branded remitter identity). It can be issued via the Daraja API for volume. It has business-tier per-transaction limits (typically higher than personal). And it reconciles cleanly against the paybill statement for audit and KRA reporting.
How much does B2C cost?
B2C is charged to the paybill on a negotiated tariff schedule with Safaricom, typically KES 20 to KES 108 per transaction depending on band and volume. For a paybill sending high volume (payroll, bookmaker payouts), Safaricom negotiates a bulk rate. Refer to your current Merchant Agreement for the exact schedule. Do not confuse with the customer send tariff, which does not apply here.
When should I use B2C vs sending via the manual portal?
Below roughly 20 payments per day, the manual Business Portal (Bulk Payment) route is fine: log in, upload a CSV, authorise, send. Above 20 per day, Daraja API automation pays for itself in staff time. Bookmakers, e-commerce refunds and SACCOs process thousands per day and always run API.
What is the B2C per-transaction limit?
Default paybill B2C per-transaction limit is KES 250,000. Higher limits (up to KES 500,000 or more) are available for approved paybills on request, with additional KYC on the recipient category. Per-day and per-recipient caps are also set in the Merchant Agreement.
How does the recipient see a B2C payment?
Recipient receives an SMS from MPESA reading: transaction code, Confirmed. You have received KshXXX,XXX from [Business Name] on [date] at [time]. New M-PESA balance is KshXXX,XXX. The business name is the registered paybill name, not a phone number. This branded remitter identity is one of the biggest UX differences from a personal send.
Can B2C be reversed?
Yes, within the seven-day reversal window, on the same rules as inbound. The business initiates via the Business Portal (or dials 456 as the paybill) with the transaction reference. If the recipient has already withdrawn, reversal requires them to top up their wallet first; Safaricom will not overdraw a wallet.
Verified 1 September 2026. Product limits and tariffs from Safaricom Consumer Tariffs and Merchant Agreement. Daraja API references from developer.safaricom.co.ke on 1 September 2026.
Related reading
Curated external sources we cite. Open in a new tab.