Automate Invoice Reminders and AR Chasing with n8n
Automate invoice reminders with n8n: a days-overdue chase ladder from gentle to final, plus an internal Slack alert. Stop chasing late payments by hand.
The Money's Owed; Nobody's Asking for It
Late invoices rarely go unpaid because the client refuses. They go unpaid because nobody followed up, the follow-up felt awkward, and "send a reminder tomorrow" became next month. Accounts receivable is mostly a memory problem.
You can automate invoice reminders with n8n so the follow-up happens on schedule, with the tone escalating as the days pile up: a gentle nudge first, a firmer note at two weeks, a final notice near thirty days. And when an invoice crosses the line where a bot shouldn't be the one chasing, the workflow pulls a human in over Slack.
The trick isn't sending emails. It's knowing where each invoice sits in the ladder and not sending the wrong tone at the wrong time.
What You Can Automate
- Days-overdue math: every unpaid invoice scored daily against its due date
- Tiered tone: gentle, firm, and final reminders that match how late the payment is
- Send-once logic: a record of what's been sent so a client never gets the same tier twice
- Internal escalation: a Slack alert when an invoice passes 30 days or a big-ticket threshold
- Payment detection: a paid invoice drops out of the ladder automatically
- Register-driven: the whole thing reads from the invoice register your billing workflow already writes
The Reminder Pipeline
The chase runs as one daily pass over open invoices:
Schedule Trigger (daily 9am)
→ Google Sheets / DB (read unpaid invoices)
→ Code (compute days_overdue + current tier)
→ Switch (route by tier)
→ gentle (3–13 days) → Gmail (friendly nudge)
→ firm (14–29 days) → Gmail (firmer reminder)
→ final (30+ days) → Gmail (final notice) + Slack (#ar-escalations)
→ Google Sheets (log tier + date sent)
The Switch keyed on days overdue is the engine. Everything else is sending the right message and remembering you sent it.
1. Read the open invoices
The first node pulls unpaid invoices from your register — the same sheet or table the generation workflow writes. Filter to status unpaid so paid ones never enter the chase. If a payment webhook marks invoices paid in near-real time, this filter is also your automatic exit from the ladder.
2. Compute days overdue
A Code node subtracts each invoice's due date from today and attaches a days_overdue and a tier. Keep the date math in one place:
const today = $now;
return $input.all().map(item => {
const inv = item.json;
const due = DateTime.fromISO(inv.due_date);
const days = Math.floor(today.diff(due, 'days').days);
let tier = 'none';
if (days >= 30) tier = 'final';
else if (days >= 14) tier = 'firm';
else if (days >= 3) tier = 'gentle';
return { json: { ...inv, days_overdue: days, tier } };
});
3. Route by tier
A Switch node sends each invoice down its tier's branch. Don't collapse this into one email with conditional text; separate branches keep each tone's copy clean and make it obvious in the execution log which message went out.
4. Send and escalate
Each branch sends its Gmail message. The final tier does one extra thing: it posts to a Slack #ar-escalations channel so a human knows this account needs a call, not a fourth email. In practice, the email-only chasers fail right here — they keep emailing a client who's gone quiet instead of flagging that it's time for a person.
5. Log what you sent
Write the tier and the date back to the register. Next run reads it and won't re-send the same tier, so a client gets one gentle nudge, not seven. This send-once memory is the difference between a helpful reminder and harassment.
Implementation Patterns
Pattern 1 — Escalate tone, then escalate to a human. The ladder shouldn't end with the bot. The final tier emails the client and pings a person. An automated chaser that never hands off is the one that emails a client who's already disputing the charge. Self-hosted n8n runs this daily for free, so there's no per-execution reason to skip the careful tiering.
Pattern 2 — Send-once via a logged tier. Idempotency matters here as much as in any pipeline. Store the last tier sent per invoice and gate each branch on "haven't sent this tier yet." Without it, a workflow that runs daily sends the gentle nudge every single day for eleven days. Costly to your sender reputation, and annoying.
Pattern 3 — Exit on payment. A paid invoice should leave the ladder the moment it's paid. A Stripe or bank webhook that flips the register row to paid means the next daily run simply doesn't see it. No awkward "reminder" the day after they paid.
n8n Nodes You'll Use Most
| Node | Purpose |
|---|---|
| Schedule Trigger | Runs the daily chase pass |
| Google Sheets / Postgres | Reads the unpaid-invoice register |
| Code | Computes days overdue and the current tier |
| Switch | Routes each invoice to its reminder tier |
| Gmail | Sends the tiered reminder email |
| Slack | Posts the internal escalation alert |
| IF | Gates each tier on send-once logic |
Getting Started
- Point the read node at your invoice register and filter to unpaid.
- Write the days-overdue Code node and check the tiers against a few known invoices.
- Add the Switch node with your day thresholds.
- Write each tier's email copy in its own Gmail node; keep the tones distinct.
- Add the Slack escalation on the final branch.
- Add the log-tier-sent write-back and the send-once IF gate.
- Run it once against test data, confirm nobody gets a double, then schedule it.
To skip designing the ladder, the InvoiceChase: Automated AR Follow-up ships the tiered chase with the days-overdue math, the send-once logging, and the Slack escalation already wired together.
See InvoiceChase: Automated AR Follow-up →The InvoiceChase: Automated AR Follow-up template ships this end-to-end: the daily register read, the days-overdue Code node, the Switch that routes gentle to firm to final, the send-once gate, and the Slack escalation that hands a stale invoice to a human. It's part of The Complete n8n Templates Bundle, a one-time lifetime license to the whole catalog (plus every template added later) if you run more than one of these finance automations.
The chase only works if the invoices exist and the register is clean, which is what the n8n invoice generation workflow sets up upstream. For the payment-matching and reconciliation side, the n8n invoice automation guide covers how a paid invoice exits the ladder. When chasing extends to supplier-side payments, the Vendor Payment Escalator applies the same tiered logic to outbound bills.
Browse the full template catalog →Common questions
How do I automate overdue invoice reminders in n8n?
What's a good escalation schedule for invoice reminders?
Can n8n alert my team internally when an invoice is badly overdue?
Get the workflow templates this guide is built on
Import-ready n8n JSON, step-by-step setup, and tested end-to-end. One-time payment, own it forever.
Get 3 tested n8n templates, free
The full customer package for three real catalog templates — workflow JSON, step-by-step setup guide, credential checklist. Built through the same live-instance release process as everything we sell. Plus new templates and automation guides in your inbox. No spam, unsubscribe anytime.
- 01Smart To-Do List ManagerPre-built n8n workflow template that automates productivity with OpenAI. Live in about 10 minutes.$14
- 02Email Follow-Up AutomatorPre-built n8n workflow template that automates crm with OpenAI. Live in about 15 minutes.$12
- 03Market Trend AnalyzerPre-built n8n workflow template that automates data processing with OpenAI. Live in about 10 minutes.$14
More automation guides

n8n Backup Automation That Actually Verifies the Backup
A Backup You Never Verified Is a Coin Flip Every n8n backup automation tutorial that ranks does the same thing: schedule an export, push the JSON to Google Drive or S3, done. They back up the data and…

How to Build an n8n Log Alerting Workflow (No Grafana Required)
Most n8n Error Setups Tell You Everything, Which Means They Tell You Nothing An n8n log alerting workflow has one job: surface the failures that need a human and quietly file the ones that don't. The…

n8n Uptime Monitoring with Slack Alerts (Without the Alert Storms)
An Uptime Check That Cries Wolf Gets Muted in a Week The point of n8n uptime monitoring with Slack alerts isn't to detect a single outage. It's to be trusted the next hundred times it fires. Most of t…