Power Automate Approval Workflows: Purchase Order, Leave, Expense and Invoice Examples
Four worked examples, from the trigger to where the decision is stored, plus the edge cases that break a simple flow: approvers on leave, timeouts, edits after sign-off and the 30-day run limit.
By Shuvam, Founder of KodeBiz · Updated 5 Oct 2026
How a Power Automate approval workflow works
A Power Automate approval workflow is a cloud flow that starts when someone raises a request, such as a new item in a SharePoint list or a submitted Power Apps form, sends it to the right approver through the Approvals connector, waits for a decision, and writes that decision back to the request. Approvers respond from an actionable Outlook email, a Teams card, the Power Automate approvals center or the mobile app.
The usual building block is one action, Start and wait for an approval. Its approval type decides who must respond before the flow moves on:
- Approve/Reject - First to respond: any one assigned approver settles the request.
- Approve/Reject - Everyone must approve: every approver has to approve, and a single rejection ends it.
- Custom Responses: you define the options (say Approve, Reject, Send back) and wait for one response or all.
- Sequential approval: approvers respond one at a time in a fixed order; each must respond before the request moves on.
- Parallel approval is a pattern, not a type: separate approval actions in parallel branches, decided independently; later steps run once all branches finish.
Example 1: purchase order and purchase requisition approval
For manufacturers and distributors, Power Automate purchase order approval is usually the first flow worth building. It starts as a purchase requisition approval workflow: a request for raw material, consumables or spares, raised from the store or shop floor and signed off by value.
- Trigger: When an item is created on a Purchase Requisitions SharePoint list, filled in directly or through a Power Apps form.
- Data captured: item, quantity, estimated value, vendor, cost centre, required-by date, quotation attached.
- Routing: the requester's manager, looked up in Microsoft Entra ID with Get manager (V2) from the Office 365 Users connector; the department head above a first threshold; a director above a second. Keep thresholds in a settings list so finance can change them without editing the flow.
- Approval type: Sequential approval when the levels are fixed. When the number of levels depends on the amount, branch on value with a Condition or Switch and chain one Start and wait for an approval per level.
- On approve: status Approved, PO number issued, buyer notified. On reject: status Rejected, comments sent to the requester.
- Record: decision columns on the requisition, plus a history list.
- What breaks, duplicate approvers: in a small company the manager is often also the department head, and Sequential approval does not allow the same approver at two steps, so remove duplicates first.
- What breaks, edits after sign-off: a flow that triggers only on creation never notices the quantity rising after approval. Store the approved value on the item, and run a second flow on When an item or a file is modified that uses Get changes for an item or a file (properties only) to send the request back when value, vendor or quantity changes. That action needs list versioning, and a trigger condition on the status column stops the flow's own updates from re-triggering it.
Example 2: SharePoint leave request approval workflow
Microsoft's own approval tutorials use a vacation request on a SharePoint list, a sensible pattern for Power Automate leave request approval in a company without an HRMS.
- Trigger: When an item is created on a Leave Requests list.
- Data captured: leave type, dates, number of days, reason and who covers the work.
- Routing: Get manager (V2) on the requester's email. For long leave, call it again on the first manager to reach the next level, or add HR.
- Approval type: Approve/Reject - First to respond for a single manager; Sequential approval when HR confirms after the manager.
- On approve or reject: update the item, email the requester the decision and comments, adjust any leave balance.
- Record: Status, Decided by, Decision date and Manager comments columns on the leave item.
- What breaks, the manager lookup: Get manager (V2) returns "No manager found for the specified user" when no manager is set in Microsoft Entra ID, common for directors and new joiners. Handle that failure with a fallback approver.
- What breaks, the approver who is away: an approver can reassign a request from the approvals center, but the requester can only cancel it. Keep a delegation list (approver, backup, from, to) that the flow checks before assigning, or read the approver's out-of-office message with the Office 365 Outlook action Get mail tips for a mailbox (V2).
Example 3: Power Automate expense approval with receipts
Expense claims matter to manufacturers and distributors with field sales teams: fuel, tolls and customer visits, claimed from photos of paper bills.
- Trigger: a Power Apps form on the phone that saves the claim to a Claims list and calls the flow through the Power Apps trigger.
- Data captured: date, category, amount, customer or route, and a receipt photo.
- Routing: the manager for every claim; finance as a second step above a set amount or for travel.
- Approval type: Custom Responses - Wait for one response, with options such as Approve, Reject and Need a clearer receipt.
- On approve: marked for reimbursement, finance notified. On reject or send-back: returned to the requester with the comment.
- Record: decision, approver and comments on the claim, receipts attached.
- What breaks, trusted inputs: Microsoft advises validating values passed from Power Apps, so re-check amount and category in the flow.
- What breaks, receipt names: approvals cannot carry two attachments with the same name, and phone photos often share one, so rename each receipt first.
- What breaks, silence: a flow run lasts at most 30 days, pending approvals included, and Microsoft's known-issues page says an approval flow fails after waiting 28 days, leaving the request in the approvals center with nothing listening. Set an explicit timeout on the approval action (an ISO 8601 duration such as P3D) and configure the next step to run when it has timed out, so the claim escalates.
Example 4: a four-step invoice approval chain
This one is from a live system: the invoice approval in the ERP we built for King Stubb & Kasiva, a multi-office law firm. The requirement study found invoices took 12 days on average from draft to client send; one had been stuck for 41 days while the lead partner was in trial in another city.
Each step has its own SLA, and because the chain runs on Power Automate, a reminder fires every 24 hours while a step is stuck. Reminders, escalations and the audit trail are flows that change without redeploying the firm's React app, and the managing partner can change who escalates to whom herself. Invoices that took 12 days now go out in 2.
A send-back is where re-submission usually goes wrong. The returned request should reopen the same record and restart from the right step with earlier comments kept, not arrive as a new request with no history. The firm's four steps:
- Drafter: a junior associate pulls the matter's time entries, writes a one-line narrative for each and submits.
- Senior review: the lead lawyer adjusts entries and can send the draft back to the drafter with comments.
- Partner sign-off: the managing partner checks the total against the client's retainer or cap, then approves or rejects.
- Billing: a PDF with GST added and a locked sequential number, emailed from the matter record.
The audit trail: store the decision with the record
An approval given in email is hard to prove later. The thread gets forwarded, a reply says "ok, go ahead" without naming a version, and the person who knew the context leaves. When an auditor asks who approved a purchase order, and at what value, nobody should be searching an old mailbox.
The flow's run history is not an audit trail either, because Power Automate keeps runs for 30 days. The approval's outputs already carry what you need: the outcome and, for each response, the approver's name and email, the comments and the response date.
Write them to the record or a linked history list, append-only: a new row for every event, never an overwrite. A SharePoint list keeps the flow on standard connectors; Dataverse tables suit approvals inside a larger Power Apps system, but the Dataverse connector is premium. At every step, record:
- The decision and the step it belongs to
- The approver's name and email as they were at the time
- Request and response timestamps in UTC (as the Approvals connector reports them), converted only for display
- Comments, and the exact value or version that was approved
- Reassignments, escalations and send-backs as separate entries
How we approach approval workflows at KodeBiz
We start with a requirement study, tracing real requests with the people who raise, approve and audit them. That is where exceptions surface: the urgent PO that skipped a level, the claim approved on WhatsApp, the director with no manager in the directory. Thresholds, stand-ins, SLA windows and send-back rules go into a written scope the client agrees before any flow is built, and the timeline is agreed then too.
Design and build follow that scope: Power Automate when approvers live in Outlook and Teams, custom Node services when routing is too branchy for a flow. Testing runs sample requests through every route, including timeouts, delegation and edits after approval. Then we train requesters and approvers, go live, and stay on for support, adjusting thresholds and routes as policy changes.
A Power Automate approval workflow is easy to start and easy to get wrong. Choose the approval type on purpose, route from Entra ID and a thresholds list, plan for absent approvers, timeouts and edits after sign-off, and write every decision, approver, timestamp and comment onto the record itself.
Frequently asked
How do I build a multi level approval workflow in Power Automate?
Use the Sequential approval type in Start and wait for an approval, with one Assigned To entry per level, or chain several Start and wait actions, each followed by a condition on the response. Get manager (V2) finds each level in Microsoft Entra ID. When levels depend on value, branch on the amount first, and record the decision after every level.
Can a Power Automate approval wait longer than 30 days?
Not inside one flow run. A run is limited to 30 days, pending approvals included, and Microsoft notes an approval flow fails after 28 days of waiting. For longer approvals, use two flows: one creates the request with Create an approval, the other acts on the response, with approvals stored in Dataverse.
What happens to a Power Automate approval when the approver is on leave?
By default it waits. The approver can reassign it from the approvals center, but the requester cannot. Build delegation into the flow instead: check a delegation list or the approver's out-of-office status before assigning, and set a timeout on the approval action so an unanswered request escalates.
Do Power Automate approvals need a premium licence?
Not for the approval itself. The Approvals connector is standard, and so are SharePoint and Office 365 Users, so a flow built from those runs on an Office 365 licence that includes Power Automate. Premium connectors such as Dataverse and HTTP change that.