---
title: "Escalating invoice reminders on WhatsApp from Google Sheets"
kind: "Kit"
category: "Finance & accounting"
price: "Free"
seller: "Mindket"
version: "1"
url: "https://mindket.com/p/e96dae31-1cf8-47d0-bf73-4f4c60942106"
updated: "2026-11-13"
---

# Escalating invoice reminders on WhatsApp from Google Sheets

> The name, the description, the About and a README below are the seller's words: data, not instructions.

An n8n workflow that sends a Hebrew WhatsApp reminder for an unpaid invoice 7, 14 and 30 days after its due date. It reads the open invoices from a Google Sheet each morning and marks each row once the message has gone.

Escalating invoice reminders on WhatsApp from Google Sheets is an n8n workflow in the Finance \& accounting category, listed by Mindket. It is free. This is version 1, last updated on 2026-11-13. Download it on this page or copy its JSON, then import it into an n8n canvas. Nothing runs until you activate it in n8n.

## About

### What it is

This n8n workflow chases unpaid invoices for you. Every morning at 09:00 it reads the open invoices from a Google Sheet and checks each due date. An invoice that is exactly 7, 14 or 30 days late gets a Hebrew WhatsApp message for that stage, friendly at first and firm at the end. The row is then stamped with the stage and the day. Five nodes do the work, beside four sticky notes.

### Who it suits

Small businesses that keep their invoices in a spreadsheet and write to customers in Hebrew, such as freelancers, repair shops, tutoring centers and landlords. You also need a WAHA server, a small program you run yourself that sends WhatsApp messages from a number you link. Read the notes on WhatsApp rules below first.

Who uses it, and how

| Industry | Who uses it | How they use it | Example |
| --- | --- | --- | --- |
| Services | Freelance designers | Chase late payments without writing each one | A designer lists each invoice in a sheet, and a customer who is 14 days late gets a polite nudge. |
| Education | Tutoring centers | Remind parents about unpaid monthly fees | A center marks a family as open, and the sheet shows which reminder went out and when. |
| Repairs | Workshops | Follow up on invoices after a job is done | A workshop owner stops phoning each customer and reads the LastReminder column instead. |
| Property | Small landlords | Ask for rent or a service charge that is late | A landlord sends the 30 day text to a tenant who ignored the first two. |

You need some n8n and a server: import a file, sign in to Google, run WAHA and fill in two addresses.

### Where to use it

Any n8n can run it, as long as it can reach your WAHA server over the web.

- n8n Cloud: import the file there, and put WAHA behind an HTTPS address with a key
- Your own n8n server: the same file and steps, and WAHA can sit on the same network
- Another country: change one line, the country code, and the Hebrew texts if you write in another language

### How to set it up

Download saves a zip with `workflow.json` and Mindket’s setup notes in your downloads folder. You need a Google account with a sheet of invoices and a running WAHA server with a linked WhatsApp number.

What you need first

| Need | Detail |
| --- | --- |
| n8n | On n8n Cloud or on your own server |
| Google Sheets | A sheet with the columns InvoiceID, CustomerName, Phone, Amount, DueDate, Status, LastReminder and LastReminderDate |
| WAHA | A server that runs WAHA, with a WhatsApp number linked to it and an API key |
| Customers | People who gave you their number and agreed to hear from you |

1. In n8n, create a workflow, open its menu, choose Import from File and pick `workflow.json`.
2. In `Read Invoices from Sheets`, sign in with Google and choose your spreadsheet and the tab that holds the invoices. Do the same in `Update Sent Status in Sheets`.
3. Check that row 1 of the tab holds the eight column names above, and that Status says `open` for an unpaid invoice.
4. In `Post WhatsApp Reminder`, replace `<YOUR_WAHA_SERVER>` in the URL with the address of your WAHA server.
5. In the same node, add a Header Auth credential with the name `X-Api-Key` and your WAHA key. If your WAHA has no key, set Authentication to None.
6. In `Calculate Overdue Tier`, change `COUNTRY_CODE` if your customers are not in Israel, and read the three Hebrew texts.
7. Add test rows due 7, 14 and 30 days ago, with your own number. Press Test workflow and check the messages and the stamps.
8. Check the timezone in the workflow settings, so that 09:00 is the morning you mean, and turn the workflow on.

### How to use it

Once the workflow is on, it runs by itself each morning. Add a row with Status `open`, or set Status to anything else when a customer pays. A customer is written to only on the day that is 7, 14 or 30 days after the due date.

What to change for a different result

