South African SMEs are owed billions of rands in overdue invoices right now. The problem is almost never the client refusing to pay — it's that nobody followed up consistently enough, early enough, in the right channel.
Phone calls go unanswered. Emails land in junk folders or get buried in busy inboxes. But WhatsApp? WhatsApp messages have a 94% open rate in South Africa. Most are read within 4 minutes.
This guide shows you exactly how to build a WhatsApp debt collection automation system — the message sequences, the timing, the tone, and the technical setup. You can implement the basics yourself for free. For the full production system with PDF generation and payment confirmation logging, NanoLeap builds it in 5 days.
Before building a solution, it's worth understanding why manual collections underperform so consistently:
Automation fixes all four problems simultaneously. Every client gets the same structured sequence. It runs on WhatsApp. It starts the day after the due date. And the tone systematically escalates with each step.
This is the sequence NanoLeap deploys for clients. The exact wording depends on your industry and client relationships, but the structure is consistent.
The collection process starts when the invoice is sent — not when it becomes overdue. A professional, well-formatted WhatsApp message with a PDF attachment on invoice day sets the expectation immediately.
Hi [Client Name] 👋
Your invoice for [Month] services is attached:
📄 Invoice #[Number] — R[Amount]
Due date: [Date]
Payment details:
Bank: [Bank]
Account: [Account number]
Reference: [Invoice number]
Thank you for your continued business.
— [Your Company]Note: include every payment detail in the first message. Clients who want to pay immediately shouldn't have to ask for banking details.
Hi [Client Name],
Just checking in — Invoice #[Number] for R[Amount]
was due on [Date].
If you've already paid, please ignore this message
and send us your proof of payment so we can
update our records.
If you need to arrange payment, please let us
know and we'll work with you.
Thank you 🙏The tone here is warm and assumes good faith. Many clients have genuinely forgotten or missed the original message. This step alone recovers 40–50% of overdue invoices.
Hi [Client Name],
A reminder that Invoice #[Number] for R[Amount]
is now 7 days overdue.
📄 Invoice re-attached for your convenience.
Please arrange payment at your earliest
convenience and send us your proof of payment.
If you have a query about this invoice, please
reply to this message and we'll resolve it promptly.
[Your Company]Re-attaching the invoice is important — "I never received it" is a common response, and this pre-empts it. The query option gives clients a face-saving exit if they have a genuine dispute.
Dear [Client Name],
Invoice #[Number] for R[Amount] is now 14 days
overdue despite previous reminders.
We kindly request that payment be made within
5 business days to avoid further action.
If payment is not received by [Date], this matter
will be escalated to our legal recovery process.
Please contact [Owner Name] directly at
[Phone] to resolve this matter.
[Your Company]The tone shift here is deliberate. "Dear" instead of "Hi". Reference to legal process. A specific deadline. At this point, the business owner is also notified by the system — this account needs personal attention.
When a client sends proof of payment, the system must stop the sequence immediately and send a receipt. Nothing destroys client relationships faster than continuing to chase someone who has already paid.
Thank you, [Client Name] ✓
Payment of R[Amount] received and confirmed.
Official receipt: [Receipt link or number]
We appreciate your prompt payment.
See you next month! 🙏Set up a sheet with these columns:
Column A: Client Name
Column B: WhatsApp Number
Column C: Invoice Number
Column D: Invoice Amount
Column E: Due Date
Column F: Status (SENT / REMINDED_3 / REMINDED_7 / ESCALATED / PAID)
Column G: Payment Date
Column H: Receipt Sent (Yes/No)function runDailyCollections() {
const sheet = SpreadsheetApp.getActiveSheet();
const today = new Date();
const data = sheet.getDataRange().getValues();
for (let i = 1; i < data.length; i++) {
const dueDate = new Date(data[i][4]);
const status = data[i][5];
const daysOverdue = Math.floor(
(today - dueDate) / (1000 * 60 * 60 * 24)
);
if (status === 'PAID') continue; // Skip paid invoices
if (daysOverdue === 0 && status === '') {
sendInvoice(i, data[i]); // Invoice day
} else if (daysOverdue === 3 && status === 'SENT') {
sendReminder3(i, data[i]); // Day 3
} else if (daysOverdue === 7 && status === 'REMINDED_3') {
sendReminder7(i, data[i]); // Day 7
} else if (daysOverdue === 14 && status === 'REMINDED_7') {
sendEscalation(i, data[i]); // Day 14
}
}
}Set this function to run daily using Apps Script triggers: Triggers → Add trigger → runDailyCollections → Time-driven → Day timer.
Construction payments are governed by the CIDB and often involve retention releases and progress claims. Your collection sequence needs to handle disputed amounts and partial payments. The Day 14 escalation should reference your contract terms specifically.
Client relationships are long-term and sensitive. The first two reminders must be softer. Consider a phone call flag at Day 10 before the formal Day 14 notice — the system can trigger an alert to your accounts person to make a personal call before the formal escalation fires.
Patient shortfall collections must be handled carefully — the NCA (National Credit Act) applies to medical accounts in certain circumstances. Keep the tone supportive and always offer a payment arrangement option.
SLA clients who don't pay remain protected sites — which creates operational tension. Your escalation sequence should trigger an internal alert at Day 14 so the operations director can make a decision about continued service provision.
✓ Average result across NanoLeap clients: 73% reduction in overdue debtor book within 60 days of deploying WhatsApp collection automation.
The full production system — invoice generation, multi-step sequences, payment confirmation logging, owner dashboard — built and live. Pay only after delivery.
See Real Client Results →