1. Home
  2. Guides
  3. Power Automate
  4. How to build a leave request and approval system with Forms, Excel and Power Automate
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.

  • By Nur Islam
  • 19:45 video
  • 12 steps
  • 5.7K views
Jump to a step (12)
Who this is for

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
  1. 01

    Create the leave request form

    Go to forms.office.com, select New Form and name it PTO/Leave Request Form. Add these questions:

    • Full Name: Text, required
    • Email Address: Text, required. Under Restrictions, choose Email so only email addresses are accepted.
    • Leave Type: Choice with Vacation, Sick Leave, Personal Day and Other, required
    • Start Date: Date, required
    • End Date: Date, required
    • Reason for Leave: Text with Long answer turned on

    Use Preview to check the form. You can add more fields if your business needs them.

  2. 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.

  3. 03

    Create the Excel tracker

    In OneDrive online, create a new Excel workbook named PTO Tracker. In row 1, add the headers Request ID, Full Name, Email Address, Manager Email, Leave Type, Start Date, End Date, Reason, Status and Approver Comments.

    Request ID identifies each request, Status tracks Pending, Approved or Rejected, and Approver Comments stores 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.

  4. 04

    Create the flow and publish the form

    In Power Automate, select Create > Automated cloud flow, name it PTO Leave Request and 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.

  5. 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 Id from the trigger (dynamic content).

  6. 06

    Generate a unique Request ID

    Add Initialize variable. Rename the action and the variable to RequestID, set Type to String, 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.

  7. 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 Comments for now, the manager fills that later) and also show DateTime Format. Set DateTime Format to ISO 8601 so the form dates land in Excel in the right format.

    Map Request ID to the RequestID variable and map each other column to the matching answer from Get response details. If an answer is missing from the list, select See more. Type Pending in Status. It stays Pending until the manager decides.

  8. 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 from followed by Full Name from Get response details
    • Assigned to: Manager Email Address from 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.

  9. 09

    Check whether the request was approved

    Add a Condition. On the left, select Outcome from the approval action. Keep is equal to and type Approve on the right.

    Type Approve, not Approved. 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. 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 RequestID variable
    • Under Advanced parameters, show Status and Approver Comments
    • Status: Approved
    • Approver Comments: Responses Comments from 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 Address from the form, the subject to Your PTO request has been approved, and put the employee's name, leave type, start date and end date in the body.

  11. 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 the RequestID variable, Status Rejected, and Approver Comments set to Responses Comments.

    Send an email (V2): To the employee's Email Address, subject Update on your PTO request, and a body with their name, leave type, start date, end date and the manager's Responses Comments so they know why. You can add the manager's comment to the approved email too if you like.

  12. 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 Pending and no approver comment.

    Approve it with a comment. The employee gets the approval email and the row changes to Approved with the comment. Submit a second request and reject it to check the rejection email and the Rejected status.

Tips and common problems

  • The approval outcome is Approve or Reject. Checking for Approved sends every request down the rejected branch.
  • Set DateTime Format to ISO 8601 in 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.
Still stuck? Ask AI to help you fix itChatGPTClaudeGeminiCopilotPerplexityGrok

Expressions and values used in this flow

WhereValueWhy
Initialize variable (RequestID)guid()Unique ID for each request
Add a row into a table, StatusPendingStarting status before the manager decides
ConditionOutcome is equal to ApproveExact value returned by the approval
Update a row, Key ColumnRequest IDFinds 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.

Video chapters
Ask a question in the comments Last checked 26 Sep 2026. Screens change: if a step looks different, tell me in the comments.