- Home
- Guides
- Microsoft Forms
- Build a Multi-Level Expense Approval System in Power Automate
Build a Multi-Level Expense Approval System in Power Automate
Build an expense request system with Microsoft Forms, Power Automate and Excel. Requests under $500 go to a manager. Requests of $500 or more also go to finance. The requester gets an email with the final decision.
Jump to a step (12)
This guide is for small-business owners and office staff who still approve purchases by email and lose track of who said yes. Requests get buried, nobody knows the status, and bigger purchases skip finance. This flow sends every request down the right approval path and logs each decision in one Excel file.
I use one form, one Excel tracker and one automated cloud flow. The flow reads the amount on each request. Under $500, only the manager approves. At $500 or more, the manager approves first and then finance approves. Every step updates the same row in Excel, so you always see the current status.
What you need
- A Microsoft 365 business account with Microsoft Forms, Power Automate, Excel and Outlook
- An Excel file stored on OneDrive for Business (this guide does not use SharePoint)
- The email address of the manager who approves requests
- The email address of the finance approver
- No premium licence. Every connector used here (Forms, Excel Online (Business), Approvals, Office 365 Outlook) is standard
Step by step
0 of 12 done-
01
Build the expense request form
Create a form in Microsoft Forms with these eight fields, all set to required:
- Requester Name (text)
- Requester Email (text), used to send the final decision
- Department (drop-down, for example Finance, HR, Research, Marketing, IT)
- Item
- Vendor
- Amount (set as a number)
- Business Justification (long text)
- Needed By Date (date)
-
02
Set up the Excel tracker as a table
Create an Excel file on OneDrive for Business with these columns: Request ID, Submission Timestamp, Requester Name, Requester Email, Department, Item, Vendor, Amount, Business Justification, Needed By Date, Manager Decision, Manager Comment, Manager Timestamp, Finance Decision, Finance Comment, Finance Timestamp, Status. Select the columns, click Format as Table, pick a style, tick My table has headers and click OK.
-
03
Create the flow and get the form response
In Power Automate, click Create, then Automated cloud flow. Choose the trigger When a new response is submitted from Microsoft Forms and select your form. Add the action Get response details, select the same form, and set Response Id to the Response Id from the trigger.
-
04
Generate a unique request ID
Add a Compose action and rename it to Request ID. In Inputs, open the expression editor, type
guid()and click Add. The flow uses this ID later to find and update the right row in Excel. -
05
Add a new row to Excel
Add Add a row into a table from Excel Online (Business). Set Location to OneDrive for Business, Document Library to OneDrive, pick your file and Table1. Under Advanced parameters, map Request ID to the Compose output, Submission Timestamp to Submission time, and each form field to its matching column.
- Type a dollar sign before the Amount value so it shows as dollars.
- Put a dash in the manager and finance columns.
- Set Status to Pending.
-
06
Send the request to the manager
Add Start and wait for an approval and set Approval type to Approve/Reject, First to respond. Build the title from text and dynamic content, for example: Purchase request for [Item], Amount $[Amount]. Enter the manager's email in Assigned to, and put the requester name, department, amount, item, vendor, business justification and needed by date in Details.
-
07
Check the manager's decision and handle a rejection
Add a Condition. Set the left side to Outcome from the approval, choose is equal to and type
Approve. In the False branch, add Update a row with the same file and table. Set Key Column to Request ID and Key Value to the Compose output. Set Manager Decision to Rejected, Manager Comment to Response comments, Manager Timestamp to the completion date and Status to Manager Rejected. Then add Send an email (V2) to the requester email with the item, amount, vendor and manager comment. -
08
Check the amount
In the True branch, add another Condition. For the left side, use an expression with
int()wrapped around the Amount from the form response, because the form sends the amount as text. Choose is greater than or equal to and enter 500. -
09
Close out requests under $500
In the False branch of the amount condition, add Update a row using the same key setup. Set Manager Decision to Approved, Manager Comment to Response comments, Manager Timestamp to the completion date and Status to Approved by Manager. Then add Send an email (V2) telling the requester the item has been approved, with the amount, item, vendor and manager comment.
-
10
Send requests of $500 or more to finance
In the True branch of the amount condition, add a second Start and wait for an approval with type Approve/Reject, First to respond. Add the needed by date to the title so finance can see the deadline. Assign it to the finance email. In Details, include the request fields plus the manager's Response comments from the first approval.
-
11
Record the finance decision and email the requester
Add a Condition that checks whether the Outcome of the second approval (named Start and wait for an approval 1) is equal to
Approve.- True: update the row with manager and finance decisions, comments and timestamps, set Status to Approved by Finance, then email the requester with both comments.
- False: set Finance Decision to Rejected, Status to Rejected by Finance, then email the requester with the finance comment as the reason.
Save the flow.
-
12
Test every path
Click Test, choose Manually, then submit the form three times: once under $500 and approved, once under $500 and rejected, and once at $500 or more. Approve or reject each request from Outlook. After each one, check the Excel row and the requester's inbox.
Tips and common problems
- Type
Approveexactly in the outcome conditions. The approval action returns Approve or Reject, not Approved, so any other spelling sends every request down the False branch. - Always wrap the amount in
int()before comparing it to 500. The form sends the value as text, and a text comparison will not route requests correctly. - When you pick comments or outcomes after the finance step, check which approval action you are using. The first one is the manager, and the second one (Start and wait for an approval 1) is finance.
- The Request ID is what finds the right row to update. If you skip the Compose step or map the wrong key value, the updates can fail or land on the wrong row.
- The manager and finance email addresses are fixed in this flow. If different departments have different managers, you need to add your own logic for that.
- The flow runs every time someone submits the form. To pause it, go to My flows and turn the flow off.
Questions
Do I need a premium Power Automate licence for this?
No. Forms, Excel Online (Business), Approvals and Office 365 Outlook are all standard connectors included with most Microsoft 365 business plans.
Can the manager approve from a phone?
Yes. The approval arrives in Outlook, and the manager can approve or reject it in the Outlook mobile app as well as on desktop.
How do I change the $500 limit?
Open the amount condition and replace 500 with your own threshold. The rest of the flow stays the same.
Do I have to click Test every time?
No. It is an automated cloud flow, so it runs on its own whenever a new form response comes in. I only use Test to watch each step run.
Can I add or remove form fields?
Yes. Add a matching column to the Excel table, then map the new field in the Add a row, approval details and email actions.
