M-Pesa Daraja can fully automate school fee collection in Kenya — STK Push from a parent portal, Paybill reconciliation for parents who pay the usual way, automatic SMS receipts, and a real-time fee balance on the bursar's dashboard. A typical Kenyan academy goes from 90-minute evening reconciliations and 30% unreconciled payments to a 10-minute morning ritual and near-zero leakage, in 8–14 working days.
This guide is for the bursar, deputy or head teacher trying to scope the move. It explains how the two parent payment flows work, what Daraja-for-schools actually costs, why receipts have to fire from the school's own SMS provider as well as Safaricom's, and the security model parents will ask about.
The two parent payment flows
Parents in Kenya pay school fees one of two ways: they push from their phone to the school's Paybill the usual way, or they tap "Pay fees" in a parent portal and authorise an STK Push prompt. A Daraja-for-schools build supports both.
Both flows end the same way — money lands in the school's M-Pesa account and a confirmation arrives at the school server — but the user experience is different, and so are the reconciliation challenges. STK Push is friendlier; Paybill is what most parents already know. You need both.
STK Push from the parent portal
STK Push prompts the parent's phone to pay a specific amount to a specific account. The parent doesn't have to type a Paybill or remember an admission number. This is the cleanest user experience.
The portal collects the student, the fee category (tuition, transport, lunch, exam) and the amount. The school server then calls Safaricom with the parent's phone in 2547XXXXXXXX format. The parent sees a Lipa na M-Pesa prompt, enters their PIN, and Safaricom returns the receipt via the callback URL. The student account is credited in real time. See our full Daraja integration guide for the request shape.
Paybill reconciliation for the rest of parents
Most Kenyan parents will still pay the way they've always paid: Lipa na M-Pesa → Pay Bill → school's Paybill number → admission number → amount. The school needs to auto-reconcile this with the right student account, not type it in by hand.
Daraja's C2B confirmation flow does exactly this. Every payment to the school's Paybill triggers a callback to the school server with the amount, the M-Pesa receipt number, the payer's phone and the account reference the parent typed. If the account reference matches a known admission number, the system credits the student account automatically. If it doesn't, the payment goes into a needs-review queue (see below).
SMS receipts that actually land
Parents in Kenya open SMS. They often don't open email. Receipts need to fire over SMS — from the school's own SMS provider (Africa's Talking is the standard), not just Safaricom's default M-Pesa confirmation.
Two receipts go out per successful payment:
- Safaricom's confirmation — automatic, comes from the M-Pesa shortcode. Cryptic to the parent ("you paid 12,500 to PAYBILL 1234567 acct ADM/4521 ref TG56HXK").
- School's confirmation — sent within seconds via Africa's Talking. Reads: "Asha Hassan — KES 12,500 received for Term 2 tuition. Balance: KES 3,500. Thank you, Bridgerose Academy."
The school's SMS is the one parents trust. It names the child, names the fee category, names the school. That single line stops 80% of "did my payment go through?" parent calls.
The reconciliation queue (and why it matters)
Roughly 1–3% of M-Pesa payments to a school Paybill don't auto-reconcile — the parent typed the admission number wrong, the previous sibling's account, or just "fees". A reconciliation queue surfaces these for the bursar to resolve in seconds instead of letting them rot.
A well-built Daraja-for-schools integration also runs a reconciliation sweep every 60–120 seconds to catch callbacks that never arrived. (Safaricom is reliable but not perfect — networks drop, and a missed callback means the school is paid but doesn't know it.) The sweep queries M-Pesa transaction status for pending payments and clears them retroactively.
Security and data ownership
The parent's M-Pesa PIN never leaves Safaricom's side — the school server only sees the receipt number, phone number, amount, and the matched student account. All of it should be encrypted in transit (HTTPS) and at rest, with role-based access.
- HTTPS-only callbacks. Safaricom won't even whitelist a plain-HTTP callback URL in production.
- Role-based access. The class teacher cannot see fee balances. The parent sees only their own child. The bursar sees fees. The head sees everything.
- Daily backups. The student/fee data is the school's most valuable record. Daily encrypted snapshots, 30-day retention.
- The school owns the Daraja credentials. If the school changes vendors, the credentials stay with the school. Owldid hands them over with the project.
What it costs in 2026
A school-side Daraja build that covers STK Push from a parent portal, Paybill C2B reconciliation, SMS receipts via Africa's Talking and the 60-second reconciliation sweep typically costs KES 45,000–95,000 one-off, ships in 8–14 working days, and reuses the school's existing Paybill.
The price moves on:
- Whether the school already has a Paybill. If yes, faster. If not, factor 2–4 weeks of Safaricom KYC into the timeline (developer time is unchanged).
- SMS volume. A 480-learner school doing 3 receipts per pupil per term burns ~4,300 SMS/term — roughly KES 2,200–4,500/term at Africa's Talking rates.
- Reporting depth. Pure receipt + balance is fast. "Weekly fee-collection report auto-emailed to the head with cohort-level breakdown" is two extra days.
Owldid bundles Daraja-for-schools into the standard Owldid Systems setup; standalone Daraja-on-an-existing-school-system is also available. See our transparent pricing guide for full ranges.
Frequently asked questions
Want Daraja-for-schools without the 2-week Safaricom dance?
We've shipped this exact stack for Kenyan academies of 200–1,500 learners. We handle the Safaricom side, build the reconciliation engine, write the SMS templates and train the bursar.
Start a project → WhatsApp +254 113 333 522