Skip to content

Recurring Payments and Subscriptions in Kenya: Billing That Actually Works

Subscriptions are easy on cards and hard on M-Pesa, because M-Pesa needs the customer's PIN every time. Here is how recurring billing really works in Kenya - and how to make it collect.

By Karani Geoffrey, Founder & CEO, Upeosoft
In short

Recurring billing is straightforward on cards through tokenization, but M-Pesa has no silent auto-charge - each STK Push still needs the customer's PIN. Reliable subscription billing in Kenya combines card tokens where available, M-Pesa standing-order tools like M-Pesa Ratiba or scheduled STK prompts, smart retries, and dunning to recover failed collections.

Key takeaways
  • Cards support true recurring billing: tokenize once, charge automatically on each cycle.
  • M-Pesa has no silent auto-debit - a standard STK Push still requires the customer to enter their PIN each time.
  • M-Pesa Ratiba (recurring payments / standing orders) and scheduled STK prompts are the practical M-Pesa options.
  • Failed collections are normal, so retries and dunning (reminders and re-attempts) are core, not optional.
  • Model subscription state properly: active, past-due, grace period, suspended - not just paid or unpaid.
  • Involuntary churn - subscriptions lost to failed payments, not unhappy customers - is recoverable with good billing logic.

Why recurring billing is harder here than abroad

Subscription businesses elsewhere assume a saved card that charges itself every month. In Kenya, where M-Pesa dominates, that assumption breaks - and it is the single biggest reason local subscription products struggle to collect.

The issue is consent. M-Pesa is built so the customer authorises each payment with their PIN. That is great for security and terrible for silent monthly billing. So building subscriptions in Kenya is less about writing a charge loop and more about designing around how customers can and will authorise repeated payments.

Cards: the easy case

Where your customers have cards, recurring billing works the familiar way. The first payment tokenizes the card - you store a token, never the number - and each cycle your system charges that token automatically, no customer action needed.

The work that remains is handling the edges: cards expire, banks decline, and some charges trigger a 3D Secure step. A solid card subscription system detects an expiring card and prompts the customer to update it before it lapses, and retries soft declines intelligently. But the core - charge automatically each month - is genuinely easy on cards. If your audience is card-holding (corporate, diaspora, higher-end consumer), lead with cards for recurring.

M-Pesa: the honest picture

On M-Pesa there is no equivalent of a silently charged saved card. A standard STK Push always asks the customer for their PIN, so you cannot debit them in the background. Pretending otherwise leads to billing systems that simply do not collect.

There are two realistic paths. One is M-Pesa's recurring payments / standing-order facilities - M-Pesa Ratiba - where the customer sets up an authorised recurring debit, closer to a true mandate. The other is to schedule an STK Push each cycle and prompt the customer to approve it, treating billing as a nudge-and-confirm flow rather than a silent debit. Both are legitimate; both require designing the customer experience around authorisation, not hiding it.

Failed payments are normal - plan for them

In Kenyan recurring billing, a meaningful share of charges will fail on the first try, and almost none of those failures mean the customer wants to leave.

  • An M-Pesa prompt arrives when the customer is busy and goes unanswered.
  • The wallet or account is momentarily short of funds - common right before payday.
  • A card has expired or the issuer soft-declines a legitimate charge.
  • A network timeout leaves a charge in limbo, neither clearly paid nor failed.
  • The customer simply misses the notification the first time.

Retries and dunning: where subscriptions are saved

Because failures are mechanical, recovery is largely mechanical too. This is dunning: a structured sequence of retries and reminders that turns a failed charge back into a paid one.

Good dunning re-attempts on a sensible schedule - not five times in an hour, but spaced across days, ideally timed around when customers have funds. It reminds the customer through their preferred channel, with a one-tap way to complete the payment. It escalates gently: reminder, retry, grace period, then suspension only as a last step. Businesses that do this recover a large share of would-be lost subscribers; businesses that treat the first failure as a cancellation bleed revenue they never had to lose.

Model subscription state, not just payment status

The hidden complexity of subscriptions is state. A subscriber is not simply paid or unpaid. They are active, or past-due but in a grace period, or suspended pending payment, or cancelled, or paused. They upgrade mid-cycle and expect proration; they downgrade and expect credit.

