User manual / Customers and billing

Payments

How money reaches CoreSync, how it finds the right customer, and what to do when it doesn't: redeeming, moving, recording cash, STK pushes, imports and corrections.

Owners & adminsFinanceCustomer care
All guides
On this page

How money reaches CoreSync#

Most payments arrive on their own. Your payment gateway tells CoreSync about each one within seconds, and CoreSync credits the customer and reconnects them. You only step in when a payment can't find its customer, or when money came in by hand.

Way inHow it reaches CoreSync
M-Pesa PaybillThe customer pays your paybill and types their account number. Safaricom tells CoreSync straight away.
M-Pesa TillThe customer pays your till. A till payment carries no account number, so CoreSync can only match it by the phone that paid.
STK pushA prompt appears on the customer's phone and they enter their M-Pesa PIN. You can send one from the Payments page, and customers can start one from a payment link you text them. CoreSync already knows who it's for.
KopoKopoIf your till is on KopoKopo, both till payments and STK pushes come through KopoKopo.
Bank Direct (IPN)If your bank is connected, it tells CoreSync about each deposit. CoreSync reads the account number from the bank's description of the payment.
Cash or bank, by handMoney a technician collected, or a deposit that didn't come through a gateway. You record it with Record Payment.

Your admin sets up paybills, tills, KopoKopo and banks in Settings → Payment → Gateways. See Settings. If you have more than one gateway, each one can serve certain zones, plans or routers. CoreSync then sends each customer's STK push through the right one.

What your customers see when they pay is in Paying for internet.

How a payment finds its customer#

Every subscriber has a subscriber code, for example AML1042. It's the account number customers type when they pay, and the one on their SMS reminders. Always give customers their subscriber code to pay with.

When a paybill or bank payment arrives, CoreSync looks for the customer in this order, and takes the first match:

  • The subscriber code they typed.
  • The account number they typed.
  • The PPPoE username they typed.
  • The phone number that paid.

CoreSync forgives small slips in what was typed. Spaces, dashes and leading zeros are ignored, and capital or small letters don't matter for the subscriber code. So aml 1042 and AML-1042 both find AML1042.

If nothing matches, the payment is saved and waits on the Unredeemed tab for you. Nothing is ever lost: the money is recorded even when CoreSync can't tell whose it is.

Terminated customers are never credited. If the only match is a terminated account, the payment waits on Unredeemed. Restore the account first if the money really is theirs, then redeem it.

Hotspot purchases show with a HOTSPOT status. They paid for a voucher or a session, not a subscriber, so they never appear as unredeemed. See Hotspot.

What a payment does#

Once a payment has found its customer, CoreSync does the same things every time, whether the money came from M-Pesa, a bank, a match or a cash record:

  1. Pays off charges first. If the customer owes an installation fee or another charge, the payment settles it, oldest first. Your admin can turn this off.
  2. Puts the rest into the customer's Credit.
  3. Renews them from that credit. If the credit covers their price, they get one full cycle. The price is their negotiated price if they have one, less any discount.
  4. Reconnects them at their plan's speed, and sends the usual payment SMS.

A renewal adds the cycle to the current expiry if the customer is still active, or starts it from now if they had expired. The date rules are in Plans and renewals.

Renewals, moves and credit changes are written on the customer's Timeline tab, so you can always see what a payment did.

Partial payments, overpayments and discounts#

Your ISP chooses what happens when someone pays less or more than their price. Your admin sets both in Settings → Payment → Policies.

When someone paysChoiceWhat happens
Less than their priceGive proportionally fewer daysThe usual choice. Half the price buys about half the cycle. An amount too small to buy one day stays as credit.
Less than their priceHold as credit until it covers a full cycleNothing is renewed until the credit reaches the full price. The customer gets an SMS saying what they still owe.
More than their priceKeep the extra as creditOne cycle is renewed. The rest stays as credit and pays the next cycles as they fall due.
More than their priceTake only the plan priceOne cycle is renewed. The rest never reaches their credit. The payment shows it as not applied, so you can account for it outside CoreSync, for example as rent.
Take only the plan price is for ISPs run by landlords, where tenants pay rent and internet in one payment. Under it, an amount like 3,000 not applied appears under the payment's amount.

Discounts. Plan and company-wide discounts are set in Settings → Payment → Discounts, under Plan & company-wide discounts. A discount comes off at renewal, on top of any negotiated price. Only one discount applies to a customer at a time. A customer's own price is set on their subscription: see Plans and renewals.

Installation from the first payment. New customers often pay setup and the first month together. If your admin turns on Guess installation fee from a new subscriber's first payment (Settings → Payment → Charges), what's left after the first renewal is booked as an installation fee instead of credit. It only looks at a customer's first payment, in their first 30 days, and never when they already have an installation charge.

