If your organization struggles to keep track of upcoming contract renewals, this tutorial is for you. You’ll learn how to create an Automated Contract Renewal Alert Flow in Power Automate that alerts stakeholders in advance – preventing missed renewals, penalties, or unwanted auto-renewals.

🚀 What You’ll Achieve
By the end of this tutorial, your Automated Contract Renewal Alert flow will:
- Send reminders 30 days before a contract’s renewal date
- Notify the contract owner automatically
- Highlight contracts nearing expiry in a SharePoint list
- Reduce manual tracking and ensure timely action
🧰 Prerequisites
To follow along, you’ll need:
- Access to Microsoft 365 Power Automate
- A SharePoint list containing your contracts
- Columns such as:
- Contract Name
- Contract Owner
- Renewal Date
- Reminder Sent
🧱 Step-by-Step: Create the Automated Contract Renewal Alert Flow
🔹 Step 1: Prepare Your SharePoint List
In SharePoint, create a list called Contracts with the following columns:
| Column Name | Type | Example |
|---|---|---|
| Contract Name | Single line of text | IT Support Agreement |
| Contract Owner | Person or Group | john@company.com |
| Renewal Date | Date | 2025-11-15 |
| Reminder Sent | Yes/No |
Make sure each contract has a renewal date and an assigned owner.
🔹 Step 2: Create a Scheduled Flow
Go to make.powerautomate.com → Create → Scheduled Cloud Flow
- Flow name:
Automated Contract Renewal Alert - Recurrence: Once daily (every morning at 8 AM)
- Click Create
This ensures the flow checks for upcoming renewals automatically.
🔹 Step 3: Get Contracts from SharePoint
Add the action Get items (SharePoint)
- Site Address: Your SharePoint site
- List Name: Contracts
Then add a Filter Query to retrieve only contracts that are due soon:
RenewalDate lt '@{addDays(utcNow(),30)}' and ReminderSent ne 1

This filter captures contracts with renewal dates within the next 30 days.
🔹 Step 4: Select
Add a “Select” action to extract the contract owner’s email address.
We’ll use this email address later to filter contracts by their respective owners.
First, click the small icon next to the Map field to switch it to a single input field.
Then, copy the expressions below into their corresponding fields:
From: @{outputs('Get_items')?['body/value']}
Map: @{item()?['ContractOwner/Email']}

🔹 Step 5: Compose
Add a “Compose” action to remove duplicate email addresses using the union expression.
Copy the expression below into the Inputs field:
Inputs: @{union(body('Select'), body('Select'))}
🔹 Step 6: Initialize Variable
Add an “Initialize variable” action to define a table style for the HTML table that will appear in the email later.
Name: Table Style
Type: String
Value:
<style>
table {
width: 80%;
}
table th {
background-color: skyblue;
}
table td {
background-color: lightskyblue;
text-align: center;
}
</style>
🔹 Step 7: Apply to Each and Filter Array
Add an “Apply to each” action and use the output from the Compose action to loop through each contract owner’s email address.
Select an output from previous steps: @{outputs('Compose')}
Inside the loop, add a “Filter array” action to filter contracts based on the current contract owner’s email address.
We’ll use this filtered output in the next step to create an HTML table.
From: @{outputs('Get_items')?['body/value']}
Filter Query: @{item()?['ContractOwner/Email']} is equal to @{items('Apply_to_each')}

🔹 Step 8: Create HTML table
Add a “Create HTML table” action to generate a table using the output from the Filter array action.
We’ll use this table in the next step to include in the email body.
From: @{body('Filter_array')}
Columns:
Choose Custom and then map the following values:
| Header | Value |
| Contract Name | @{item()?[‘ContractName’]} |
| Renewal Date | @{item()?[‘RenewalDate’]} |

🔹 Step 9: Send Reminder Emails
Add the action Send an email (V2)
- To:
@{items('Apply_to_each')} - Subject:
Contract Renewal Reminder - Body:
@{variables('Table Style')}
Hello,
This is a reminder that the following contract(s) are due for renewal within the next 30 days. Please review them and take the necessary action before the renewal date.
@{body('Create_HTML_table')}
You can also CC finance or legal teams if needed.
🔹 Step 10: Apply to Each and Update item
Add another “Apply to each” action
Select an output from previous steps: @{body('Filter_array')}
And inside it, add an “Update item” action to update the filtered items in SharePoint.
Set the “Reminder Sent” field to true to ensure that when the flow runs again, it won’t send duplicate alerts for the same contracts.
Site Address: SharePoint Site URL
List Name: Contract Renewals
Id: @{items('Apply_to_each_1')?['ID']}
Reminder Sent: Yes

🔹 Step 11: Test and Monitor the Flow
Manually run the flow to test it. Power Automate will scan the SharePoint list, find contracts expiring in the next 30 days, and send email notifications to owners.
Check the Run History to verify each step executed successfully.
📈 Bonus Tips
🔧 Enhance Notifications
- Add a Teams notification using “Post a message in a chat or channel” action.
- Include contract details or a direct link to the SharePoint item.
🏁 Wrapping Up
Your Automated Contract Renewal Alert Flow in Power Automate 2025 is now ready!
It automatically checks for upcoming renewals, notifies the responsible people, and helps you stay compliant without manual tracking.
💡 Bonus Resources