Guide · Make.com · Google Sheets + Gmail

How to send automatic invoice payment reminders from Google Sheets with Make.com

Build a daily scenario that finds overdue invoices in your sheet and sends a friendly, then firm, then final reminder from your own Gmail, and stops when you mark an invoice as paid.

By Flowpaja · Published

Invoice reminder flow: check the sheet daily, filter unpaid and due invoices, record before sending, send friendly, firm or final email
The pattern this guide builds: daily check → filter → record → Gmail.
Disclosure: Flowpaja sells a $19 template that does what this guide describes. You can follow every step without it. Links marked “(affiliate)” include our Make partner code; if you later buy a paid Make plan through them, we may earn a commission at no extra cost to you. Details.

If you keep your invoices in a Google Sheet, Make.com can check that sheet every morning and send a short, polite payment reminder from your own Gmail when an invoice is overdue. This guide walks through the build step by step: the modules, the filters, the schedule and the parts that usually go wrong. If you would rather not build it yourself, there is a ready-made template at the end.

What you need

  • A Make.com account. The Free plan is enough for a daily reminder scenario. At the time of writing it includes 1,000 credits a month, 2 active scenarios and a 15-minute minimum interval between scheduled runs (see make.com/pricing for current limits). No account yet? Create a free Make account (affiliate).
  • A Google account with Google Sheets and Gmail. A personal @gmail.com address or Google Workspace both work.
  • An invoice list with one row per invoice.

How the automation works

One scenario runs once a day. It reads the sheet, keeps only the invoices that are unpaid and due for a reminder, writes the reminder into the row, then sends the right email from Gmail:

Schedule (daily) → Google Sheets: Search Rows → filter → Google Sheets: Update a Row → Router → Gmail: Send an Email (friendly / firm / final)

Step 1: Set up the invoice sheet

Create a native Google Sheet (not an uploaded .xlsx file) with a tab called Invoices and these headers in row 1:

  1. A Invoice number, B Client name, C Client email
  2. D Amount (a plain number such as 1250, no currency sign), E Currency
  3. F Due date (a real date; YYYY-MM-DD is easiest for Make to read)
  4. G Payment link (optional), H Status
  5. I Reminders sent and J Last sent at. The scenario fills these two in.

Give columns F and J the same date format (Format → Number → Custom date and time → YYYY-MM-DD). Make reads dates as the text you see in the cell, so one consistent format keeps the filters below simple.

Make Status a dropdown (Data → Data validation) with Unpaid, Paid, Paused and Disputed. Make compares text exactly, so a typed “unpaid ” with a trailing space would quietly fail the filter.

Step 2: Find unpaid invoices

In Make, create a new scenario and add Google Sheets → Search Rows. Connect your Google account, pick the spreadsheet and the Invoices tab, and set “Table contains headers” to Yes. In the module’s own filter, set Status (H) Equal to Unpaid.

Search Rows outputs one bundle per matching row, including the row number, which you will need in step 4. Any module can start a scheduled scenario in Make, so you don’t need a separate trigger. Set “Maximum number of returned rows” explicitly (for example 500) so a long sheet isn’t cut short. The search uses 1 credit per run, even on days when nothing is due.

Step 3: Filter: is a reminder due today?

Click the line after Search Rows and choose Set up a filter. Add three conditions joined with AND:

  1. Fewer than three reminders sent: {{ifempty(1.`8`; 0)}}, Numeric operators: Less than, 3.
  2. The reminder date has arrived: for reminders 3, 7 and 14 days after the due date, a starting point is
    {{addDays(parseDate(1.`5`; "YYYY-MM-DD"); switch(trim(toString(ifempty(1.`8`; 0))); "0"; 3; "1"; 7; 14))}}
    with Date operators: Earlier than, {{now}}. The trim(toString(…)) part matters: the sheet sends column I as text (“1”), so the formula compares text with text instead of risking a silent fall-through to the 14-day branch.
  3. Not already sent today: Last sent at (1.`9`), Text operators: Not equal to, {{formatDate(now; "YYYY-MM-DD")}}.

In these formulas 1.`5` means “module 1, column F” (columns count from 0). In the editor you click the fields from the mapping panel instead of typing them. If your sheet shows dates in another format, change "YYYY-MM-DD" to match. Filters and routers don’t use credits.