A billing system that only knows 'paid this month: yes/no' cannot handle grace periods, retries, or fair proration, and it will either cut off good customers too early or let non-payers keep using the service for free. Getting this state model right - and driving access, invoices and dunning off it - is what makes subscription billing dependable rather than a monthly scramble.

How Upeosoft builds subscription billing

We build recurring billing designed for Kenyan reality: card tokenization where customers have cards, M-Pesa recurring or scheduled-STK flows built around real customer consent, and a proper subscription state model with grace periods, proration and clean records. On top of that we add retries and dunning that actually recover failed payments, and reconciliation so every collection lands in your books.

If your subscription product struggles to collect, or you are launching one, talk to Upeosoft and we will build billing that keeps revenue from leaking.

Frequently asked questions

Can I automatically charge a customer's M-Pesa every month?

Not silently, the way you can with a saved card. A normal M-Pesa STK Push always requires the customer to authorise it with their PIN, so you cannot debit them in the background. The workable options are M-Pesa's recurring/standing-order facilities (such as M-Pesa Ratiba), where the customer sets up an authorised recurring debit, or scheduling an STK prompt each cycle and nudging the customer to approve it. Design around consent, not around silent charging.

How do recurring card payments work?

The first time a customer pays by card, your provider tokenizes it - you keep a token, not the card number. On each billing cycle your system charges that token automatically, with no action from the customer. This is true recurring billing and is the smoothest option where customers have cards. You still handle declines, expired cards and 3D Secure requirements, but the core charge is automatic.

What is M-Pesa Ratiba?

M-Pesa Ratiba is Safaricom's recurring payments / standing-order feature, letting a customer authorise scheduled payments to a business. It is closer to a real mandate than a one-off STK Push, which makes it more suitable for subscriptions than prompting for a PIN every month. Availability and fit depend on your setup, so it is worth evaluating against scheduled STK prompts for your specific billing model.

Why do so many subscriptions fail to collect?

Mostly involuntary churn - payments that fail for mechanical reasons, not because the customer wanted to cancel. An M-Pesa prompt goes unanswered, a card expires, a wallet is short of funds, or a network times out. Without retries and reminders, each of those becomes a lost subscriber. Good billing systems treat a failed charge as the start of a recovery process, not the end of the relationship, and win back a large share of them.

What does a subscription system actually need to track?

More than 'paid' or 'not paid.' It needs the plan and price, the billing cycle and next charge date, the payment method and its token or mandate, and a status that captures real life: active, past-due, in a grace period, suspended, cancelled. It also needs a retry and dunning schedule, proration for upgrades and downgrades, and a clean record of every attempt. That state model is what separates a real billing system from a spreadsheet with reminders.

Karani Geoffrey
Karani Geoffrey
Founder & CEO, Upeosoft

Karani Geoffrey is the Founder & CEO of Upeosoft, a software and automation company rooted in Kenya. He builds custom software, AI systems, and production-grade ERPNext for businesses across East Africa, and writes about the Kenyan realities - eTIMS, M-Pesa, SHIF, unreliable internet and power - that make or break real systems.

Next step

Want this working in your business?

Upeosoft builds and hardens the systems behind this article - for real Kenyan operations, with eTIMS, M-Pesa and offline realities handled.

Keep reading

Kenyan Compliance and Integrations

Accepting Card Payments Online in Kenya: PCI-DSS, 3D Secure and Liability

Cards reach customers M-Pesa cannot - diaspora, corporate and international buyers. But card acceptance brings PCI-DSS, 3D Secure and chargebacks. Here is what you take on and how to keep it light.

7 min readRead article →
Kenyan Compliance and Integrations

Failed, Pending, Duplicate, Reversed: Handling the Payments That Break Systems

Any developer can make one payment succeed. Production is about the messy 5%: timeouts, double callbacks, reversals and payments stuck in limbo. That is where money is lost or double-counted.

7 min readRead article →
Kenyan Compliance and Integrations

How to Integrate the M-Pesa Daraja API Into Your System

The Daraja API is Safaricom's official gateway to M-Pesa. This is the practical path from developer credentials to a live, reconciling integration - and the pitfalls along the way.

6 min readRead article →