§ Case · 08 · 2026Language academy · Hong Kong

200 debtors
per month
collected alone.

A Spanish-language academy in Hong Kong with +2,000 active students handled 200 to 300 unpaid invoices a month for a simple reason: micropayments people forget. They weren't deadbeats — just people with good intentions and too much going on. In 4 weeks we built a workflow that queries Teachworks every 7 days, sends a WhatsApp reminder (via Chatwoot) only to those who still haven't paid, and goes silent the moment payment shows up. After 4 weeks of supervised stabilization, it went into 100% autonomous production.

Recovery < 21d
85%
Admin hours/month
+42
Post-payment messages
0
Build + stabilization
4+4wks
§ Context

The problem.

Elena runs a Spanish-language academy in Hong Kong with more than 2,000 active students, in-person and online classes, and a catalog of monthly micropayments ranging from 60 to 100 USD per plan. Operations are simple but the demographics don't help: Hong Kong, multi-timezone, students with overloaded lives, and an academy that doesn't want to become a debt collector.

The problem wasn't delinquency. It was forgetfulness. Bank-transfer micropayments that slip people's minds between Thursday's meeting and the weekend. Each month, between 200 and 300 students reached due date without paying — not out of bad faith, but because the reminder hit a saturated inbox or got buried in notifications.

What we built.

Weekly cron + Teachworks query

Every 7 days, an n8n workflow queries the Teachworks API: which students have invoices issued and not paid older than X days. Filters out the ones already paid (always check before sending). Builds the reminder list.

WhatsApp message via Chatwoot

For each pending student, the workflow sends a personalized WhatsApp message in English (the academy's working language with students) through Chatwoot, which manages the WhatsApp Business API. The message includes the amount, due date, and a direct payment link.

Stop-on-pay

Critical: the system stops the moment payment is detected. Each cycle, before sending, it requeries Teachworks. If the invoice has been paid in the last 7 days, no message is sent. Zero "you owe us, oh wait you already paid" messages — the worst kind for customer experience.

Escalation and dashboard

If a student has 3 reminders without paying (>21 days), the system tags them and notifies Elena. She decides whether to write personally or pause the service. Active monitoring on a Metabase dashboard: pending invoices by age, recovery rate, average days from issue to collection.

I went from spending an hour a week on collection to ten minutes reviewing the dashboard. And the best: students who pay on time never get a payment-related message. Just the ones who actually need a nudge.

Stack used.

n8nTeachworks APIChatwootWhatsApp Business APIPostgreSQLMetabase

Chasing payments by hand every week?

Free assessment. We leave with a concrete plan and fixed fee.

Request assessment →