I worked on a Reimbursement Approval System where approvals must go through multiple levels. For example, an employee’s claim was approved by their manager, then checked by the finance team, and finally approved by the department head for more significant amounts. This made me realize how helpful multilevel approvals are for keeping things organized.
In this article, I’ll show you how to create a simple multilevel approval process in Power Automate. This can make handling reimbursements or similar tasks much easier and faster.
Power Automate Multilevel Approvals
Multilevel approvals in Power Automate involve setting up a sequence of approval steps, where each level of approval is triggered only after the previous one is completed. This type of workflow is ideal for processes that require hierarchical decision-making.
For example, a request might need to be approved by your manager first, then by the finance team, and finally by a director. Each approval step happens one after the other, ensuring that the request is reviewed by the right people at each level before moving forward.
Create Multilevel Approvals in Power Automate
Here’s how the Power Automate flow works:
Employee Submits a Reimbursement Request
The employee submits their reimbursement request on the SharePoint list. Once the request is submitted, Power Automate automatically triggers the flow.
Employee Gets Notified of Manager Approval
The manager receives the approval request, and once the manager approves or rejects it, Power Automate notifies the employee that it was approved or rejected by the manager.
Employee Gets Notified of Finance Team Review
The reimbursement request is sent to the finance team for review if the manager approves. After the finance team approves or rejects it, Power Automate notifies the employee about the status.
Employee Gets Notified of Department Head Approval (if greater than $2,500)
The request is sent to the department head for final approval if needed. The employee is notified once the department head either approves or rejects the request.
Final Notification to Employee
Once all approvals are completed, the employee gets a final notification confirming whether their reimbursement has been fully approved or rejected.
For this example, I created two SharePoint lists, Reimbursement Requests and Reimbursement Approver with the below column:
Reimbursement Requests:
| Columns | Data types |
|---|---|
| Title | Single line of text |
| Employee Name | Person or Group |
| Reimbursement Amount | Currency |
| Reimbursement Reason | Multiple lines of text |
| Manager Approval | Choice (Pending/Approve/Reject) |
| Manager Comments | Multiple lines of text |
| Finance Approval | Choice (Pending/Approve/Reject) |
| Finance Comments | Multiple lines of text |
| Department Head Approval | Choice (Pending/Approve/Reject) |
| Department Head Comments | Multiple lines of text |
| Final Status | Choice (Manager Pending/Manager Approve/Manager Reject/Finance Pending/Finance Approve/Finance Reject/Department Head Pending/Department Head Approve/Department Head Reject) |
| Submission Date | Date and Time |

In the above SharePoint list, the default value of the Final Status column is Manager Pending, and the default value of Manager Approval is Pending.
Reimbursement Approve:

Follow the below steps to create flow:
Create an automated cloud flow. Give the flow name and select the trigger When an item is created or modified. Also, provide the Site Address and List Name.

To avoid the flow from triggering multiple times (which could lead to infinite loops), you can set a trigger condition based on a field in the SharePoint list, such as the “Final Status” column. This ensures that the flow only triggers when the relevant conditions are met and not when the item is updated or modified during the approval process.
@not(equals(triggerOutputs()?['body/FinalStatus/Value'], 'Manager Approve'))
@not(equals(triggerOutputs()?['body/FinalStatus/Value'], 'Manager Reject'))
@not(equals(triggerOutputs()?['body/FinalStatus/Value'], 'Finance Approve'))
@not(equals(triggerOutputs()?['body/FinalStatus/Value'], 'Finance Reject'))
@not(equals(triggerOutputs()?['body/FinalStatus/Value'], 'Department Head Approve'))
@not(equals(triggerOutputs()?['body/FinalStatus/Value'], 'Department Head Reject'))
Now, I need to create a variable that stores the approver’s email address, so add the Initialize variable action, provide the name, type it as a string, and leave the value blank.

Add a Switch control flow action. Provide the below parameter:
- On: Take the Final Status Value from the dynamic content.
By default, it displays with the Add Case icon and Default section.

Add First level Approval in Power Automate Switch Control
For the first case, check if the Final Status Value equals Manager Pending, then send an approval request to the manager.
Click + Add case to add the first switch case. Manually enter the value Manager Pending inside the parameter.

Now, I need to add get items action to get the manager’s email address from the Reimbursement Approve SharePoint list. So add Get items and provide the Site Address and List Name. Then add Filter Query below expression:
Which only gives the Manager info.
ApproverTitle eq 'Manager'
Then, add a set variable action to the store manager’s email address.

