Send Email Alerts When Excel Data Changes

Power Automate: Send Email Alerts When Excel Data Changes
Automate email notifications from Excel when important data changes with this practical tutorial. Learn how to use VBA, worksheet change events, Outlook automation, trigger conditions, recipient lists, and custom alert messages to send emails automatically when specific cells or values are updated. Ideal for Excel users, analysts, finance teams, operations teams, and professionals who want to monitor workbook changes and automate important email alerts.

Excel is great at storing data. However, it has no built-in way to alert you when that data changes. Power Automate fills this gap. It monitors an Excel file on OneDrive or SharePoint. When a new row is added or a value changes, it sends an email alert instantly — no VBA required.

This guide covers the two main trigger types and six practical flows. Examples include a new-row alert, a threshold alert, a daily digest, a conditional column alert, a multi-recipient notification, and an approval request triggered by a row change.

What you need: A Microsoft 365 account with Power Automate access. The file must be on OneDrive for Business or SharePoint. Power Automate cannot read locally saved Excel files.

The Two Main Excel Triggers

Power Automate uses triggers to decide when a flow runs. Two triggers matter most for Excel alerts. The first detects new rows added to a table. The second runs on a schedule, querying the file at set intervals for value changes.

TriggerWhen it firesBest for
When a row is addedEvery time a new row is inserted into an Excel TableNew entry alerts, approval triggers, instant notifications
RecurrenceAt a fixed interval (e.g. every hour, 9am daily)Threshold checks, daily digests, monitoring value changes
When a file is modifiedAny change to the Excel file on SharePointGeneral change detection when row-level detail is not needed
Excel Table required: The Excel connector requires data formatted as a proper Table (Insert > Table). Plain cell ranges are not supported. The table must also have a unique key column — Power Automate uses this to track which rows it has already processed.

Setting Up the Excel Connection

The data must live inside a named Excel Table, not a plain range. Additionally, the file must be saved to OneDrive for Business or a SharePoint document library. Both are quick one-time setup steps that unlock all Power Automate Excel capabilities.

1
Open the Excel file and select your data. Go to Insert > Table. Check "My table has headers" and click OK. Name the table in the Table Design tab (e.g. "SalesData").
2
Save the file to OneDrive for Business or a SharePoint document library.
3
Go to make.powerautomate.com. Click Create > Automated cloud flow. Search for "Excel" and select the "When a row is added" trigger.
4
Choose your Location, Document Library, File, and Table from the dropdowns. Then add a Send an email (V2) action.

Examples 1–4: Excel Alert Flows in Practice

1
New-row alert — email when a form submission arrives

This is the most common Excel alert pattern. A Microsoft Form writes responses to an Excel table. Power Automate detects each new row and emails you the submitted values instantly. You therefore never need to open the file to see what came in.

Step
Action
Configuration
Trigger
When a row is added
Table: FormResponses
Action 1
Send an email (V2)
To: you@company.com
Subject
Dynamic content
"New response: " + Name
Dynamic content: In the email Body field, click Add dynamic content to insert Excel column values from the triggering row directly into the message.
2
Value-threshold alert — email when a KPI exceeds a limit

A Recurrence trigger checks the table every hour. A List rows action reads all rows. A Filter array keeps only rows where the value exceeds your threshold. If that array is not empty, the flow consequently sends an alert email. This is how you build an automated KPI monitor.

Flow structure for threshold monitoring: Trigger: Recurrence → Every 1 hour Action 1: List rows present in a table Table: KPIData Action 2: Filter array From: [List rows output] Condition: Item?['Revenue'] > 100000 Action 3: Condition If: length(body('Filter_array')) > 0 Yes → Send email: "KPI threshold exceeded" No → Terminate (no alert needed)
3
Daily summary digest — email rows added today

A Recurrence trigger fires at 8am. A List rows action reads the table. A Filter array keeps only today’s rows. An Apply to each loop then builds an HTML table from those rows. Finally, the email action sends the formatted summary. This replaces manual daily file checking entirely.

