Delegate When an Approver is Out of Office in Power Automate

Have you ever kicked off an approval process, only to have it sit there waiting because the approver is on vacation? 😩 I have! In this blog and video, I show how to build a flow that automatically checks whether your approver has an out-of-office reply turned on. If they do, it routes the approval to someone else instead.

No form-filling, no manual intervention. It all happens automatically in the flow.

🎥 Watch the full Power Hour replay on YouTube and check out my Power Automate Advanced course at IW Mentor to dive even deeper into building smart approval processes.

🧩 How This Solution Works

Before we get into the steps, here’s the big picture. When a new item is created in SharePoint, the flow:

  • Identifies who the approver should be (in our example, the submitter’s manager)
  • Uses the action Get Mail Tips for a Mailbox action to check that person’s out-of-office status
  • Sets a boolean variable — true if they’re out, false if they’re in
  • If they’re out, looks up their delegate and routes the approval there instead
  • Sends the approval using the Create an Approval Request for an Item or File SharePoint action

Let’s build it!

📋 What You’ll Need

  • A SharePoint list to trigger approvals from (we used an Employee Onboarding list)
  • A second SharePoint list to store approver-to-delegate mappings (two Person columns: Approver and Delegate)
  • Power Automate (no premium connectors required)
  • Approvals enabled on your SharePoint list. (Here’s my post that details this concept: SharePoint Approval Requests in Power Automate)

🔧 Step 1: Set Up Your SharePoint Trigger

  1. Create a new flow in Power Automate
  2. Choose the trigger SharePoint – When an item is created
  3. Select your site and list

This trigger will fire every time someone submits a new item — that’s what starts the approval process. You don’t have to use this trigger, yours could trigger on change or manually. It’s up to you per business requirements.

🗂️ Step 2: Initialize Your Variables

Before you can store the results, you need to set up three variables. Add Initialize Variable actions for each:

Variable NameTypeDefault Value
varOriginalApproverString(leave blank)
varBooleanOOOBooleanfalse
varMessageString(leave blank)
varFinalApproverString(leave blank)

The reason we initialize them up top is so they’re available throughout the entire flow.

👤 Step 3: Get the Approver’s Manager

In this example, the approver is whoever created the item’s manager. To get that dynamically:

  1. Add Office 365 Users – Get Manager (V2)
  2. For the User field, use the dynamic content Created By Email from your SharePoint trigger

This gives you the manager’s profile, including their email address, which you’ll use in the next step.

A sequential workflow starting with 'When an item is created', followed by 'Initialize variable boolean', 'Initialize variable message text', 'Initialize variable orig approver', 'Initialize variable final', and ending with 'Get manager (V2)'.

📬 Step 4: Get Mail Tips for the Approver’s Mailbox

This is the magic step. Power Automate has a built-in action that queries Outlook to see if someone has their automatic replies turned on.

  1. Add the action Office 365 Outlook – Get Mail Tips for a Mailbox
  2. For now, type in the approver’s email address directly (so that you can test it, and we’ll make this dynamic later)
  3. Rename this action to something short like Tips — you’ll reference it in expressions

When the flow runs, this action returns raw JSON data. If the person is out of office, the response includes an automaticReplies object with their message. If they’re not out of office, automaticReplies is just empty curly brackets {}. That difference is exactly what we’ll use to build our boolean.

📝 Step 5: Set the Original Approver Variable

  1. Add a Set Variable action
  2. Choose varOriginalApprover
  3. For the value, use the dynamic content Mail from the Get Manager action (that’s their email address). This is just one idea, of using the manager as the delegate. Approval processes and the people involved can vary greatly. So, whomever that approver is, that’s where you input their email address, statically or dynamically.

Now update your Get Mail Tips action to use varOriginalApprover. That way the whole flow is driven by whoever the approver happens to be.


✅ Step 6: Set the Boolean Variable

  1. Add another Set Variable action for varBooleanOOO
  2. In the Expression tab, enter:
not(empty(body('Tips')?['value'][0]?['automaticReplies']?['message']))

This returns true if a message exists (they’re out of office) and false if it doesn’t. Simple!

🔍 Step 7: Set the OOO Message Variable

Now use an expression to pull the out-of-office message out of the raw JSON:

  1. Add a Set Variable action for varMessage
  2. Click into the value field, switch to the Expression tab, and enter:
body('Mail_Tips')?['value'][0]?['automaticReplies']?['message']

A workflow diagram showing sequential steps: Set variable original approver, Scope, Tips, Set variable message, and Set variable are they out.

🔀 Step 8: Add a Condition — Are They Out of Office?

  1. Add a Condition
  2. Set it to check: varBooleanOOO is equal to true
  • Yes (true) branch → They’re out of office, so look up the delegate
  • No (false) branch → Set varFinalApprover equal to varOriginalApprover and proceed normally

