← Back to blog
google-sheetsautomationapps-scripttutorials

Google Sheets Conditional Notifications: Alert When Conditions Are Met

February 7, 2026·Sam Ralston
Notification bell icon with alert badges on a smartphone screen

Google Sheets notifications are all-or-nothing. You either get emailed on every single edit, or you get nothing. There is no middle ground built in.

But what if you only want to be notified when specific conditions are met? When a value exceeds a budget. When a date passes without action. When a status changes to "Critical." When inventory drops below a threshold.

That is what conditional notifications are. And here is how to build them.

What Conditional Notifications Look Like

Instead of "your sheet was edited," you get messages like:

"Budget exceeded: Marketing is at $12,400 against a $10,000 budget."

"Overdue: Invoice #1047 was due 3 days ago and is still unpaid."

"Low stock: Widget-A has 12 units remaining (threshold: 25)."

The key word is conditional. The notification only fires when your specific criteria are met. Everything else is ignored.

Method 1: IF-Based Triggers with Apps Script

The most flexible approach. You write a script that checks your conditions and sends a notification only when they are true.

Example: Budget Threshold Alert

function checkBudgets() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Budget"); var data = sheet.getDataRange().getValues(); var alerts = []; for (var i = 1; i < data.length; i++) { var category = data[i][0]; // Column A: category name var budget = data[i][1]; // Column B: budget amount var actual = data[i][2]; // Column C: actual spend if (actual > budget) { var over = actual - budget; alerts.push(category + ": $" + actual + " spent vs $" + budget + " budget (over by $" + over + ")"); } } if (alerts.length > 0) { MailApp.sendEmail( "[email protected]", "Budget Alert: " + alerts.length + " categories over budget", "The following categories have exceeded their budget: " + alerts.join(" ") ); } }

Set a daily trigger and you get an email only on days when something is over budget. Days when everything is fine? Silence.

Example: Overdue Items Alert

function checkOverdueItems() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Tasks"); var data = sheet.getDataRange().getValues(); var today = new Date(); today.setHours(0, 0, 0, 0); var alerts = []; for (var i = 1; i < data.length; i++) { var item = data[i][0]; // Column A: item var dueDate = new Date(data[i][2]); // Column C: due date var completed = data[i][3]; // Column D: completed date dueDate.setHours(0, 0, 0, 0); if (!completed && today > dueDate) { var daysOver = Math.floor((today - dueDate) / 86400000); alerts.push(item + " - " + daysOver + " days overdue"); } } if (alerts.length > 0) { MailApp.sendEmail( "[email protected]", "Overdue Alert: " + alerts.length + " items past due", alerts.join(" ") ); } }

This checks for items where the due date has passed and no completion date is entered. Exactly the pattern for tracking rent, invoices, maintenance requests, or any deadline-based workflow.

Example: Inventory Low Stock Alert

function checkInventory() { var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Inventory"); var data = sheet.getDataRange().getValues(); var alerts = []; for (var i = 1; i < data.length; i++) { var product = data[i][0]; // Column A: product name var quantity = data[i][1]; // Column B: current quantity var threshold = data[i][2]; // Column C: reorder threshold if (quantity <= threshold) { alerts.push(product + ": " + quantity + " remaining" + " (threshold: " + threshold + ")"); } } if (alerts.length > 0) { MailApp.sendEmail( "[email protected]", "Low Stock Alert: " + alerts.length + " items below threshold", alerts.join(" ") ); } }

Method 2: onEdit Conditional Notifications

If you want real-time notifications when a cell changes to a specific value, use an installable onEdit trigger:

function onEditConditional(e) { var range = e.range; var newValue = e.value; // Only alert when status changes to "Critical" if (range.getColumn() !== 4) return; // Column D: status if (newValue !== "Critical") return; var sheet = range.getSheet(); var row = range.getRow(); var item = sheet.getRange(row, 1).getValue(); MailApp.sendEmail( "[email protected]", "CRITICAL: " + item + " status changed", item + " (row " + row + ") was just marked as Critical." ); }

Install this as a trigger (clock icon > From spreadsheet > On edit). Now you get an email only when someone changes column D to "Critical." All other edits are ignored.

Method 3: No-Code Conditional Monitoring

If writing Apps Script is not your thing, there are tools that let you set up conditional monitoring without code.

Zapier can filter Google Sheets events. Create a Zap with a "Filter" step that only continues when your condition is met. But Zapier is better at detecting changes than detecting missing data.

Make (Integromat) can run scheduled checks against your sheet data with visual filter logic. Better for "check every morning" type monitoring.

Purpose-built tools like RentGuard handle specific conditional monitoring use cases (overdue payments, aging items) with zero configuration. You just tell the tool which column is the due date and which is the completion date.

Building Complex Conditions

Real-world monitoring often needs multiple conditions combined. Here are patterns:

AND condition: Alert when amount > $1000 AND status is "Pending"

if (amount > 1000 && status === "Pending") { alerts.push(item + ": $" + amount + " pending approval"); }

OR condition: Alert when priority is "High" OR days overdue > 7

if (priority === "High" || daysOverdue > 7) { alerts.push(item + ": needs attention"); }

Tiered alerts: Different messages based on severity

if (daysOverdue > 14) { critical.push(item); } else if (daysOverdue > 7) { warning.push(item); } else if (daysOverdue > 3) { notice.push(item); }

Best Practices

Do not over-notify. If you send 10 alerts a day, you will start ignoring them. Only alert on things that actually need action.

Include context. "Row 5 changed" is useless. "Invoice #1047 from Acme Corp ($2,400) is 3 days overdue" tells you exactly what to do.

Group alerts into one email. Instead of 5 separate emails for 5 overdue items, send one email listing all 5. The scripts above already do this.

Test your conditions. Before setting a daily trigger, run the script manually a few times. Make sure it catches what it should and ignores what it should not.

Check your triggers monthly. Apps Script triggers fail silently. Once a month, run the script manually to confirm it still works.

When to Go Beyond DIY

Apps Script conditional notifications work well for simple, stable sheets. They break down when:

Your sheet structure changes frequently. Columns move, tabs get renamed, rows get inserted. Every change risks breaking your script.

Reliability is critical. Silent trigger failures mean you are unprotected without knowing it. For low-stakes tracking, that is fine. For rent collection or financial deadlines, it is risky.

You want text alerts, not just email. Apps Script can only send emails (or use workarounds like email-to-SMS gateways that are unreliable).

For reliable conditional monitoring with text and email alerts, RentGuard handles the overdue payment and aging item use case specifically. Connect your sheet, set your conditions, and get notified without maintaining any code.

Skip the scripts: RentGuard provides conditional notifications for your Google Sheet with zero code. Alerts when payments are overdue, requests are aging, or deadlines pass. Start free.
📋 Free templates: We built 6 free spreadsheet templates for landlords — rent tracking, maintenance logs, lease management, expense tracking, and more. Pre-formatted for Google Sheets and Excel.

For more automation ideas, check email alerts in Google Sheets, due date reminders, and how to get notified when your sheet updates.

Stop missing late rent payments

RentGuard monitors your Google Sheet and alerts you when rent is overdue or maintenance is aging. No migration. 5 minute setup. 30 days free.

Start Free Monitoring →