Google Sheets + Gmail: invoices sent, reminders tracked
Invoicing is rarely the hard part. It’s the chasing, the checking, and the “did they pay yet?” spreadsheet archaeology that quietly steals your week (and your patience).
This invoice reminder automation hits small business owners first, but agency operators and bookkeepers feel it too. You’ll send invoices on schedule, follow up automatically when they’re late, and keep a clean record in Google Sheets without babysitting it.
Below, you’ll see exactly what the workflow does, what you get out of it, and how to make it fit your billing cadence.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Google Sheets + Gmail: invoices sent, reminders tracked
flowchart LR
subgraph sg0["Flow 1"]
direction LR
n1@{ icon: "mdi:cog", form: "rounded", label: "Daily Payment Reminder Check", pos: "b", h: 48 }
n3@{ icon: "mdi:database", form: "rounded", label: "Get Overdue Invoices", pos: "b", h: 48 }
n5["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Filter Overdue Invoices"]
n9["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Calculate Reminder Type"]
n10@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Switch Reminder Type", pos: "b", h: 48 }
n11@{ icon: "mdi:message-outline", form: "rounded", label: "Send Gentle Reminder", pos: "b", h: 48 }
n12@{ icon: "mdi:message-outline", form: "rounded", label: "Send Follow-up Reminder", pos: "b", h: 48 }
n13@{ icon: "mdi:message-outline", form: "rounded", label: "Send Urgent Reminder", pos: "b", h: 48 }
n14@{ icon: "mdi:message-outline", form: "rounded", label: "Send Final Notice", pos: "b", h: 48 }
n15@{ icon: "mdi:database", form: "rounded", label: "Update Reminder Log", pos: "b", h: 48 }
n14 --> n15
n3 --> n5
n11 --> n15
n13 --> n15
n10 --> n11
n10 --> n12
n10 --> n13
n10 --> n14
n9 --> n10
n5 --> n9
n12 --> n15
n1 --> n3
end
subgraph sg1["Flow 2"]
direction LR
n0@{ icon: "mdi:cog", form: "rounded", label: "Monthly Invoice Trigger", pos: "b", h: 48 }
n2@{ icon: "mdi:database", form: "rounded", label: "Get Clients for Invoicing", pos: "b", h: 48 }
n4["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Filter Active Clients"]
n6["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Generate Invoice Data"]
n7@{ icon: "mdi:database", form: "rounded", label: "Save Invoice to Google Sheets", pos: "b", h: 48 }
n8@{ icon: "mdi:message-outline", form: "rounded", label: "Send Invoice Email", pos: "b", h: 48 }
n16@{ icon: "mdi:database", form: "rounded", label: "Log Invoice Creation", pos: "b", h: 48 }
n8 --> n16
n4 --> n6
n6 --> n7
n0 --> n2
n2 --> n4
n7 --> n8
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n10 decision
class n3,n15,n2,n7,n16 database
class n5,n9,n4,n6 code
classDef customIcon fill:none,stroke:none
class n5,n9,n4,n6 customIcon
The Problem: Invoices go out, but follow-ups slip
Most businesses don’t struggle to create invoices. They struggle to run the process consistently. A few invoices go out late because you were busy. Then a client pays late because nobody followed up. Then you’re digging through email threads, trying to remember when the last reminder went out, and updating a spreadsheet after the fact. It’s not just time. It’s mental load, awkward conversations, and cash flow that becomes unpredictable when your “system” depends on you remembering to chase.
The friction compounds. Here’s where it breaks down.
- Invoices get sent, but nobody records the send date and due date in one reliable place.
- Overdue follow-ups happen “when you have a minute,” which means they happen late or not at all.
- Clients receive inconsistent reminders because templates change depending on your mood that day.
- You can’t easily answer basic questions like “Who’s 7 days late?” without manual filtering and double-checking.
The Solution: Automated monthly invoicing + daily overdue reminders
This n8n workflow turns Google Sheets into your billing control panel and Gmail into your delivery and reminder engine. On a monthly schedule, it pulls your client list from a sheet, filters to active customers, generates the invoice details in a consistent format, and records the invoice row back into Google Sheets. Then it emails the invoice out automatically. Separately, a daily check scans the sheet for unpaid invoices, calculates how overdue each one is, and sends the right reminder email (gentle, follow-up, urgent, or final notice). Every reminder is logged back to the sheet, so you can see what happened without hunting through your inbox.
The workflow starts with two timers (one monthly, one daily). In the middle, Google Sheets acts as the source of truth while n8n decides who gets invoiced and which reminder to send. Finally, Gmail delivers the message and the sheet gets updated so your records stay honest.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you bill 25 clients monthly. Manually, you might spend about 6 minutes per client to copy amounts, update a sheet, send the email, and note the due date, which is roughly 2.5 hours each month. Then overdue follow-ups: even 8 late payers at 10 minutes each is another hour-plus (and it’s easy to forget who you already nudged). With this workflow, you spend maybe 15 minutes reviewing the sheet and templates, then the monthly send and daily checks run on their own while tracking everything in Google Sheets.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets to store clients, invoices, and reminder logs.
- Gmail (or SMTP email) to send invoices and reminders.
- Google Sheets API access (enable it in Google Cloud Console).
Skill level: Intermediate. You’ll connect accounts, map sheet columns, and tweak reminder thresholds and email templates.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
Monthly invoice trigger. On your chosen day each month, n8n starts the billing run (via a Cron schedule) and pulls your client list from Google Sheets.
Client filtering and invoice prep. The workflow filters to active customers, then builds an invoice payload (invoice ID, amount, due date, and status) in a consistent format so your sheet stays tidy.
Send + log. It records the invoice row in Google Sheets, emails the invoice through Gmail, and logs the send activity for auditing and “what happened here?” moments later.
Daily overdue scan and reminders. Every day, a second Cron trigger checks the sheet for unpaid invoices, calculates how late they are, routes them into the right reminder type, then sends the correct email and updates the reminder tracker.
You can easily modify reminder thresholds to match your payment terms based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Cron Triggers
Set up the two scheduled triggers that launch monthly invoicing and daily overdue scanning.
- Open Monthly Billing Trigger and configure your monthly schedule in the Cron settings (the node is currently empty).
- Open Daily Overdue Scan and configure a daily schedule in the Cron settings (the node is currently empty).
- Confirm the execution flow: Monthly Billing Trigger → Retrieve Billing Clients and Daily Overdue Scan → Fetch Past-Due Invoices.
⚠️ Common Pitfall: Both Cron nodes have no schedule defined in the JSON. If you don’t configure the timing, the workflow will never run automatically.
Step 2: Connect Google Sheets
Attach Google Sheets credentials and configure the client and invoice data sources used across the workflow.
- Open Retrieve Billing Clients and set Sheet Name to
Clientsand Document ID to[YOUR_ID]. - Credential Required: Connect your
googleApicredentials in Retrieve Billing Clients (uses Authentication =serviceAccount). - Open Fetch Past-Due Invoices and set Sheet Name to
Invoicesand Document ID to[YOUR_ID]. - Credential Required: Connect your
googleApicredentials in Fetch Past-Due Invoices (uses Authentication =serviceAccount). - Open Record Invoice in Sheets and set Operation to
appendOrUpdate, Sheet Name toInvoices, and Document ID to[YOUR_ID]. - Credential Required: Connect your
googleApicredentials in Record Invoice in Sheets. - Open Update Reminder Tracker and set Operation to
update, Sheet Name toInvoices, and Document ID to[YOUR_ID]. - Credential Required: Connect your
googleApicredentials in Update Reminder Tracker. - Open Log Invoice Activity and set Operation to
appendOrUpdate, Sheet Name toActivity_Log, and Document ID to[YOUR_ID]. - Credential Required: Connect your
googleApicredentials in Log Invoice Activity.
Use the same spreadsheet [YOUR_ID] across all Google Sheets nodes to keep invoice status and reminder tracking aligned.
Step 3: Set Up Processing Nodes
Configure the JavaScript processing nodes that filter clients, build invoices, and classify reminders.
- Open Select Active Customers and confirm the Code field contains the provided script to filter
status === 'active'andbilling_date <= today. - Open Build Invoice Payload and confirm the invoice generation logic in Code (invoice number format and 30-day due date).
- Open Filter Past-Due Records and confirm the script filters invoices where
status === 'pending'anddue_date <= yesterday. - Open Compute Reminder Category and confirm it sets
reminder_typeandemail_subjectbased on days overdue.
⚠️ Common Pitfall: In Compute Reminder Category, the line let reminderType = 'gentle';- contains an extra hyphen that will cause a syntax error. Remove the trailing - before running.
Step 4: Configure Email Outputs and Routing
Set up the email notifications for invoices and reminders, and route messages by reminder type.
- Open Dispatch Invoice Email and set Text to
={{ $json.result }}, Subject toNew Invoice - {{ $json.invoice_number }}, To Email to={{ $json.email }}, and From Email to[YOUR_EMAIL]. - Credential Required: Connect your
smtpcredentials in Dispatch Invoice Email. - Open Route by Reminder Type and confirm each rule uses
={{$json.reminder_type}}with valuesgentle,follow-up,urgent, andfinal. - Configure each reminder email node with the same subject pattern: Send Soft Reminder, Send Follow-up Notice, Send Urgent Notice, and Send Final Alert should use
={{ $json.email_subject }} - Invoice {{ $json.invoice_id }}and={{ $json.email }}. - Credential Required: Connect your
smtpcredentials to all reminder email nodes (4 nodes handle the reminder sequence).
Execution flow reminder: Compute Reminder Category → Route by Reminder Type → one of the reminder email nodes → Update Reminder Tracker.
Step 5: Configure Logging and Tracking
Ensure invoice activity and reminder updates are stored correctly.
- Confirm Record Invoice in Sheets is connected to Dispatch Invoice Email to ensure new invoices are logged before emails are sent.
- Confirm Dispatch Invoice Email outputs to Log Invoice Activity for audit logging.
- Confirm each reminder email node outputs to Update Reminder Tracker to track reminder counts and last sent dates.
Step 6: Test and Activate Your Workflow
Run a manual test for both the invoicing and reminder paths, then activate the workflow for production use.
- Click Execute Workflow and test Monthly Billing Trigger by running Retrieve Billing Clients → Select Active Customers → Build Invoice Payload → Record Invoice in Sheets → Dispatch Invoice Email → Log Invoice Activity.
- Test the overdue path by running Daily Overdue Scan → Fetch Past-Due Invoices → Filter Past-Due Records → Compute Reminder Category → Route by Reminder Type and verify the correct reminder email node fires.
- Verify successful execution by checking the
InvoicesandActivity_Logsheets for new entries and updates. - Once confirmed, toggle the workflow to Active to enable scheduled runs.
Common Gotchas
- Google Sheets credentials can expire or need specific permissions. If things break, check the Google connection inside n8n’s Credentials section first.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Default email copy is usually too generic. Bake your brand voice and payment instructions into the invoice and reminder templates early, or you’ll be editing messages forever.
Frequently Asked Questions
About an hour if your Google Sheet and email account are ready.
No. You’ll mostly connect accounts and map your sheet columns. The logic is already built into the workflow.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also want to account for email sending limits on your provider (Gmail, SMTP, or a workspace account).
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, and it’s one of the best reasons to use n8n here. You can change the overdue thresholds in the “Compute Reminder Category” logic and adjust routing in “Route by Reminder Type” to add or remove stages. Common tweaks include sending a reminder 1 day after the due date, adding a “7 days late” escalation, and changing subject lines per reminder type to match your tone.
Most of the time it’s credentials or permissions. Reconnect your Google Sheets credential in n8n, then confirm the spreadsheet is shared with the same Google account the credential uses. Also check that your sheet name and tab names match what the nodes expect, because a renamed tab can look like a “connection” issue. If you’re running a lot of reminders at once, you may also hit Google API quotas, so spacing executions can help.
Plenty for most small teams. On n8n Cloud Starter you typically run enough executions for monthly invoicing plus daily checks, and higher tiers cover heavier volume. If you self-host, there’s no execution cap (it depends on your server). Practically, Google Sheets will become the bottleneck first if you push thousands of rows without optimizing how you read and write data.
Often, yes, because this workflow has branching logic (different reminder types) and ongoing daily checks, which can get expensive or awkward in simpler tools. n8n also gives you the option to self-host, which is nice when you don’t want to count every task. Zapier or Make can still be a good fit if your process is “send one email when a row changes” and that’s it. This one is closer to a mini billing system. If you want a second opinion, Talk to an automation expert.
Once this is running, your spreadsheet becomes the truth and your reminders stop depending on memory. Set it up, watch it work, and move on to the parts of your business that actually need you.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.