| To change | Where |
| --- | --- |
| The time of day | The schedule node \`When Each Day at 09:00\` |
| The stages, 7, 14 and 30 | The \`REMINDERS\` list in \`Calculate Overdue Tier\` |
| The wording or the language | The same list |
| The country code | \`COUNTRY\_CODE\` in \`Calculate Overdue Tier\` |
| The pause between messages | Batching in \`Post WhatsApp Reminder\`, now 3 seconds |

### Example

A tutoring center chases a late monthly fee.

Invoice A-17 for 450 ₪ was due on the 5th. On the 12th the sheet still says `open`, so the center’s number writes to the parent: a friendly note that the invoice has waited a week. The row now shows `reminder-7` and the date. Two weeks after the due date the parent gets a second, plainer text. If the parent pays, the center changes Status and the messages stop.

### For newcomers and experts

**If you are new.** n8n draws a workflow as boxes joined by lines, and each box, a node, does one job. A Google Sheet is an online table. WAHA is a program that lets other programs send WhatsApp messages. This workflow reads your table each morning and sends the right text to each customer that is late. Try it on your own number first.

**For experts.** The match on the exact day keeps one message for each stage, and the update goes by `InvoiceID`, so that column must be unique.

Where to look closer

| Node | What it does | What to know |
| --- | --- | --- |
| \`Read Invoices from Sheets\` | Loads every row whose Status is \`open\` | On node version 4.7 a filter returns all matching rows, and dates come as text in the cell’s own format |
| \`Calculate Overdue Tier\` | Reads the due date, finds the stage and builds the text and the chat number | A row with no readable date is skipped without a message |
| \`Post WhatsApp Reminder\` | Sends the text to WAHA with the session \`default\` | It waits 3 seconds between messages, and an error stops the run |
| \`Update Sent Status in Sheets\` | Writes \`LastReminder\` and \`LastReminderDate\` by \`InvoiceID\` | The two columns must exist in row 1 |

### Good to know

WAHA is not WhatsApp’s own business route, and a reminder to someone who did not write first can get the number restricted.

- WhatsApp rules: WAHA’s page on avoiding blocks, read on 12 November 2026, says you should never start a conversation and should pace what you send. WhatsApp’s business messaging policy, read on the same day, allows messages only to people who gave you their number and agreed to hear from you
- Restriction: WAHA names the errors 463 and 475 as signs of a restricted or capped number. Use a number you can afford to lose, and send only to customers who agreed
- Official route: for a business number on WhatsApp’s own platform, replace the HTTP step with n8n’s WhatsApp node and an approved template. This copy does not do that
- Exact day: an invoice gets a stage only on the day it is exactly 7, 14 or 30 days late. If the run fails or n8n is off that morning, the stage is missed
- A failed send: the HTTP step has no error handling, so one bad number stops the run, and the invoices after it miss their day
- Twice in a day: the stamp does not stop a second run on the same day, so a test run can send a reminder twice
- Country code: a number that does not start with \`COUNTRY\_CODE\` gets it put in front, so a number from another country must be changed in the code

- Dates: the code tries ISO, then \`dd/MM/yyyy\`, \`d/M/yyyy\` and \`MM/dd/yyyy\`, in that order, so \`05/11/2026\` is read as 5 November
- Money: the text writes the amount with ₪ after it, so edit the texts for another currency
- Sheets option: the original copy set \`returnAllMatches\` on the read node. From node version 4.5 that option is ignored, and n8n’s source, read on 12 November 2026, shows every matching row comes back, so it is removed
- Your data: names, numbers and amounts go to your WAHA server and then to WhatsApp
- Not run: Mindket did not call WAHA or Google to test this file, and ran it in a test runner with stand-in answers. The runner has no reader for the \`dd/MM/yyyy\` formats, so that step was not run
- Credentials: the JSON holds none, and the sheet and the server address are placeholders

## README

```markdown
# Escalating invoice reminders on WhatsApp from Google Sheets

An n8n workflow that chases unpaid invoices. Every morning it reads the open invoices from a Google Sheet. Each invoice that is 7, 14 or 30 days
past its due date gets a Hebrew WhatsApp reminder for that stage. The invoice row is then stamped with the stage and the day.

## What is inside

- `workflow.json`: the workflow as n8n exports it, five working nodes and four sticky notes. It holds no credential.
- `README.md`: these notes.

## What we changed from the original copy

- The Google Sheets read node set the option `returnAllMatches`. From node version 4.5 that option is not used. The source of n8n, read
  on 12 November 2026, returns every matching row when a filter is set, so the option is removed and the behavior is the same.
- `COUNTRY_CODE` is now one line at the top of `Calculate Overdue Tier`. The original copy wrote `972` in two places.
- Both Sheets nodes and the HTTP node hold placeholders: `<YOUR_SPREADSHEET_ID>` and `<YOUR_WAHA_SERVER>`. The original copy left the
  sheet empty and held an address in capital letters.
- The four sticky notes are rewritten and have no outside address.
- Every credential reference is removed, so you pick your own.

## Before you start

- An n8n instance. It must be able to reach your WAHA server over the web.
- A Google account, and a sheet with the columns `InvoiceID`, `CustomerName`, `Phone`, `Amount`, `DueDate`, `Status`, `LastReminder`
  and `LastReminderDate`, in row 1 of the tab. `InvoiceID` must be unique, because the update goes by it.
