Expense Report Approval Pipeline
Processes expense reports submitted through Forms. Routes to manager for approval based on amount thresholds, logs approved expenses to Excel, and notifies finance for reimbursement processing.
Provided as-is, without warranty of any kind. Review and test each pattern in a non-production environment before deploying it to live automations. See our Terms.
Overview
When an expense report is submitted through Microsoft Forms, this flow automatically routes it for approval based on amount thresholds. Approved expenses are logged to Excel, and the finance team receives notification for reimbursement processing. Rejected reports return to the submitter with reviewer comments.
Use Case
Manual expense report routing creates bottlenecks and inconsistent approval processes. Employees wait for reimbursement while reports sit in email inboxes, and finance lacks visibility into approved vs. pending expenses.
The flow is ideal for teams that:
- Automated routing based on configurable amount thresholds
- Faster approvals reduce employee reimbursement wait time
- Centralized Excel log provides finance team visibility
- Audit trail shows approval chain and reviewer comments
- Rejected reports automatically notify submitter
- Scalable across departments with role-based approvers
Flow Architecture
When a new response is submitted
Microsoft Forms triggerFires when a new expense report is submitted through Microsoft Forms.
Get Response Details
Forms Get Response DetailsRetrieves all form fields including amount, category, date, description, and receipt link.
Condition — Amount Threshold
If conditionRoutes to Director if the submitted amount is greater than the configured threshold (default $500); otherwise routes to the employee's Manager.
- Set approver = Director — Selects the director-level approver email for the upcoming approval step.
Sets approver email to the Manager address.
Start Approval
Start and Wait for ApprovalRoutes to the appropriate approver with title, details including the receipt link, and the form response data.
Process Outcome
If conditionBranches on the approval outcome — approved expenses are logged and finance is notified; rejected expenses notify the submitter and are logged separately.
- Add row to Excel tracker — Appends the approved expense to the approved-expenses Excel workbook for finance visibility.
- Send approval email to submitter — Notifies the employee that their expense report was approved.
Environment Variables
| Schema name | Type | Default | Description |
|---|---|---|---|
| flowlibs_ExpenseFormId | String | <configure> | Microsoft Forms form ID for the expense report submission form. |
| flowlibs_ApprovedExpensesExcelFile | String | <configure> | Path to the Excel workbook (drive + file path) that tracks approved expenses. |
| flowlibs_RejectedExpensesExcelSheet | String | Rejected | Sheet name within the Excel workbook used for rejected expense records. |
| flowlibs_FinanceTeamEmail | String | finance@yourcompany.com | Email address for finance team reimbursement notifications. |
| flowlibs_AmountThreshold | Number | 500 | Amount in dollars above which approvals route to a director instead of a manager. |
Connectors & Connections
| Connector | API name | Actions used |
|---|---|---|
| Microsoft Forms | shared_microsoftforms | OnNewResponse (trigger) GetFormResponseDetails |
| Approvals | shared_approvals | StartAndWaitForAnApproval |
| Excel Online (Business) | shared_excelonlinebusiness | AddRowToTable (approved + rejected logs) |
| Office 365 Outlook | shared_office365 | SendEmailV2 (submitter notifications + finance team alert) |
Note — All connections are referenced as solution connection references; the flow is portable between environments as long as a connection is mapped at import time.
Customization Guide
Almost every realistic variant of this flow can be implemented by changing environment variable values. A few cases require small edits inside the flow definition — those are called out explicitly below.
- Deploying to another environment
- Import the solution, then update flowlibs_ExpenseFormId with the target Forms form ID, flowlibs_ApprovedExpensesExcelFile with the target Excel path, flowlibs_RejectedExpensesExcelSheet with the rejected-sheet name, and flowlibs_FinanceTeamEmail with the finance mailbox. Adjust flowlibs_AmountThreshold if the director-routing cutoff differs, then test with a sample submission and turn the flow on.
- Add receipt image attachment
- Enhance the Forms trigger to support image uploads and include the attachment in the approval details so reviewers can see the receipt inline.
- Create monthly summary reports
- Add a scheduled companion flow that aggregates the approved-expenses Excel into per-department spend reports for finance leadership.
- Add budget checking
- Insert a condition that compares the submitted amount against the department's remaining budget balance (Dataverse/SharePoint lookup) before routing for approval.
- Department-based routing
- Branch on a 'Department' form field so approvals are routed to department-specific managers and directors rather than a single shared pair.
- Receipt validation
- Integrate AI Builder Form Recognizer (or OneDrive scanning) to extract receipt totals and validate them against the submitted amount before approval.
- Track reimbursement processing
- Create a follow-up flow triggered by finance acknowledgement to capture check/ACH processing dates and close the loop with the employee.
Key Expressions
The flow is intentionally light on Power Fx / WDL gymnastics — the heaviest expressions are the branch-name concatenation and the approval outcome check. They are listed below in the order they appear in the flow.
EXPR.01Get form response amount
Reads the amount answer from the Forms response payload. Replace the r-prefixed question ID with your own form's field ID.
EXPR.02Check amount threshold
Used in the amount-threshold If condition to decide between director and manager routing.
EXPR.03Build approval title
Composes the human-readable approval request title shown to approvers.
EXPR.04Get approver email
Inline ternary fallback for selecting the approver email when the threshold env var isn't wired through.
EXPR.05Get approval outcome
Reads 'Approve' or 'Reject' from the completed approval action; used in the Process Outcome condition.
Comments
Sign in to join the conversation.
Sign inNo comments yet. Be the first to share your experience with this flow.