It will automatically add a For each loop.
Add the “Start and wait for an approval” action and provide the below parameters:
- Approval type: Select an approval type as “Approve/Reject – First to respond” from the drop-down.
- Title: Enter the title field value from the Dynamic content.
- Assigned to: Add varApproverEmailAddress variable from the Dynamic content.
- Details: Enter the details about your request from the Dynamic content.

Now, we will add the Condition action to check whether the request is approved or Rejected.
In this Condition action, select the Outcome (from Start and wait for an approval action) value equal to Approve.

Next, add the update item action under the True condition and provide the below parameters:
- Site Address: Select a specific SharePoint site from drop-down.
- List Name: Choose a particular list.
- Id: Select Id from dynamic content when an item is created or modified.
Then, click Show all to display the advanced parameters.
- Manager Status Value: Select an Approve from the drop-down.
- Manager Comments: Select Responses comments from dynamic content under Start and wait for approval.
- Final Stage Value: Select Finance Pending from the drop-down.
It will automatically add a for each loop.

Then, add a ‘Send an email‘ action to notify the requester that the manager has approved their request. After that, I will move on to the next approver.

Then add the update item action under the false condition and provide the below parameters:
- Site Address: Select a specific SharePoint site from drop-down.
- List Name: Choose a particular list.
- Id: Select Id from dynamic content when an item is created or modified.
Then, click Show all to display the advanced parameters.
- Manager Status Value: Select Reject from the drop-down.
- Manager Comments: Select Responses comments from dynamic content under Start and wait for approval.
- Final Stage Value: Select Finance Reject from the drop-down.
It will automatically add a for each loop.

Then, add a ‘Send an email‘ action to notify the requester that the manager has rejected their request.

First stage approval completed, and here I rename all the Action names for better understanding:

Add Second-level Approval in Power Automate Switch Control
For the second case, check if the Final Status Value equals Finance Pending, then send an approval request to the Finance team.
Click + Add case to add the first switch case. Manually enter the value Finance Pending inside the parameter.

Add Get items and provide the Site Address and List Name. Then add Filter Query below expression:
Which only gives the Finance team info.
ApproverTitle eq 'Finance'
Then, add a set variable action to the store finance team email address.

Add the ‘Start and wait for an approval’ action and set the following parameters:
- Approval type: Select ‘Approve/Reject – First to respond’ from the drop-down.
- Title: Enter the title field value from Dynamic content.
- Assigned to: Add the varApproverEmailAddress variable from Dynamic content.
- Details: Enter the details of your request from Dynamic Content.

We will add the Condition action to check whether the request is approved or rejected.
In this Condition action, select the Outcome (from the ‘Start and wait for an approval’ action) and set it to ‘Approve.’

Then, inside the true section, add again a Condition action that checks whether the Reimbursement Amount is greater than $2,500.
In this Condition action, select the Reimbursement Amount (from the ‘when an item is created or modified’ action) and set it to ‘2,500.’

Next, add the update item action under the True condition and provide the below parameters:
- Site Address: Select a specific SharePoint site from drop-down.
- List Name: Choose a particular list.
- Id: Select Id from dynamic content when an item is created or modified.
Then, click Show all to display the advanced parameters.
- Finance Status Value: Select an Approve from the drop-down.
- Finance Comments: Select Responses comments from dynamic content under Start and wait for approval.
- Final Stage Value: Select Department Head Pending from the drop-down.

Then, add a ‘Send an email’ action to notify the requester that the finance team has approved their request. After that, I will move on to the next approver.

Then add the update item action under the false condition and provide the below parameters:
- Site Address: Select a specific SharePoint site from drop-down.
- List Name: Choose a particular list.
- Id: Select Id from dynamic content when an item is created or modified.
Then, click Show all to display the advanced parameters.
- Finance Status Value: Select Apprve from the drop-down.
- Finance Comments: Select Responses comments from dynamic content under Start and wait for approval.
- Final Stage Value: Select Finance Approve from the drop-down.

Then, add a ‘Send an email’ action to notify the requester that all approvals are Approved, the Reimbursement Request.

Then add the update item action under the false condition and provide the below parameters:
- Site Address: Select a specific SharePoint site from drop-down.
- List Name: Choose a particular list.
- Id: Select Id from dynamic content when an item is created or modified.
Then, click Show all to display the advanced parameters.
- Finance Status Value: Select Reject from the drop-down.
- Finance Comments: Select Responses comments from dynamic content under Start and wait for approval.
- Final Stage Value: Select Finance Reject from the drop-down.