Permission needed:View Settings

The Payments page#

Open Payments under Billing in the menu. It lists every payment, newest first, with its date, provider, M-Pesa code or receipt, customer, phone, the account they typed, amount and status.

The Payments page with revenue cards, the All Payments, Unredeemed and To check tabs, and a list of M-Pesa and cash payments
The Payments page at Amani Link, our demo ISP.
  • All Payments shows everything. Unredeemed shows payments that found no customer. To check shows payments that may be on the wrong customer.
  • Search by M-Pesa code, phone, the account they typed, or the customer's name or code. For phones, type the last nine digits (712345678) so both 0712… and 254712… forms match.
  • Narrow the list with Provider, Status, From and To. Clear filters puts it back.
  • View on a row opens that customer.
Permission needed:View Payments
Amounts show as ••• without View Money Figures. Customer care can still see that a customer paid and when, without seeing what the business earns. The revenue cards at the top also need View Revenue Reports.

A customer's own payments are on their page, on the Payments tab, under Payment History.

Record cash or a bank deposit#

Use this when money reached you outside a gateway: cash paid to a technician, or a deposit your bank didn't report. It applies the money exactly like an M-Pesa payment, so the customer is renewed and reconnected.

  1. On the Payments page, press Record Payment.
  2. Under Subscriber, search by name, code, building or zone, and pick the customer.
  3. Type the Amount (KES) and choose the Provider: Cash, Bank Transfer or M-Pesa (manual).
  4. Type the Reference / Receipt #: the receipt number you wrote, or the bank reference. Then press Record Payment.
    The Record Manual Payment dialog with a subscriber chosen, KES 2,500, Cash, and a receipt number
Permission needed:Manage Payments
Use a real receipt number every time. CoreSync records each receipt only once, so pressing the button twice can't credit the customer twice.
Never record an M-Pesa payment that's already in the list. If the customer paid by M-Pesa and it's on the Unredeemed tab, redeem it instead. Recording it again as cash counts the money twice.

Send an M-Pesa prompt (STK push)#

Use this when a customer is on the phone with you and wants to pay now. They get an M-Pesa prompt, enter their PIN, and are renewed the moment Safaricom confirms it.

  1. On the Payments page, press STK Push.
  2. Under Subscriber, pick the customer. Their phone fills in by itself. To send the prompt to another number, change Phone (optional), for example to 0712 345 678.
  3. Type the Amount (KES) in whole shillings and press Send STK Push.
    The Send STK Push dialog on a phone, with a subscriber chosen, their phone filled in and an amount
  4. The dialog shows Waiting for payment. Ask the customer to enter their M-Pesa PIN. When it arrives you see Payment Confirmed! Press Done.
Permission needed:Manage Payments

If nothing comes back after about a minute and a half, the dialog says No confirmation yet. The payment may still arrive, so check the list a little later before you send another prompt. If the customer cancels, you see Payment was cancelled by customer.

Every press sends another prompt. If the customer enters their PIN on two prompts, they pay twice. Wait for the first one to finish.

Now and then Safaricom can't confirm a payment straight away. CoreSync holds it and asks Safaricom again later. If Safaricom then says it didn't go through, the payment stays on Unredeemed for you to decide.

Redeem a payment that found no customer#

A payment lands on Unredeemed when the customer typed something CoreSync doesn't know, paid a till from a phone that isn't on any account, or paid for a terminated account. Redeeming gives it to the right customer and applies it in full: charges, credit, renewal, reconnection and SMS.

  1. On the Payments page, open the Unredeemed tab. The number beside it is how many are waiting.
    The Unredeemed tab listing payments marked Unmatched, each with a Redeem button
  2. Look at the Phone and Account Ref columns. They usually tell you whose it is. Call the number if you're not sure.
  3. Press Redeem on the payment. Under Subscriber, search for the customer and pick them.
  4. Check the M-Pesa code and amount at the top, then press Redeem Payment.
    The Redeem Payment dialog showing an M-Pesa code, amount and phone, with a subscriber chosen
Permission needed:Manage Payments
Your ISP may need a second person to approve matches. Then you see Match requires approval, and nothing is applied until someone with Approve Payment Matches approves it. See Approvals (four-eyes).

A payment can only be redeemed once. If it's already on a customer and that's the wrong one, move it instead.

Move a payment that went to the wrong customer#

