Loading tutorials…
Loading tutorials…
Approvals are the #1 use case for Power Automate in most M365 shops. Done right, a 3-day approval becomes a 30-minute click-in-Teams flow. Done wrong, requests sit in limbo for weeks. This walks the right pattern.
Who this is forOperators in Microsoft 365 shops who need to digitize approval processes — expense reports, document sign-off, time off requests, vendor onboarding. If you currently route approvals via email, this replaces it.
What you'll need
Step 1
Write the approval as: "When [event], require approval from [person/role], then [action]." Include timeout + escalation.
Before opening Power Automate, write the approval flow as one sentence.
Bad: "Expense approval flow."
Good: "When an expense > $500 is submitted via SharePoint, require approval from the submitter's manager, with 3-day timeout escalating to the CFO, then add to Finance queue."
Identify: trigger event, approver(s), what data approvers see, timeout duration, escalation path, what happens after approval AND after rejection.
If any of these are unclear, the flow will be unclear. Fix the spec first.
Step 2
Automated cloud flow → trigger (e.g., new SharePoint item) → "Start and wait for an approval" action → configure approval details.
Power Automate → Create → Automated cloud flow.
Pick the trigger: "When an item is created" (SharePoint), "When a new response is submitted" (Forms), etc.
Click "+ New step" → search "Approval" → choose "Start and wait for an approval."
Configure:
- Approval type: Approve/Reject - First to respond (for any-approver) OR Everyone must approve (for unanimous).
- Title: descriptive, e.g., "Expense approval: [item name] $[amount]."
- Assigned to: pick the approver(s). Can be a fixed user, a role, or dynamically computed from the trigger data.
- Details: markdown body with key info the approver needs. Include link back to the source item.
Step 3
After the approval action, check if approval timed out. If yes, escalate to a different approver or auto-approve/reject.
Click the "Start and wait for an approval" action → Settings (3 dots → Settings) → "Timeout."
Set timeout to a reasonable duration (3-7 days typical). Format: ISO 8601 (e.g., PT72H for 72 hours).
Add a Condition after the approval action: check if the response was empty (timeout occurred).
In the "Yes" branch (timed out): start a new approval with the escalation approver (e.g., CFO, department head), OR auto-approve/reject based on policy.
Without timeout, approvals can wait indefinitely while the requester wonders if the system is broken.
Step 4
After the approval action, branch on "Outcome" = "Approve" or "Reject." Each branch has its own downstream actions.
Add a Switch or Condition after the approval action (or after the timeout-escalation logic).
Branch on the "Outcome" field from the approval action.
Approve branch: do the approved action (update SharePoint item status, send confirmation, create downstream record).
Reject branch: send rejection notice with reason (the approver can provide a comment in the approval UI), revert source data if needed.
Always notify the requester of the outcome — email or Teams message. Silent approvals/rejections feel broken.
Step 5
Instead of email-only approval, approvers can approve directly in a Teams message via Actionable Card. Click-in-Teams is dramatically faster.
In the "Start and wait for an approval" action, the approver receives both an email AND a Teams message by default.
The Teams message is an Adaptive Card with Approve/Reject buttons inline. The approver clicks without leaving Teams.
For higher-touch approvals: use "Post an Adaptive Card to a Teams channel and wait for a response" action instead. This is a fully custom card with arbitrary fields.
For mobile: the Power Automate mobile app also surfaces approvals as actionable notifications.
Step 6
Test: approve, reject, timeout, escalation, approver-not-found. Each path should produce a correct outcome.
Trigger a real test approval. Walk through the approve path. Verify downstream actions fire correctly.
Trigger another test. This time, reject. Verify rejection notice + revert.
Trigger another. Do NOT respond. Wait for the timeout (or temporarily shorten timeout to 5 minutes for testing). Verify escalation triggers.
Trigger one with an invalid approver email (deliberately). Verify the flow handles the "approver not found" error gracefully.
Edge case testing reveals 80% of approval flow bugs. Spend the time.
Step 7
Add a logging step that records every approval cycle time. Surface in a Power BI dashboard. Identify bottlenecks.
Add a "Create item" or "Append row" action at the end of the flow that writes: request ID, approver, submitted timestamp, decided timestamp, outcome, escalation count.
Pipe this log to a SharePoint list, Dataverse table, or Excel file.
Connect Power BI to the log. Dashboard: average approval time, % timed out, top bottleneck approvers.
This data tells you which approvers are blocking the business. Without it, you have no visibility into approval flow effectiveness.
Common mistakes
No timeout configured
What goes wrong: Approval waits indefinitely. Approver on vacation, account suspended, or simply ignoring it. Trigger event becomes stale. 50 downstream actions back up. Requester gives up and bypasses the system.
How to avoid: Always configure a timeout (3-7 days typical). Add an escalation path for timeouts.
No escalation when timeout fires
What goes wrong: Approval times out. Flow does nothing. Requester eventually checks status, finds the flow ended with no decision. They re-submit. The new approval also times out. Loop continues.
How to avoid: Add a Condition branch after the approval: if timed out, start a new approval with an escalation approver. Or auto-approve/reject based on policy.
"Everyone must approve" when "first to respond" was meant
What goes wrong: Approval routes to 5 people 'just in case.' All 5 must respond before the flow proceeds. 3 are on vacation. Flow halts forever.
How to avoid: Be deliberate about approval type. Use "First to respond" for any-approver scenarios. Use "Everyone must approve" only when unanimous consent is required.
No notification on rejection
What goes wrong: Approver rejects. Flow ends silently. Requester does not know. They follow up via email or Teams: 'Hey, did my expense get approved?' Embarrassing back-and-forth.
How to avoid: Always notify the requester of approval AND rejection. Include the rejection reason (approver comment) in the notification.
Hardcoding approver email instead of using dynamic routing
What goes wrong: Flow hardcodes 'jane@company.com' as approver. Jane gets promoted. Now Bob should be approving. Flow continues routing to Jane. Bob has no visibility.
How to avoid: Use dynamic approver routing: pull from a SharePoint list of role-to-person mappings, an org chart in Dataverse, or the submitter's manager from Microsoft Graph.
No approval throughput monitoring
What goes wrong: Approval flows are technically working but average time-to-approve is 4 days because one bottleneck approver routes everything through one person. You have no data; the issue persists.
How to avoid: Log every approval cycle. Surface in Power BI. Quarterly review of approval bottlenecks reveals optimization opportunities.
Recap
Done — what's next
How to set up Power Automate cloud flows
Read the next tutorial
Hand it off
Approval flows look simple and degrade in subtle ways at scale. EverestX automation specialists with Power Automate experience design with timeout + escalation + monitoring + dynamic routing by default. Typically $400-1,000/mo at $14-16/hr to manage an approval library across departments.
See specialist rates
Yes. By default, Power Automate sends both an email with inline Approve/Reject and a Teams Actionable Message. Responses from either route to the same flow.
Use the 'Get manager (V2)' action under Microsoft 365 Users connector. It pulls the submitter's manager from Azure AD. Use that output as the approver email in the Start approval action.
Yes. The Power Automate mobile app surfaces approvals as actionable notifications. Plus the Teams mobile app shows Actionable Cards. Both let you approve without leaving the app.
Approve/Reject is the standard binary outcome. Custom responses let you define your own options (e.g., 'Approve / Reject / Request more info'). Use custom responses when binary outcomes are insufficient.
By default, approvals have NO timeout — they wait forever. Always configure timeout explicitly. Most teams use 3-7 days for low-urgency approvals, 24-48 hours for time-sensitive.
Microsoft Power Automate
Power Automate is the right call when your stack lives in Microsoft 365 — but the licensing maze and Premium connector trap catch most newcomers. This walks the right setup path end-to-end, in plain language.
Microsoft Power Automate
Business Process Flows (BPFs) are not the same as cloud flows. BPFs are guided multi-stage processes embedded in Dynamics 365 or Dataverse — think 'wizard for sales pipeline progression.' Different tool, different patterns. This walks the right setup.
Microsoft Power Automate
SharePoint + Teams + Power Automate is the holy trinity of M365 automation. Lists become databases, document libraries become workflows, Teams becomes the notification surface. This walks the right integration patterns.
Microsoft Power Automate
DIY Power Automate is great until you have 15 flows, Premium licensing confusion, and a SharePoint admin asking why their list keeps getting cluttered. This is the honest framework: when the cost of self-managing exceeds the cost of hiring.
Zapier
One trigger, three or four actions. Easy to draw on a whiteboard, easy to break in production. This walks through chaining, naming, and the error scenarios that hit you on day 30, not day 1.