ISPStack
Billing & payments

Invoice.
Collect.
Reconcile.

One ledger, wired to M-Pesa, Airtel, and card rails — with webhook-verified reconciliation that posts before the customer locks their phone. Every invoice links to the payment, the subscription, and the RADIUS session it covered.

M-Pesa Airtel Stripe / Pesapal / Flutterwave KRA TIMS
FP
FibrePulse Networks Ltd.
PIN P051234567X · Nairobi, KE
Invoice
INV-04812
25 May 2026
Bill to
Mwangi Njoroge
CUS-04812
+254 7XX XXX XXX
Cycle
01 May - 31 May 2026
Due
28 May 2026
Item Qty Amount
Home 20M · PPPoE
Monthly subscription · full cycle
1 2,500.00
Plan upgrade pro-ration
10M to 20M · 12 days
1 450.00
Subtotal2,950.00
VAT 16%472.00
Total · KES3,422.00
Pay via M-Pesa: Paybill 400 200 · Acct CUS-04812
KRA TIMS · eTIMS receipt issued on payment v.2.18
Capabilities

A single ledger from sale to settlement.

Every payment flows through the same reconciliation pipeline — verified at the webhook, applied to the right invoice, attributed to the right RADIUS session.

Plans, FUP, throttle

Tiered plans with FUP triggers, daily and weekly quotas, time-bound cumulative limits. Plan changes apply at next session or immediately; proration handled.

Auto-invoicing + proration

Invoices generate at cycle close. Mid-cycle plan changes prorate; credit notes post automatically; recurring schedules survive month-length quirks.

M-Pesa, Airtel, card, bank

STK push, C2B paybill, B2C disbursement, Stripe / Pesapal / Flutterwave card rails, plus bank-deposit manual reconcile — all in one ledger.

Webhook-verified rails

Daraja STK callbacks come in over raw-body-verified webhooks. Reconciliation posts to the invoice and emits billing.paid in the same second.

Aging + dunning

Per-customer aging buckets (0-30, 31-60, 61-90, 90+) with templated SMS / email at each stage and an auto-suspend gate at the cutoff.

Quote pipeline + projects

Sales quotes flow into invoices on accept; project mode tracks billable time and materials per technician against the same invoice.

Reconciliation

A receipt finds its invoice, automatically.

Daraja posts the callback. ISPStack reads the account reference, finds the open invoice, posts the payment, and emits the event RADIUS subscribes to. No CSV download, no end-of-day spreadsheet.

M M-Pesa · STK
Confirmation
QFY7HJ3AC2

Amount
KSh 3,422.00
From
+254 7XX 123456
Paybill
400 200
Acct ref
CUS-04812
Time
25 May, 14:08

Cost: 0.00 · Balance: 12,418.00
Invoice
INV-04812
paid
CustomerCUS-04812
TotalKSh 3,422.00
Paid viaM-Pesa QFY7HJ3AC2
Posted25 May 14:08:11

Wallet ledger updated
JV posted to accounting
RADIUS session reactivated
Total latency: 832 ms
Aging

Where the receivables actually sit.

A snapshot of an operator's open AR across the dunning buckets. Each bucket has its own templated SMS / email cadence and a configurable suspend gate at the cutoff.

Current
62%
KSh 2.41M
1 - 30
21%
KSh 812k
31 - 60
11%
KSh 425k
61 - 90
4%
KSh 156k
90 +
2%
KSh 78k
Total open AR: KSh 3.88M · auto-suspend at 90 days
healthy chase suspend
Want to talk?

Reconcile your first M-Pesa payment within an hour.

Daraja wiring is a single config screen. Your first invoice closes itself the moment a customer pays — no end-of-day spreadsheet, no manual matching.