Customers mistype their code: Wanjiru meant AML1042 and typed AML1024, so Otieno got her month. Moving the payment fixes both accounts in one step. CoreSync takes back what the payment gave the wrong customer, then applies it to the right one as if it had just arrived.

  1. Find the payment on the Payments page and press Move on its row.
  2. Under Move it to, pick the right customer. Under Why, say what happened, for example Typed AML1024 instead of AML1042.
  3. Read the preview before you confirm. Taken back from shows the wrong customer's expiry and credit before and after. Applied to shows the right customer as they are now. Notes underneath warn you if the wrong customer will be cut off.
    The Check payment dialog with a likely typo warning, the right customer chosen, a reason, and the Taken back from and Applied to preview
  4. Press Move payment.
Permission needed:Move Payments

What happens to each side:

  • The right customer is credited and renewed by their plan, and gets the usual payment SMS.
  • The wrong customer's expiry goes back to where it was before the payment. If that's in the past, they're disconnected and get the usual expiry SMS. They get no message about the move itself.
  • If the wrong customer already spent the leftover credit on a later renewal, their credit goes below zero. Their next payment covers that first.
  • Charges the payment had paid off become owed again.
  • The payment shows Moved from and the wrong customer's name. The move is on both customers' Timeline.
Moves can need approval too. Then you see Moving payments needs approval here, and nothing changes until someone with Approve Payment Moves approves it. See Approvals (four-eyes).

CoreSync refuses a move it can't undo cleanly, and tells you why. For example, when the payment also upgraded the wrong customer's plan, or when it was an installation fee recorded by hand. Fix those by hand. It also refuses to move money onto a terminated customer: restore them first.

The To check list#

CoreSync notices when a payment came from one customer's phone but credited a different customer. That's often a typo. Sometimes it's someone paying for a relative or a tenant. These payments are applied as typed, and listed on the To check tab for 60 days so a person can look.

Label under the nameWhat it means
Likely typo — paid from Wanjiru Kamau (AML1042)'s phoneWhat was typed is the payer's own code, or one character off it. It almost certainly belongs to the payer.
paid from Wanjiru Kamau (AML1042)'s phoneThe payer has their own account, but typed a quite different one. Often a relative. Worth a call.
  1. On the Payments page, open the To check tab.
    The To check tab with payments labelled Likely typo, paid from another customer's phone, each with a Review button
  2. Press Review on a payment. The Check payment dialog already has the payer chosen under Move it to, and for a likely typo the reason is filled in.
  3. If it belongs to the payer, press Move payment. If it's right where it is, press Payment is correct. Either way it leaves the list.
Permission needed:Manage PaymentsMove Payments

With Manage Payments alone you can mark a payment correct, but not move it.

Installation and other charges#

Charges are money a customer owes outside their plan: installation, a router replacement, maintenance or anything else. A charge either records money you already took, or waits to be paid out of the customer's next payment.

  1. Open the customer, go to the Payments tab and press Charges.
  2. Press Add Charge. Choose the Category: Installation, Router Replacement, Maintenance or Other. Type the Amount (KES) and, if you like, a description.
  3. If you already have the money, tick Already collected — record as paid now and choose the Payment Method. Otherwise leave it, and the charge stays pending.
  4. Press Add Charge.
Permission needed:Edit Subscribers

A pending charge is paid off by the customer's next payment before anything reaches their credit. To forgive one, press the waive button on its row, give a reason and press Waive.

Installation fee collected outside CoreSync? On the customer's Subscription tab, the Installation row says Not paid. Press the pencil beside it to record the fee. This writes a real payment.

A default installation amount for the Add subscriber form is set in Settings → Payment → Charges.

Import M-Pesa payments#

Use this for recent payments that reached your paybill but never reached CoreSync, for example during an outage. Download the statement from M-Pesa, save it as CSV, and import it.

Every imported row is applied as a new payment, today. It credits the customer, renews them from today and sends the payment SMS, whatever date the statement shows. Never import an old statement or a payment history from your previous system here. History belongs in the migration import: see Moving from another system.
  1. On the Payments page, press Import M-Pesa, then drop your CSV file on the box.
  2. On Map Fields, check which column feeds each field. CoreSync guesses from the column names, but it doesn't recognise every M-Pesa statement heading. If it says Missing: Amount, pick Paid In for Amount, Other Party Info for Payer Phone and A/C No. for Account Reference. Receipt / Reference and Amount are required. Payer Phone and Account Reference are what match payments to customers, so map them too.
    The Import M-Pesa Payments dialog on Map Fields, with statement columns mapped to Receipt, Amount, Payer Phone and Account Reference
  3. Open Preview and check the first rows look right.
  4. Press the import button, which shows the row count, for example Import 42 Payments. Progress shows live. At the end you see how many were applied, how many are awaiting reconciliation (they found no customer and wait on Unredeemed), how many were duplicates and how many failed.
  5. If any failed, press Download failed rows (CSV), fix them and import that file. Press Done.