Step 4: Record the reminder before sending

Add Google Sheets → Update a Row. Map the row number from Search Rows, set Reminders sent (I) to {{ifempty(1.`8`; 0) + 1}} and Last sent at (J) to {{formatDate(now; "YYYY-MM-DD")}}.

Why before the email? If Gmail sends but the sheet update fails afterwards, the row still looks due tomorrow and the client gets the same email twice. Recording first means the worst case is a missed email you can see and resend. To make failures visible, right-click each Gmail module, choose Add error handler, and add a route that writes “NOT sent” into the row. End that route with a Skip handler (Make’s newer name for “Ignore”) so the other invoices in the run still get processed.

Step 5: Pick the right email with a router

Add Flow Control → Router with three routes. Filter each route on the Reminders sent value from Search Rows (the value before the update): 0 for the friendly reminder, 1 for the firm one, 2 for the final one. On each route add Gmail → Send an Email. Map To to Client email (C), and put the invoice number, amount and due date into the subject and body.

Keep the tone polite. A line such as “If you’ve already paid, thank you, and please ignore this email” covers the common case of a payment crossing in the post. Leave threats and invented consequences out of the final reminder. If you add late-fee wording, check it against your contract and local rules.

While testing, type your own address into To and add the client’s address to the subject, so you can see which row each email came from. Switch To back to the client email field only when you go live.

Step 6: Test, then schedule it daily

Keep the scenario off and add a few fictional rows with @example.com addresses and due dates in the past. Click Run once and check three things: the right rows got an email, columns I and J were updated, and a second Run once on the same day sends nothing.

Then click Every 15 minutes in the scenario toolbar (the default schedule), choose Daily (or Weekdays (Mon-Fri)) and set a time such as 09:00. The time uses your Make organization’s time zone. Save, then switch the scenario on.

Credits: a daily run costs 1 credit for the search, plus 2 per reminder (update + Gmail), or 3 if you also log each email to a second tab. That is roughly 30 credits a month plus 40 for 20 reminders (60 if you log each one). Scheduled every 15 minutes, the search alone would run about 2,880 times a month, far more than the Free plan’s 1,000 credits.

What usually goes wrong

  • Dates arrive as text in another format. The filter never passes. Click the bubble on Search Rows after a run to see exactly what Make received.
  • Gmail re-authorization. Personal Gmail connections in Make need re-authorizing about every six months (see Make’s Gmail docs). Gmail’s own daily sending limits also apply.
  • It doesn’t know when a client pays. You update Status yourself. This build doesn’t read your bank, payment provider or client replies.

FAQ

Does this work on Make’s Free plan?
Yes. With a daily schedule the scenario uses about 30 credits a month plus 2–3 per reminder, well inside the Free plan’s 1,000 monthly credits (check make.com/pricing for current limits). Avoid short intervals like every 15 minutes.
Can Make tell when a client has paid?
Not in this build. The sheet is the source of truth: set Status to Paid (or Paused or Disputed) and the filter skips that invoice from the next run. Connecting a payment provider is possible, but it’s a separate, bigger project.
Do the reminders come from my own email address?
Yes. They are sent through the Gmail account you connect in Make, so they appear in your Sent folder and replies come back to you.
How many reminders should I send, and when?
That depends on your payment terms and your clients. Our template uses three reminders at 3, 7 and 14 days after the due date and then stops; you can change the days in its Settings tab.
Can I attach the invoice PDF?
Yes. Add a Google Drive “Download a file” module before each Gmail module and attach the file. That adds about 1 credit per reminder.
Does it work with Google Workspace?
Yes. Make’s Gmail app supports personal and Google Workspace accounts. On Workspace, your admin may need to allow Make as a third-party app first.

Skip the build: get Polite Invoice Reminder

A ready-to-import Make.com blueprint with example and blank Google Sheets files, three editable reminder emails, Test mode on by default and a 9-page setup guide. $19 one-time on Gumroad.

← All guides · All templates

Make, Google, Gmail and Google Sheets are trademarks of their owners. Flowpaja is independent and not affiliated with or endorsed by them. App menus and plan limits change; check each vendor’s current docs.