Then, add a ‘Send an email‘ action to notify the requester that the Finance team has rejected their request.

Add Third level Approval in Power Automate Switch Control
For the third case, check if the Final Status Value equals Department Head Pending, then send an approval request to the Finance team.
Click + Add case to add the first switch case. Manually enter the value Department Head Pending inside the parameter.

I need to add the ‘Get items’ action to retrieve the Department Head’s email address from the ‘Reimbursement Approve’ SharePoint list. Add the ‘Get items’ action and provide the Site Address and List Name. Then, use the following expression in the Filter Query field:
ApproverTitle eq 'Department Head'
Then, add a set variable action to the store department head’s email address.

Add the ‘Start and wait for an approval’ action and configure the following parameters:
- Approval type: Select ‘Approve/Reject – First to respond’ from the drop-down.
- Title: Use the title field value from Dynamic content.
- Assigned to: Add the varApproverEmailAddress variable from Dynamic content.
- Details: Provide the request details from Dynamic content.

We will add the Condition action to check whether the request is approved or rejected.
In this Condition action, select the Outcome (from the ‘Start and wait for an approval’ action) and set it to ‘Approve.’

Next, add the ‘Update item’ action under the True condition and set the following parameters:
- Site Address: Select the specific SharePoint site from the drop-down.
- List Name: Choose the appropriate list.
- Id: Select Id from Dynamic content (from ‘When an item is created or modified’).
Then, click Show all to display the advanced parameters and configure the following:
- Department Head Status Value: Select ‘Approve’ from the drop-down.
- Department Head Comments: Select ‘Responses comments’ from Dynamic content (under ‘Start and wait for an approval’).
- Final Stage Value: Select ‘Department Head Approve’ from the drop-down.

Then, add a ‘Send an email’ action to notify the requester that all approvals are Approved, the Reimbursement Request.

Then add the update item action under the false condition and provide the below parameters:
- Site Address: Select a specific SharePoint site from drop-down.
- List Name: Choose a particular list.
- Id: Select Id from dynamic content when an item is created or modified.
Then, click Show all to display the advanced parameters.
- Department Head Value: Select Reject from the drop-down.
- Department Head Comments: Select Responses comments from dynamic content under Start and wait for approval.
- Final Stage Value: Select Department Head Reject from the drop-down.

Then, add a ‘Send an email‘ action to notify the requester that the department head has rejected their request.

Now, our multilevel approval flow is ready. We can save and test it. Click on Test -> Select Manually. Add an item to the SharePoint list: Reimbursement Requests.

Then, the Manager receives an approval email about Reimbursement Requests.

Once the manager approves the request, the requester gets an email about the manager’s approval.

After the manager approves the request, the finance team will receive the request.

When the Finance team approves, the flow checks the reimbursement currency. If it is greater than 2500, the Department Head needs to approve.

In the meantime, the department head will receive a request to approve the reimbursement.

When the Department Head approves the request, the requester will receive an email stating that all approvers have approved their reimbursement.

The requester will receive an email notification if the Department Head rejects the request.

Conclusion
In this tutorial, we created a multilevel approval system in Power Automate, using a reimbursement process as an example. We set up a flow that handles approvals in three stages: manager, finance team, and department head (for larger amounts). Along the way, we covered vital steps such as triggering the flow when a SharePoint item is created or updated, using conditions to check approval outcomes, and notifying the requester at each stage.
- Reassign An Approval Using Power Automate
- Create a Site Column in SharePoint Online Using Power Automate
- Remove Duplicate Items From SharePoint List Using Power Automate
- Get Approval Comments Using Power Automate
- Send Approval to a Microsoft 365 Group in Power Automate
- Send Approval Requests to Multiple Approvers Using Power Automate
- Send an Approval Request With an Attachment Using Power Automate

After working for more than 18 years in Microsoft technologies like SharePoint, Microsoft 365, and Power Platform (Power Apps, Power Automate, and Power BI), I thought will share my SharePoint expertise knowledge with the world. Our audiences are from the United States, Canada, the United Kingdom, Australia, New Zealand, etc. For my expertise knowledge and SharePoint tutorials, Microsoft has been awarded a Microsoft SharePoint MVP (12 times). I have also worked in companies like HP, TCS, KPIT, etc.