Permission needed:Manage Payments

Receipts CoreSync already holds are skipped as duplicates, so importing the same file twice is safe.

Reconcile: paid but not extended#

Reconcile looks at completed payments from the last 30 days and lists customers who got less time than they paid for, or whose login expiry doesn't match their subscription.

  1. On the Payments page, press Reconcile. The button shows Scanning... while it works.
  2. Read the list. Each row shows the login, when they paid, the plan length and amount, and the expiry they have against the one they should have. If the list is empty you see All payments match — no discrepancies found.
  3. Tick the rows to fix. To set your own expiry for a row, type it under Custom date.
  4. Press Fix Selected, or Fix All for every row.
Permission needed:View PaymentsManage Payments

Anyone who can view payments can run the check. Fixing needs Manage Payments. A fix only ever moves an expiry later, unless you typed a custom date.

A fix changes the date, not the connection. If the customer is still stuck on slow or no internet, open them and press Resync RADIUS, the circular arrows at the top of their page.

Payments are history: no refund button#

A payment is a record that money arrived. CoreSync never deletes or reverses one, and there's no refund button. That keeps your books honest: every shilling that came in stays on record. Fix the effect on the customer instead.

What went wrongWhat to do
The payment went to the wrong customerMove it. See Move a payment above.
You refunded the customer outside CoreSync (cash back, or an M-Pesa reversal)On their Subscription tab, press the pencil beside Credit, choose Deduct and the reason Refund issued to customer. If the payment had already renewed them, move their Expiry Date back too.
The same money was recorded twiceDeduct the extra credit with the reason Reversing a duplicate payment, and move the Expiry Date back if it renewed them twice.
A customer owes a charge you want to forgiveWaive it on the Charges view of their Payments tab.
  1. Open the customer and go to the Subscription tab.
  2. Press the pencil beside Credit. In Adjust credit, choose Deduct, type the Amount (KES) and pick the Reason (required).
  3. Check the new balance shown, then press Apply. Credit can't go below zero.
  4. If the payment had already paid for a renewal, there may be no credit left to deduct. Press the pencil beside Expiry Date instead and set it to what it was before. How expiry dates work is in Plans and renewals.
Permission needed:Edit Subscribers

The payment itself stays in the list and on the customer's Payment History. The credit change and the date change are written on their Timeline with your name and reason.

Bulk exports are switched off. The Export CSV button doesn't download anything for ISP staff. If you need a copy of your payment records, ask Avitech in writing, and Avitech exports them for you.

Common mistakes#

  • Recording an M-Pesa payment as cash. If the M-Pesa code is already in the list, redeem or move it. A second record counts the money twice.
  • Giving free days instead of recording money. If the customer paid, record or redeem the payment. Free days leave no money on record and the books won't add up.
  • Pressing STK Push again while the first prompt is open. Each press is a new prompt, and the customer can end up paying twice.
  • Importing an old statement. Every row is applied today, renews customers and texts them. Only import recent payments that never arrived.
  • Recording a fake receipt number. Use the real one. It's how CoreSync stops the same money being counted twice.
  • Telling customers to pay with their phone number or name. Give them their subscriber code. A phone match is the last resort, and fails when someone else's phone pays.
  • Redeeming a payment for a terminated account. It's refused on purpose. Restore the account first if the money is really theirs.

If it doesn't work#

What you seeWhat to do
A customer paid but isn't connectedSearch the Payments page for their M-Pesa code. If it's on Unredeemed, redeem it. If it's on them, press Resync RADIUS (the circular arrows) at the top of their page. Still stuck? See Troubleshooting.
The payment isn't in CoreSync at allThe gateway didn't report it. Check the gateway in Settings → Payment → Gateways, then import that payment from your M-Pesa statement.
Amounts show as •••Your role doesn't include View Money Figures. Ask your admin if you need it.
The Unredeemed tab shows no number, or the revenue cards are missingBoth need View Revenue Reports. You can still open the tab and redeem payments.
Record Payment, STK Push or Redeem gives an errorYour role needs Manage Payments. An STK error can also mean the customer has no phone on file, or no gateway is set up for them.
There's no Move buttonYour role needs Move Payments. Moves only show on completed payments that are on a customer.
You see Match requires approvalThat's not an error. It's waiting in Approvals for a second person.
Still stuck? Open the AI assistant in CoreSync and describe what you see, or email hello@coresyncisp.com. Screenshots on this page come from Amani Link, our demo ISP, so the names and numbers are made up.