- Home
- Guides
- Power Automate
- How to build a leave request and approval system with Forms, Excel and Power Automate
How to build a leave request and approval system with Forms, Excel and Power Automate
Build a leave request system where employees submit a Microsoft Forms request, the manager approves or rejects it from Outlook or the Approvals app, Excel logs every decision, and the employee gets an email with the result.
Jump to a step (12)
Small businesses without SharePoint often handle time off through scattered emails and a spreadsheet someone updates by hand. Requests get lost, managers forget to reply, and there is no clear record of who approved what and why.
An employee fills in a Microsoft Forms leave request. Power Automate gives the request a unique ID, logs it in an Excel tracker on OneDrive with a Pending status, and sends an approval request to the manager chosen in the form.
The manager approves or rejects from Outlook or the Power Automate Approvals app and can leave a comment. The flow then updates the same Excel row with Approved or Rejected plus the comment, and emails the employee. It uses Microsoft Forms, Excel Online (Business), Approvals and Office 365 Outlook, with no SharePoint and no premium connectors.
What you need
- Microsoft 365 Business Basic or Standard
- Microsoft Forms and Power Automate
- An Excel workbook in OneDrive for Business with a table for the tracker
- Table columns: Request ID, Full Name, Email Address, Manager Email, Leave Type, Start Date, End Date, Reason, Status, Approver Comments
- The manager's email address (or several, if you have more than one manager)
Step by step
0 of 12 done-
01
Create the leave request form
Go to
forms.office.com, select New Form and name itPTO/Leave Request Form. Add these questions:Full Name: Text, requiredEmail Address: Text, required. Under Restrictions, chooseEmailso only email addresses are accepted.Leave Type: Choice withVacation,Sick Leave,Personal DayandOther, requiredStart Date: Date, requiredEnd Date: Date, requiredReason for Leave: Text with Long answer turned on
Use Preview to check the form. You can add more fields if your business needs them.
-
02
Add the manager email drop-down
Add a Choice question called
Manager Email Address. This is who will receive the approval request. Type each manager's email address as a separate option, then switch the question to Drop-down.If you only have one manager, add a single option with their email. With several managers, the employee picks their own manager when submitting the form, and the approval goes to that person.
-
03
Create the Excel tracker
In OneDrive online, create a new Excel workbook named
PTO Tracker. In row 1, add the headersRequest ID,Full Name,Email Address,Manager Email,Leave Type,Start Date,End Date,Reason,StatusandApprover Comments.Request IDidentifies each request,Statustracks Pending, Approved or Rejected, andApprover Commentsstores the manager's feedback.Select the headers, go to Home > Format as Table, pick a style, tick My table has headers and select OK. Power Automate only works with Excel tables, not plain ranges of cells.
-
04
Create the flow and publish the form
In Power Automate, select Create > Automated cloud flow, name it
PTO Leave Requestand choose the Microsoft Forms trigger When a new response is submitted.If your form does not appear in the Form Id list, it is not published yet. In Forms, select Collect responses and choose who can respond (the video uses Anyone can respond, but Only people in my organization also works). Go back to the trigger and select the form.
-
05
Get the response details
The trigger only tells you a response was submitted. It does not include the answers. Add the Microsoft Forms action Get response details, select the same form, and set Response Id to the
Response Idfrom the trigger (dynamic content). -
06
Generate a unique Request ID
Add Initialize variable. Rename the action and the variable to
RequestID, set Type toString, and for Value open the expression editor and enter:guid()This creates a unique ID every time the flow runs. Later, the flow uses it to find and update the correct row in Excel.
-
07
Add the request to Excel as Pending
Add the Excel Online (Business) action Add a row into a table.
- Location:
OneDrive for Business - Document Library:
OneDrive - File:
PTO Tracker - Table:
Table1
Under Advanced parameters, show the table columns (skip
Approver Commentsfor now, the manager fills that later) and also show DateTime Format. Set DateTime Format toISO 8601so the form dates land in Excel in the right format.Map
Request IDto theRequestIDvariable and map each other column to the matching answer from Get response details. If an answer is missing from the list, select See more. TypePendinginStatus. It stays Pending until the manager decides. - Location:
-
08
Send the approval request to the manager
Add Start and wait for an approval.
- Approval type:
Approve/Reject - First to respond - Title:
Leave Request fromfollowed byFull Namefrom Get response details - Assigned to:
Manager Email Addressfrom the form (dynamic content) - Details: employee name, leave type, start date, end date and reason from the form
The manager sees the title in Outlook and all the details in the request, and can approve, reject and add a comment. The flow pauses here until they respond, whether that takes minutes or days.
- Approval type:
-
09
Check whether the request was approved
Add a Condition. On the left, select
Outcomefrom the approval action. Keep is equal to and typeApproveon the right.Type
Approve, notApproved. That is the exact value Power Automate returns. If you add a d at the end, the condition never matches and every request goes to the False branch. -
10
Update Excel and email the employee when approved
In the True branch, add Excel Online (Business) Update a row with the same location, file and table.
- Key Column:
Request ID - Key Value: the
RequestIDvariable - Under Advanced parameters, show
StatusandApprover Comments - Status:
Approved - Approver Comments:
Responses Commentsfrom the approval action (under See more)
Power Automate may wrap the action in an Apply to each loop when you pick
Responses Comments. That is fine. With First to respond there is only one response, so the loop runs once.Then add Send an email (V2). Set To to the employee's
Email Addressfrom the form, the subject toYour PTO request has been approved, and put the employee's name, leave type, start date and end date in the body. - Key Column:
-
11
Update Excel and email the employee when rejected
In the False branch, add the same two actions with different values.
Update a row: same file and table, Key Column
Request ID, Key Value theRequestIDvariable, StatusRejected, and Approver Comments set toResponses Comments.Send an email (V2): To the employee's
Email Address, subjectUpdate on your PTO request, and a body with their name, leave type, start date, end date and the manager'sResponses Commentsso they know why. You can add the manager's comment to the approved email too if you like. -
12
Test the complete flow
Save the flow, select Test > Manually > Test, then open the form link and submit a request. The flow run shows it waiting for the approval.
The manager's approval request appears in Outlook and in the Approvals section of Power Automate. The Excel tracker already shows a new row with
Pendingand no approver comment.Approve it with a comment. The employee gets the approval email and the row changes to
Approvedwith the comment. Submit a second request and reject it to check the rejection email and theRejectedstatus.
Tips and common problems
- The approval outcome is
ApproveorReject. Checking forApprovedsends every request down the rejected branch. - Set DateTime Format to
ISO 8601in Add a row into a table, otherwise the start and end dates may not show up correctly in Excel. - If your form does not show up in the trigger, publish it first with Collect responses.
- The Excel data must be formatted as a table. Power Automate does not see plain ranges.
- An Apply to each loop appears around the update when you use
Responses Comments. It runs once with First to respond, so leave it.
Expressions and values used in this flow
| Where | Value | Why |
|---|---|---|
| Initialize variable (RequestID) | guid() | Unique ID for each request |
| Add a row into a table, Status | Pending | Starting status before the manager decides |
| Condition | Outcome is equal to Approve | Exact value returned by the approval |
| Update a row, Key Column | Request ID | Finds the row created for this request |
Next step: check the PTO balance
Part 2 adds a PTO balance table and checks available hours before the manager ever sees the request: Check PTO Balance Before Approval.
Questions
Can I build a leave approval workflow in Microsoft 365 without SharePoint?
Yes. This build uses Microsoft Forms for the request, an Excel table in OneDrive for Business as the tracker, the Approvals action in Power Automate and Office 365 Outlook for emails. No SharePoint list and no premium connectors are needed.
Where does the manager approve the leave request?
The approval arrives in the manager's Outlook inbox as an actionable message, and it also appears in the Approvals section of Power Automate. They can approve or reject from either place and add a comment.
How does the flow update the right row in Excel?
The flow creates a unique ID with the guid() expression, saves it in the Request ID column, and later uses Update a row with Request ID as the key column to find that exact row.
Can employees choose between different managers?
Yes. Add each manager's email as an option in the Manager Email Address drop-down. The approval is assigned to whichever email the employee selects.