🧹 Step 9: Clean Up the OOO Message

The message comes back as HTML, so you’ll want to convert it to readable plain text. Here’s how to do it cleanly:

  1. Add HTML to Text action and pass it varMessage
  2. Add another Set Variable action for varMessage to overwrite it with the cleaned version
  3. In the Expression tab, use:
replace(body('Html_to_text'), decodeUriComponent('%0A'), '')

Why this expression? The HTML to Text action strips the tags, but leaves behind \n newline characters — especially at the end of the message. The trick is that these aren’t true newlines, they’re escaped newlines, so a plain replace with \n won’t catch them. Using decodeUriComponent('%0A') targets the actual newline character, and trim cleans up anything left on the edges.

Logic condition configuration for varBooleanOOO equals true, alongside a visual automation flow diagram.

📂 Step 10: Look Up the Delegate from Your SharePoint List

One way of building an approval process would be to just make it manager-based, so that if any person is out, their manager gets approvals delegated to them. Another way would be to just have the delegate be the same person every time. Yet another way would be to set up a separate list, where approvers and their delegates are all defined. Here’s how to set up a list, and this is also demonstrated in the video below.

List:

Approver Delegation interface. Toolbar buttons: Add new item, Edit in grid view, Undo, Share. Table headers: Approver, Delegate, Add column. Rows: Laura Rogers - Brenda Cox, Billy Bob - Laura Rogers, Chris Rogers - Laura Rogers, Joelle Jobson - Brenda Cox, Garth Fort - Laura Rogers.

Inside the Yes branch:

  1. Add SharePoint – Get Items
  2. Point it to your Approver Delegation list
  3. Notice that I named my column Approver. In Filter Query, enter this:
Get items configuration pane. Parameters: Site Address: Mark8 Project Team URL; List Name: Approver Delegation; Filter Query: Approver/EMail eq 'varOriginalApprover'; Top Count: 1.

⚠️ Case matters here! The column name (Approver) must match exactly how it appears in SharePoint, and EMail has a capital E and capital M. Be sure to add single quotes around the purple variable. This is how you query a Person column by email.

  1. Add a Set Variable action inside the loop that Power Automate automatically creates, and set varFinalApprover to Delegate Email from the Get Items results

📨 Step 11: Send the Approval

After the condition (in the main flow, not inside either branch), add your approval action. With this, there are several ways that approvals can be kicked off, but this is my favorite:

  1. Action: SharePoint – Create an Approval Request for an Item or File
  2. Set your site, list, and the ID from the trigger
  3. For Assigned To, use varFinalApprover

This action is great because it ties directly to the built-in Approvals setting that you enabled in SharePoint and sends a Teams notification to the approver — without leaving the flow running and waiting.

🔁 Bonus: Loop Through Multiple Approvers

In the below video, I added this at the end, as another option. What if you have a multi-person column and want to check each approver’s OOO status individually? Create a loop that goes through each approver and appends each one to a string variable.

This gives you a semicolon-separated string of email addresses. All of them are either the original approver or their delegate. Then, you can drop this straight into the approval action’s Assigned To field.

💡 Tips & Variations

Different ways to determine who the delegate is:

  • 🏢 Hard-code a single backup — simplest option, one person gets all delegated approvals
  • 👆 Use the manager’s manager — automatically escalates up the chain
  • 📋 SharePoint delegation list — most flexible, maps each approver to their specific delegate

Things to keep in mind:

  • This solution is based on Outlook’s built-in automatic replies. It only works if your approvers actually use their out-of-office settings!
  • If you want to get the OOO message into your approval notification, you already have it in varMessage — just drop it into the approval details field
  • The approval action I used doesn’t pause the flow waiting for a response, which keeps your run history clean

🎯 Wrap Up

Out-of-office approval delegation is one of those things that sounds complicated. It becomes really manageable once you understand the building blocks. The key pieces are:

  • Get Mail Tips for a Mailbox to check OOO status
  • A boolean variable to branch your logic
  • A SharePoint delegation list to look up the right backup approver

Once you have those in place, you can plug this pattern into virtually any approval process you’re building.

Here is the important part of the flow. I put it in a scope so that I can easily copy the whole scope to another flow and reuse. Watch the video to see the details of how every action is set up.

Power Automate flow diagram for managing approver variables, conditional delegation logic, and approval requests.

Want to learn more about building advanced approval flows in Power Automate? Check out my Power Automate Advanced course at iwmentor.com! And join us live every Wednesday at 11 AM Central for Power Hour at iwmentor.com/schedule. 🎉

You voted for this topic — keep voting for upcoming Power Hours by subscribing to the Power Hour newsletter!

Leave a Reply