📅 Powerful Automated Contract Renewal Alert in 11 Steps

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.

Contract Renewal Alert

🚀 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 NameTypeExample
Contract NameSingle line of textIT Support Agreement
Contract OwnerPerson or Groupjohn@company.com
Renewal DateDate2025-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.comCreateScheduled 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
Get items action

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')}

Filter Array action

🔹 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:

HeaderValue
Contract Name@{item()?[‘ContractName’]}
Renewal Date@{item()?[‘RenewalDate’]}
Create HTML table action

🔹 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

Update item action

🔹 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

Leave a Comment