Key expression for "added today" filter: Filter condition: Item?['SubmissionDate'] >= formatDateTime(utcNow(),'yyyy-MM-dd') Build HTML in Apply to each: tableBody += '<tr><td>' + item()?['Name'] + '</td><td>' + item()?['Amount'] + '</td></tr>' Email body: '<table><tr><th>Name</th><th>Amount</th></tr>' + variables('tableBody') + '</table>'
4
Conditional alert — email only for specific column values

Instead of alerting on every new row, add a Condition action after the trigger. The condition checks whether the Status column equals "Urgent". Only Urgent rows trigger the email. Other rows are processed silently without generating any notification.

Condition action inside the flow: Trigger: When a row is added → Table: Orders Condition: triggerOutputs()?['body/Status'] equals 'Urgent' If Yes: Send email To: manager@company.com Subject: "URGENT order: " + Order ID Body: Customer + Amount + Due Date If No: [no action — flow ends silently]

Examples 5–6: Multi-Recipient and Approval Request

5
Multi-recipient alert — route emails by region column

A Switch action routes emails to different recipients based on a column value. Specifically, it checks the Region column and directs each alert to the right team address. This consequently replaces a manual distribution process with an automated routing system.

Switch action on the Region column: Switch on: triggerOutputs()?['body/Region'] Case 'North': Send email → north-team@company.com Case 'South': Send email → south-team@company.com Default: Send email → general@company.com
6
Approval request — update row after manager approves

The Start and wait for an approval action sends an approval email to a manager. When the manager clicks Approve or Reject, Power Automate updates the Status column automatically. This creates an end-to-end approval workflow without any extra infrastructure or SharePoint lists.

Approval flow structure: Trigger: When a row is added → Table: Expenses Action 1: Start and wait for an approval Type: Approve/Reject - First to respond Title: "Expense: " + Amount Assigned to: manager@company.com Action 2: Condition If: outcome equals 'Approve' Yes → Update a row: Status = 'Approved' No → Update a row: Status = 'Rejected'

Common Issues and How to Fix Them

The trigger fires but sends duplicate emails

Duplicate triggers usually occur because the Excel table lacks a unique key column. Power Automate uses this column to track processed rows. Go to the trigger settings and add a column with a unique value per row — such as an ID or timestamp. A formula like =ROW()-1 or a manually managed ID column both work.

The flow does not trigger when a row is added

First, check that the data is a proper Excel Table rather than a plain range. The "When a row is added" trigger only works with formatted Tables. Additionally, verify the file is on OneDrive for Business or SharePoint — not personal OneDrive. Finally, confirm the Power Automate connection has not expired and still has file access.

Frequently Asked Questions

  • Does the Excel file need to be on SharePoint for Power Automate to work?+
    The file must be on OneDrive for Business or a SharePoint document library. Personal OneDrive accounts have limited connector support. The file cannot be stored on a local drive or network share. If your file is currently local, upload it to OneDrive for Business and update any existing links to the new location.
  • Can Power Automate detect a cell value change, not just a new row?+
    The "When a row is added" trigger only fires for new rows. To monitor value changes to existing rows, use a Recurrence trigger that reads all rows with List rows on a schedule and compares the current value to a previously stored value. Store the previous value in a SharePoint list item or a separate cell to compare on each run.
  • How do I include Excel table data in the email body?+
    Click the email Body field in Power Automate and then click "Add dynamic content." This opens a panel showing all column names from your Excel table. Click any column to insert it as a dynamic placeholder. When the flow runs, each placeholder is replaced with the actual value from the triggering row. You can also build an HTML table using an Apply to each loop for multiple rows.
  • Is Power Automate free with Microsoft 365?+
    Most Microsoft 365 Business and Enterprise plans include Power Automate with a seeded licence covering standard connectors — including Excel, Outlook, and SharePoint. Premium connectors such as Salesforce or SQL Server require a paid Power Automate licence. Check your M365 admin centre or visit make.powerautomate.com to see which tier your account includes.