The Problem With Manual Chasing
Most freelancers have the same issue: the invoice goes out, payment terms are NET 30, and then… nothing. Following up feels uncomfortable. You don't want to damage the relationship. You write a polite email, wait another week, write another one. Some invoices just quietly age into uncollectable debt.
Our client had six overdue invoices ranging from £400 to £2,200. The oldest was 94 days old. She'd sent one follow-up email to each client and then avoided it. Total outstanding: £8,340.
The System We Built
We used n8n connected to Stripe (her billing tool) and Gmail. The workflow runs every morning, checks Stripe for unpaid invoices past their due date, and sends escalating reminder emails based on how overdue the invoice is.
→ Stripe: List all invoices with status = 'open' + due_date < today
→ n8n Function: Calculate days overdue, assign escalation tier
→ n8n IF node: Route by tier (7d / 14d / 30d / 45d+)
→ Gmail: Send personalised email for that tier
→ Google Sheets: Log action taken + timestamp
The Escalation Tiers
This is where the real work was. We wrote four email templates that escalate in tone without ever becoming hostile:
- Tier 1 (7–13 days overdue): Friendly nudge. "Just checking this didn't get lost in your inbox."
- Tier 2 (14–29 days overdue): Polite but clear. "Invoice #123 is now 14 days past due — please let me know if there's an issue."
- Tier 3 (30–44 days overdue): Firm. "This invoice is now significantly overdue. Please action by Friday or contact me to arrange payment."
- Tier 4 (45+ days overdue): Final notice tone. References potential escalation to a collections process.
Each email is personalised with the client's name, invoice number, amount, and a direct link to the Stripe payment page. The system also tracks whether an email was already sent at each tier, so clients don't get the same reminder twice.
What Happened
Within the first week, three of the six overdue clients paid. Two of them responded to the Tier 1 nudge — they'd genuinely forgotten. One responded to the Tier 2 email with an apology and same-day payment. The remaining three needed Tier 3 messages before responding.
The £2,200 oldest invoice (94 days) took a Tier 4 message and a manual follow-up call she made herself — but the automated escalation created the urgency that made her finally pick up the phone.
- £8,340 in outstanding invoices recovered
- Zero awkward manual chasing emails written
- Average days-to-payment dropped from 52 → 18
- System still running — catches new overdue invoices automatically
- Time saved: ~3 hours/month on invoice admin
The Technical Nuances
Stripe's invoice API is well-documented but has a few gotchas. The due_date field is only populated if you set payment terms explicitly — if you use Stripe's default, invoices may not have a due_date at all. We handled this by falling back to created + 30 days when due_date is null.
The Gmail node needed OAuth setup, which is straightforward but requires a Google Cloud project. The whole system was running in under a day. Ongoing maintenance: essentially zero.
Can You Build This?
If you're comfortable with n8n and the Stripe API, yes — this is a solid weekend project. The email templates take the most thought. If you'd rather not spend the weekend on it, we build this kind of system for a fixed price, and it typically pays for itself within the first recovered invoice.