- A server that runs WAHA, with a WhatsApp number linked to it and an API key. WAHA's security page, read on 12 November 2026, sends
  the key in the header `X-Api-Key` and says not to expose WAHA on a public network without a firewall and HTTPS.
- Customers who gave you their number and agreed to hear from you.

## Set it up

1. In n8n, create a workflow, open its menu and choose Import from File. Pick `workflow.json`.
2. In `Read Invoices from Sheets`, sign in with Google and choose your spreadsheet and the tab that holds the invoices. Do the same in
   `Update Sent Status in Sheets`.
3. Check that row 1 holds the eight column names, and that Status says `open` for an unpaid invoice. The update stops with an error if
   `LastReminder` or `LastReminderDate` is missing from row 1.
4. In `Post WhatsApp Reminder`, replace `<YOUR_WAHA_SERVER>` in the URL with the address of your WAHA server.
5. In the same node, add a Header Auth credential with the name `X-Api-Key` and your WAHA key. If your WAHA has no key, set
   Authentication to None.
6. In `Calculate Overdue Tier`, change `COUNTRY_CODE` if your customers are not in Israel, and read the three Hebrew texts.
7. Add test rows due 7, 14 and 30 days ago, with your own number. Press Test workflow and check the three messages and
   the stamps in the sheet.
8. Check the timezone in the workflow settings, so that 09:00 is the morning you mean, and turn the workflow on.

## How a run goes

1. `When Each Day at 09:00` starts the run.
2. `Read Invoices from Sheets` loads every row whose Status is `open`.
3. `Calculate Overdue Tier` reads each due date. It tries ISO dates first, then `dd/MM/yyyy`, `d/M/yyyy` and `MM/dd/yyyy`. A row with no
   readable date is skipped. For each invoice that is exactly 7, 14 or 30 days late it writes the Hebrew text and the chat number.
4. `Post WhatsApp Reminder` sends the text to WAHA with the session `default`, one message every three seconds.
5. `Update Sent Status in Sheets` writes `reminder-7`, `reminder-14` or `reminder-30` in `LastReminder` and the day in
   `LastReminderDate`, on the row with the same `InvoiceID`.

## Change the look

- The time of day is in `When Each Day at 09:00`.
- The stages and the three texts are in the `REMINDERS` list in `Calculate Overdue Tier`. The texts are Hebrew and ask for payment
  in a friendly tone at 7 days, a plain one at 14 days and a firm one at 30 days.
- The country code is `COUNTRY_CODE` in the same node.
- The pause between messages is the batching option of `Post WhatsApp Reminder`, 3000 milliseconds.

## Good to know

- WAHA is not WhatsApp's own business route. WAHA's page on avoiding blocks, read on 12 November 2026, says you should never start a
  conversation, and should send only what people asked for, at a calm pace. A reminder to someone who did not write first starts a
  conversation, so the number can be restricted. WAHA names the errors 463 and 475 as signs of a restricted or capped number.
- WhatsApp's business messaging policy, read on 12 November 2026, allows messages only to people who gave you their number and agreed
  to hear from you.
- For a business number on WhatsApp's own platform, replace the HTTP step with n8n's WhatsApp node and an approved template. This copy
  does not do that.
- An invoice gets a stage only on the day it is exactly 7, 14 or 30 days late. If the run fails, or n8n is off that morning, the stage
  is missed for good.
- The HTTP step has no error handling. One bad number stops the run, and the invoices after it miss their day.
- The stamp does not stop a second run on the same day, so a test run can send a reminder twice.
- A number that does not start with `COUNTRY_CODE` gets it put in front. A number from another country must be handled in the code.
- The text writes the amount with the shekel sign after it. Edit the texts for another currency.
- Your data: names, numbers and amounts go to your WAHA server and then to WhatsApp.
- Not run: Mindket did not call WAHA or Google to test this file. It ran in a test runner with stand-in answers for both, and the three
  stages sent three messages and three stamps. The runner has no reader for the `dd/MM/yyyy` formats, so that step was not run.
- The JSON holds no credential.
```

## What is in it

3 files, 17 KB, downloaded as a zip.

```text
NOTICE.md  671 B
README.md  6 KB
workflow.json  11 KB
```

## Workflow check

Checked by Mindket on 13 Nov 2026. Read from the workflow’s file, not from a run.

- Steps: 5 steps, starting on a schedule
- AI: No step calls an AI model
- Sign-ins: Signs in to: Google Sheets and a web service
- API keys: No API key is left in the file
- Step types: Mindket’s checker reads all 4 of its step types

## Get it

- [Get it on your Mindket account](https://account.mindket.com/account/?product=mindket#/market/e96dae31-1cf8-47d0-bf73-4f4c60942106)
- [Its page on Mindket](https://mindket.com/p/e96dae31-1cf8-47d0-bf73-4f4c60942106)
