§Use caseOne operator

Chase late payers without nagging

Late invoices get chased the week you need the cash, and not before. Automating it fixes the consistency, and it also hands you a brand new way to email a customer who paid you yesterday. Below is how I build it so that does not happen, including the point past which I would not send an email at all.

One switch, four different answers
One switch, four different answers
The switch that routes an overdue invoice by how late it is, fanning out to a gentle nudge, a firmer reminder and a handover to a human.
Ledger in, chase log out
Ledger in, chase log out
The whole chasing workflow on the n8n canvas, from the ledger read to the chase log.

The questionHow do I automatically chase customers who have not paid their invoices?

How the working version is put together

  1. Run it on weekday mornings only

    A schedule trigger fires at nine, Monday to Friday. The weekday restriction is deliberate and I have never regretted it. A payment chase landing on a Sunday morning reads as harassment rather than admin, and it is the quickest way to make a customer who was going to pay you resent you first.

  2. Read the whole ledger, then argue with it

    The next node pulls the entire Invoices tab out of the sheet. No filtering in the query, no clever range. I want every row in front of the guard, because the decisions that matter in this build are exclusions, and you cannot exclude a row you never fetched.

  3. Decide who does not get an email

    The exclusions node is the one that earns the build. It drops anything marked paid, part paid, disputed, cancelled, credited, void, written off or on hold. It drops anything already chased today. It de-duplicates repeated invoice numbers so one invoice cannot be chased twice in a single run. It strips pound signs and thousands separators out of the amount, trims the trailing spaces spreadsheets love to leave on a status, and works out days overdue from the due date. I would rather miss a chase than send one to somebody who paid yesterday.

  4. Route by how late it actually is

    A switch splits on that verdict. One to seven days gets a gentle nudge that assumes the invoice is stuck in an approvals queue, because most of them are. Eight to thirty gets a firmer note asking for a payment date, or for whatever is blocking it. Past thirty days the automation stops emailing your customer and emails you instead, and I have yet to see an email template recover a debt that old.

  5. Never guess at a row you cannot read

    A missing due date, an unreadable amount, an email address with a space in it: none of those get an email, and none of them get silently skipped either. They land in an Exceptions tab with the reason written next to them. The rule I work to is that anything the guard cannot parse becomes a person's decision rather than an assumption.

  6. Log every chase that went out

    Each sent chase appends to a Chase Log tab with the invoice number, the customer, the amount, the days overdue and which stage it was. That log is what stops a second chase going out tomorrow, and I lean on it again the day a customer tells you nobody ever contacted them.

The build, free

Chase overdue invoices from Google Sheets with staged Gmail reminders

I have published this as a free n8n template, so you can read every node before you decide whether you want help with it. It is in review on the n8n template library.

What the chasing actually costs

The typing is the cheap part. Holding the ledger in your head is what takes the time: who is late, who you already chased, who is disputing, who is late but about to place another order. At low volume I still do this by hand for my own invoices, and the deciding is where the minutes go.

Inconsistency costs more than either. Chasing happens when cash is tight and stops when it is not, which teaches your slower payers precisely how long they can leave you. A ledger chased on the same schedule every week moves their behaviour further than any single firmly worded email I have written.

What breaks in production

Spreadsheets are messy in specific, predictable ways. Dates arrive as 12/08/2026 and as 2026-08-12 in the same column. Amounts arrive as £1,440.00 with the symbol and the comma attached. Statuses arrive as Paid with a trailing space, which does not match paid, which means a settled invoice gets chased. I strip and trim for exactly those, and I still make people run it once with the send nodes disabled.

Chasing twice is the failure that costs money. As written the run reads last_chased_at from the ledger but only writes to the log, so a broken log leaves the guard blind. Writing that timestamp back onto the invoice row is something I do before go-live, along with a cap on emails per run, because one bad CSV import should not be able to mail your entire customer list at nine in the morning.

What it costs to run

No model calls and no paid API. This is a schedule, a sheet, a switch and Gmail, so the direct cost is whatever your automation platform already costs you. Gmail sending limits are the only ceiling I would check, and at the volume this is built for you will not reach them.

What it does cost is judgement, once. Somebody has to set the day boundaries, and seven and thirty are my starting point rather than a rule: long-term B2B contracts usually want fourteen and forty five. Somebody also has to work the Exceptions tab, which is where your genuinely messy rows will end up.

Why take this from me

Because I have already built the unglamorous half of this. The invoice pipeline in the work below reads supplier invoices out of a mailbox and writes them into a live production platform, and it raises its hand on anything it is unsure about instead of booking a confident wrong number. The same instinct runs through this build, pointed at the other side of the ledger.

What I cannot show you is a client who used it, because I have not had one yet. The systems on this page are my own, running in my own businesses, and I would rather put that in writing than let you find it out on your own. There are no reviews on this site for the same reason.

Read this before you spend anything

When I would tell you not to build it

Your accounting software may well do this already, so start there before you read another line. Xero, QuickBooks and FreeAgent all send automated payment reminders out of the box, keyed on the invoice status they already hold, which is better data than a spreadsheet will ever have. If you are on one of them, I would expect you to own this feature without paying me for it.

Below roughly ten invoicing customers a month, leave it alone. You know every name at that size, and one personal message from you beats anything I could automate, every time. A template will make you look like a company with a system, when what you have is fewer than ten relationships worth handling properly.

And do not build it on a ledger you cannot trust. Every check in the guard reads a column, so if the status column gets filled in whenever somebody remembers, the automation will chase paid invoices with total confidence. I would fix the ledger first and automate second, which is the duller project and the one that actually works.

What lands on your desk

  • The chaser running on your own schedule, against your own ledger, sending from your own Gmail account
  • A guard that excludes paid, disputed, cancelled and already-chased rows before a single email is composed
  • Three escalation stages with copy you own, and a hard stop at thirty days where a human takes over
  • Every row the guard could not read parked in an Exceptions tab, with the reason attached to it
  • A chase log that doubles as your answer when a customer says they were never contacted
  • A dry run, so you can read what it would have sent before it is allowed to send anything

Questions this page answers

What stops it chasing someone who already paid?
I write an exclusions node that drops anything already marked as paid, disputed or cancelled or on hold. It also de-duplicates already-chased invoices, so nothing goes out twice in one run.
What happens past thirty days overdue?
The automation stops emailing your customer and emails you instead. I have yet to see an email template recover a debt that old.
Does this need a paid API to run?
No paid API and no model calls. This is a schedule, a sheet, a switch and Gmail, so the cost is whatever your automation platform already costs you.
Should I build this with fewer than ten invoicing customers a month?
I wouldn't build it, since you know every name at that size and one personal message from you beats anything automated.
Does my accounting software already do this?
Xero, QuickBooks and FreeAgent already send automated payment reminders keyed on the invoice status they already hold.

Want this built and handed over working?

One line is enough to start. You get an honest answer on fit, and a number rather than a discovery call.

Start a brief