To automate approvals on a SharePoint list, create an automated cloud flow on the When an item is created trigger, send the request with the Start and wait for an approval action from the standard Approvals connector, check the Outcome in a Condition, and write the decision back with the SharePoint Update item action. For a multi-stage process, chain a second Start and wait for an approval inside the approved branch, for example manager first and finance second for higher amounts. Approvers can answer from Outlook, a Teams adaptive card or the Power Automate approvals center, and every request and response is stored in Dataverse.
Who this is for and what you will have
This guide is for Microsoft 365 administrators and makers who are replacing email-based sign-off, SharePoint 2010 or 2013 workflows, or spreadsheet trackers with a governed approval process. The example is a purchase request list, but the same shape works for leave requests, document sign-off or access requests. At the end you will have:
- A SharePoint list that records the request, its status and the approvers' comments.
- A flow that routes every request to the requester's manager.
- A second finance stage that only runs for requests over a threshold.
- Status and comments written back to the list item, and an email to the requester.
- A plan for Teams, timeouts, long-running approvals and throttling.
How the pieces fit
SharePoint list "Purchase Requests"
| When an item is created
v
Get manager (V2) -- Created By Email
v
Start and wait for an approval (stage 1: manager, First to respond)
v
Condition: Outcome = Approve ?
|-- No -> Update item (Status = Rejected) -> Send an email (V2)
|-- Yes -> Condition: Amount > 5000 ?
|-- No -> Update item (Status = Approved) -> Send an email (V2)
|-- Yes -> Start and wait for an approval (stage 2: finance, Everyone must approve)
-> Condition: Outcome = Approve ? -> Update item -> Send an email (V2)The threshold of 5,000 is only an example; use your own policy value.
Prerequisites
- A Power Automate license that includes standard connectors. The Approvals connector is standard, so Office 365 and Microsoft 365 plans with Power Automate are sufficient.
- A Microsoft Dataverse database in the environment. In the default environment it's created automatically the first time an approval flow runs. In any other environment, the first person to run an approval flow there must hold an administrator role in that environment so the database can be provisioned.
- Office 365 Outlook and Office 365 Users connections for the email and manager lookup.
- Managers populated in Microsoft Entra ID, because Get manager (V2) reads that attribute.
- A SharePoint Online site where you can create a list.
Step 1: Create the SharePoint list
Create a list called Purchase Requests with these columns. Use a generic list; Microsoft documents that flows for lists are supported only on generic lists and document libraries, not on templates such as Tasks or Announcements.
| Column | Type | Purpose |
|---|---|---|
| Title | Single line of text | Short description of the purchase |
| Amount | Currency | Drives the second stage |
| Supplier | Single line of text | Shown to approvers |
| Status | Choice: Submitted, Manager approved, Approved, Rejected | Written by the flow |
| Manager comments | Multiple lines of text | Stage 1 comments |
| Finance comments | Multiple lines of text | Stage 2 comments |
Set the Status default to Submitted. Restrict edit permissions on the Status and comment columns through list permissions or a dedicated form if requesters must not change them; the flow's connection writes the values.
Step 2: Create the flow and trigger
- Sign in to Power Automate and select My flows > New flow > Automated cloud flow.
- Name the flow, choose When an item is created - SharePoint, and select Create.
- In the trigger, select the Site Address and the List Name (Purchase Requests).
Use When an item is created rather than When an item is created or modified. The flow later updates the same item, and a created-or-modified trigger would start a new run for every one of those updates. If you need the modified trigger, for example to resubmit a rejected request, add a trigger condition so the flow only starts when Status is Submitted. Trigger conditions are set on the trigger's Settings tab under Trigger conditions, must start with @, and when they evaluate to false no run is created and no run history is logged. The easiest way to get the expression right is Microsoft's suggested method: build the test in a temporary Filter array action, select Edit in advanced mode, copy the expression into the trigger condition, then delete the Filter array action.
SharePoint triggers poll the list. Microsoft notes that a run usually starts within minutes of a change and that one run may pick up more than one change if the item is edited several times between checks.
Step 3: Look up the manager
- Add the Get manager (V2) action from Office 365 Users.
- In User (UPN), insert the Created By Email dynamic value from the trigger.
If a requester has no manager in Entra ID, there is nobody to assign the first stage to. Catch that case in Step 8 rather than letting the run end without a decision.
Step 4: Stage 1, the manager approval
- Add Start and wait for an approval.
- Set Approval type to Approve/Reject - First to respond.
- Title:
Purchase request:followed by the Title dynamic value. - Assigned to: the Email value from Get manager (V2). The field accepts email addresses, UPNs or Entra user object IDs, separated by semicolons for several people.
- Details: a short summary using Markdown, which the Approvals connector supports in this field, for example the amount, supplier and requester.
- Item link: the link to the list item from the trigger's dynamic content, and Item link description:
Open the request in SharePoint.
The action offers these approval types:
| Approval type | When the flow continues |
|---|---|
| Approve/Reject - Everyone must approve | After every approver responds, or at the first rejection |
| Approve/Reject - First to respond | After any one approver responds |
| Custom Responses - Wait for all responses | After all approvers pick one of your custom options |
| Custom Responses - Wait for one response | After any approver picks one of your custom options |
| Sequential approval | After each approver in the defined order has responded |
Step 5: Branch on the outcome
- Add a Condition.
- Left value: the Outcome dynamic value from Start and wait for an approval.
- Operator: is equal to. Right value:
Approve.
The responses Approve and Reject are case-sensitive, so type them exactly. In the False branch:
- Update item (SharePoint): set Site Address, List Name and Id (from the trigger), plus any column the list marks as required, such as Title (also from the trigger). Set Status to Rejected and Manager comments to the Responses Comments value.
- Send an email (V2) to Created By Email with the outcome and comments.
Because Responses is an array, the designer may wrap actions that use Responses Comments in an Apply to each loop. That's expected; with First to respond there is one response.
Step 6: Stage 2, finance for larger amounts
Inside the True branch of the first condition:
- Add a Condition: Amount (from the trigger) is greater than
5000. - In its False branch, add Update item with Status set to Approved and the manager's comments, then Send an email (V2) to the requester.
- In its True branch, add Update item with Status set to Manager approved, so the list shows where the request is waiting.
- Add a second Start and wait for an approval, type Approve/Reject - Everyone must approve, assigned to the finance approvers separated by semicolons. Include the manager's comments in Details so finance sees them.
- Add a Condition on the new action's Outcome equal to
Approve, with Update item and Send an email (V2) in each branch, writing to Finance comments.
Rename each action as you go (for example Approval - Manager and Approval - Finance). The dynamic content list then shows which Outcome belongs to which stage, which prevents the most common mistake in multi-stage flows: checking the first stage's outcome in the second condition.
If several independent groups must approve at the same time rather than one after another, use Add a parallel branch above the approval action and give each branch its own approval and condition. Steps added after the branches run only when all branches complete.
Step 7: Approvals in Microsoft Teams and Outlook
You don't need a separate Teams flow. When an approval is assigned, approvers can respond from the actionable Outlook email, from a Teams adaptive card, from the Approvals app in Teams, or from Action items > Approvals in Power Automate. A few behaviours to communicate to users:
- Approval emails are always sent from a standard email account, and only those emails are actionable. A custom email with a link to the approval is not actionable.
- The flow creator is always shown in the approval details, to prevent sender spoofing. Build the flow under a service account if that matters.
- If an approver responds by email or in the approvals center, the Teams card doesn't update automatically.
- Actionable Outlook approval emails aren't supported for guest users; guests act on the approval in the Power Automate portal.
- Approval timestamps are shown in UTC.
If your purchase data lives in an ERP, the same Teams users can see the underlying records shared as cards, as described in Business Central and Microsoft 365 integration.
Step 8: Handle failures and timeouts
A cloud flow run can last at most 30 days. That includes time spent waiting on an approval, and after 30 days any pending step times out. Plan for it:
- Wrap the main actions in a Scope named Try, and add a second Scope named Catch after it.
- In the Catch scope's Run after settings, select has failed and has timed out.
- In Catch, update the item's Status (for example to Rejected with a comment that the request expired or failed) and email the requester and the flow owner, including a link to the run.
For processes where a response can legitimately take more than 30 days, Microsoft's recommended pattern is two flows: one sends the request with Create an approval (v2) and ends, and a second flow runs the business logic on the response stored in Dataverse. The first flow can save the approval ID in the list item so the two can be correlated.
The sender of an approval, which for a flow is the flow owner, can cancel a pending request from Approvals > Sent in Power Automate; Microsoft documents cancellation for Create an approval (v2). An approver who isn't the right person can Reassign the request from the approvals center.
Limits worth knowing before go-live
| Limit | Value | Source |
|---|---|---|
| Run duration | 30 days, including pending approvals | Power Automate limits |
| Approval create requests | 50 per flow per 60 seconds | Approvals connector |
| Other approval requests | 500 per flow per 60 seconds | Approvals connector |
| Concurrent runs | Unlimited when Concurrency Control is off; 1 to 100 (default 25) when on | Power Automate limits |
| Apply to each concurrency | Default 1, configurable up to 50 | Power Automate limits |
Bulk imports into the list can create many runs at once; the 50-per-minute create limit applies per flow. Microsoft also notes that turning on Concurrency Control can't be undone without deleting and re-adding the trigger, and that leaving it off ensures every trigger results in a run.
Verify the flow
- Create an item with an amount below the threshold. Confirm the manager receives the approval request, approve it, and check that Status becomes Approved and Manager comments is filled.
- Create an item above the threshold. Approve as manager, confirm Status shows Manager approved, then approve as each finance approver and confirm the final status.
- Reject at each stage and confirm the requester email contains the comments.
- Open Approvals > History in Power Automate to confirm every request and response is recorded.
- Check the flow's run history: one run per created item, with no runs triggered by the flow's own updates.
Troubleshooting
The flow runs repeatedly for the same item. The trigger is When an item is created or modified without a trigger condition, so each Update item starts a new run. Switch to When an item is created or add a trigger condition on Status.
Condition always goes to the False branch. The comparison value isn't exactly Approve, or the condition reads the Outcome of the wrong approval action. Rename actions and recheck the dynamic value.
Get manager (V2) returns nothing or the run fails at that step. Check that the requester has a manager set in Entra ID. Populate the attribute, or route those requests to a fallback approver from the Catch scope.
First approval flow in a new environment fails or takes several minutes. Dataverse is being provisioned for approvals. The first person to run an approval flow in a non-default environment needs an administrator role there.
Approvals app missing in Teams. The Teams administrator has likely disabled the app; it can be enabled in the Teams admin center. Approvals created from the Teams app are always created in the organization's default environment.
Custom response approvals fail with many approvers. Microsoft documents that approvals relying on custom responses can fail when sent to many users with an everyone-must-approve type, because of data size limits on the results field. Reduce the number of assigned approvers.
Closing checklist
- Generic SharePoint list with Status and comment columns the requester can't edit.
- Trigger is When an item is created, or a modified trigger with a trigger condition.
- Each approval action renamed by stage; each Condition checks its own Outcome for
Approve. - Status written back after every decision, including an intermediate Manager approved state.
- Try and Catch scopes with has failed and has timed out handled.
- Two-flow pattern with Create an approval (v2) for anything that can exceed 30 days.
- Users told where to respond and that Teams cards may not refresh after an email response.
References
- Get started with Power Automate approvals
- Create and test an approval workflow with Power Automate
- Manage sequential approvals with Power Automate
- Create parallel approval workflows
- How to: top scenarios with approval flows
- View, approve or reject approval requests
- Known issues with approvals
- Standard approvals connector reference
- Approvals in Microsoft Teams
- Customize your triggers with conditions
- Employ robust error handling
- Limits of automated, scheduled and instant flows
- Microsoft SharePoint connector for Power Automate