- Home
- Guides
- Power Automate
- How to send Excel expiry date reminders with Power Automate
How to send Excel expiry date reminders with Power Automate
Build a flow that checks an Excel list every morning and emails the owner of each item 30 days before it expires, only once. It also fixes the three common date problems. No SharePoint or premium connectors are needed.
Jump to a step (12)
Every small business has dates it cannot miss, like insurance renewals, vehicle registrations, leases, contracts and staff certificates. When one expires, it can cost you money or stop your work. If you try to automate reminders from Excel, dates often show up as numbers, reminders arrive a day early or late, or the same email goes out every day.
In this guide I build the flow for a cleaning company that keeps its renewals in one Excel file. The flow runs at 8 AM every day, finds anything that expires in the next 30 days, emails the owner, and writes the date in the file so nobody gets the same reminder twice.
What you need
- A Microsoft 365 work or school account with Power Automate (standard connectors only, no premium licence)
- An Excel file stored in OneDrive for Business
- The data formatted as an Excel table (Power Automate can only read rows from a table)
- Table columns: ID, Item, Type, Owner, Owner email, Expiry date and Reminder sent
- An Outlook mailbox to send the emails from (Office 365 Outlook connector)
- No SharePoint needed
Step by step
0 of 12 done-
01
Set up the Excel table
Put your list in an Excel file in OneDrive and format it as a table. In my example the file is Renewals tracker and the table is called Renewals. Each row has an ID, the Item, the Type, the Owner, the Owner email and the Expiry date. Add a last column called Reminder sent and leave it empty. The flow fills it after it sends a reminder.
-
02
Create a scheduled cloud flow
In Power Automate, click Create and select Scheduled cloud flow. Name it
Renewal remindersand set the starting time to 8 AM. The Repeat every option is set to Minute by default, so change it to Day. Then click Create. -
03
Set the time zone and run time
Click the Recurrence trigger. For Time zone, select (UTC-05:00) Eastern Time (US & Canada), or your own time zone. For At these hours, select 8, and for At these minutes, type
0. Without a time zone, the flow runs on UTC time, so 8 AM is not your 8 AM. -
04
Read the Excel table with real dates
Add the List rows present in a table action from Excel Online (Business). Select:
- Location: OneDrive for Business
- Document Library: OneDrive
- File: your file (here, Renewals tracker)
- Table: Renewals
Then click Advanced parameters, select DateTime Format and set it to ISO 8601. Without this, Excel sends dates as numbers like 46335.
-
05
Add a Compose for today's date
Add a Compose action and rename it to
Today. In Inputs, click the expression icon, enter this expression and click Add:formatDateTime(convertFromUtc(utcNow(), 'Eastern Standard Time'), 'yyyy-MM-dd')It takes the current time, converts it to Eastern Time and keeps only the date. Convert only the current time, never the Excel date.
-
06
Add a Compose for the reminder window
Add a second Compose action and rename it to
Remind until. In Inputs, add this expression:formatDateTime(addDays(outputs('Today'), 30), 'yyyy-MM-dd')It adds 30 days to today. Any item that expires on or before this date gets a reminder.
-
07
Filter the items that are due
Add a Filter array action and rename it to
Due for a reminder. For From, click the lightning icon and select value from List rows present in a table. Click Edit in advanced mode and enter:@and(lessOrEquals(formatDateTime(item()?['Expiry date'], 'yyyy-MM-dd'), outputs('Remind_until')), empty(item()?['Reminder sent']))It keeps a row when the expiry date is within the window and Reminder sent is empty.
-
08
Loop through the due items
Add an Apply to each action. Click the output box, click the lightning icon and select Body from Due for a reminder. The flow now sends one email for each item that is due.
-
09
Send the reminder email
Inside the loop, add Send an email (V2). After a Filter array, the Excel columns do not show as dynamic content, so use short expressions.
- To: click the gear icon, select Use dynamic content, then add the expression
items('Apply_to_each')?['Owner email'] - Subject: type
Renewal reminder - Body: type
Hi - Add the expression
items('Apply_to_each')?['Owner'] - Type
, - Add the expression
items('Apply_to_each')?['Item'] - Type
expires on - Add the expression
formatDateTime(items('Apply_to_each')?['Expiry date'], 'dddd, MMMM d, yyyy') - Type `. Please start the renewal this week
- To: click the gear icon, select Use dynamic content, then add the expression
-
10
Mark the reminder as sent
Inside the loop, add Update a row from Excel Online (Business) and pick the same location, document library, file and table. Set Key Column to ID and Key Value to
items('Apply_to_each')?['ID']. Click Advanced parameters, select Reminder sent and set it tooutputs('Today'). The next day, the filter skips that row. -
11
Save and test the flow
Click Save, then Test, select Manually, click Test and then Run flow. Click Done. In my test, three items were due within 30 days, so the loop ran three times.
-
12
Check the emails and the Excel file
Open the owner's mailbox and check the reminder text and the date format. Then refresh the Excel file. The Reminder sent column now shows today's date for the items that got a reminder, so a second run sends nothing.
Tips and common problems
- If your dates arrive as numbers like 46335, you missed the DateTime Format setting. Set it to ISO 8601 in List rows present in a table.
- Do not convert the Excel expiry date to your time zone. An ISO date is midnight UTC, so converting it to a US time zone moves it back by one day.
- The expressions use the internal action names, like
Remind_untilandApply_to_each. If you name your actions differently, change the expressions to match. - Column names in the expressions must match your Excel headers exactly, including spaces and capital letters, for example
Owner emailandExpiry date. - Each item gets exactly one reminder. If you want a second reminder closer to the date, you need to clear the Reminder sent cell or change the flow.
- An item 31 days out is not included today. It will be picked up tomorrow, when it falls inside the 30 day window.
Questions
Do I need a premium Power Automate licence for this?
No. The flow uses only standard connectors: Recurrence, Excel Online (Business), Compose, Filter array and Office 365 Outlook. It works with a normal Microsoft 365 business licence.
Can I change the 30 days to a different number?
Yes. Change the 30 in the Remind until expression to the number of days you want, for example 60 for two months' notice.
Why does the flow need a Reminder sent column?
Without it, the flow would email the same person every day for 30 days. The flow writes today's date in that column after each email, and the filter skips any row where it is not empty.
Why does my Excel file not show up in the table list?
Power Automate can only read rows from an Excel table. Select your data in Excel, format it as a table and give it a name, then pick it again in the flow.
My office is not on Eastern Time. What do I change?
Pick your own time zone in the Recurrence trigger and use the matching name in the Today expression, in place of 'Eastern Standard Time'.
