Three-Stage Document Approval Process in SharePoint with Flows
Welcome to the grand finale of this three-part saga on building a three-stage document approval process in SharePoint with Power Automate. In Part 1 SharePoint One Click Start Approval, you learned the power of a one-click “Start Approval” button with some slick JSON. In Part 2 Trigger Conditions: For Optimizing Flow Execution, you learned how to create trigger conditions to keep them firing only when we want. Now, it’s time to bring it all together—handling approvals, adding dynamic routing, and making sure this process runs smoothly.
Approvals: Notifications and Decisions
Here’s an overview of this document approval process: Once that “Start Approval” button gets clicked and “Approval Status” flips to “Approval 1,” Power Automate kicks off the first flow. Each stage gets its own flow, and here’s how:
- Start and Wait for an Approval: Drop this action into each flow and pick “First to Respond.” It’s quick, straightforward, and keeps things moving. Assign it to the right approver by pulling their email from the matching column—like “Approver 1” for stage 1.
- Email + Teams Combo: When the approval kicks off, the approver gets an email and a Teams popup. No need to panic about double approvals— and they can click “Approve” in either spot.
- Outcome Time: After they have approved or rejected, add a condition to check the “Outcome.” If it contains “Approve,” update the SharePoint file’s “Approval Status” column to the next stage—like “Approval 2.” If it’s “Reject,” set it to “Rejected” and decide what’s next.
Dynamic Routing: Document Approval Process Flexibility
Here’s where this method is unique: You can route documents back and forth. Sometimes “Reject” is too final—maybe Approver 2 just needs Approver 1 to make one more edit to the file. Let’s add some dynamic routing to make that happen.
- Custom Responses: Skip the boring “Approve/Reject” buttons and use custom responses in the approval action. Think “Approve – Go to Laura” or “Go Back to John.” Pull names from your “Approver” columns to make it crystal clear who’s up next or getting a redo. Just ensure “Approve” is in the text if your condition checks for it.
- Clever Conditions: After the approval, add a condition to parse the response. If it’s “Approve – Go to [Next Approver],” update “Approval Status” to the next stage (e.g., “Approval 2”). If it’s “Go Back to [Previous Approver],” drop it back (e.g., “Approval 1”). That status update triggers the right flow.
- Keep It Simple: You could go wild with options like “Go Back to Approver 1,” “Skip to Approver 3,” or “Send to Narnia,” but more choices may mean more confusion to end users.
Approver 2 sees “Approve – Go to Approver 3” or “Go Back to Approver 1.” They send it back, the status flips to “Approval 1,” and the first flow picks it up again. This is a perfectly flexible revision loop.
Here are important parts of the approval flows, highlighting the differences between the 3 stages. Also, in the below video, watch me build all of the flows from scratch.
Flow #1 – Approver 1
1. Here is the trigger. The verbiage in the trigger condition is highlighted, and I covered it in the last post.

2. The next action is to get the changes, in order to check which column or columns were just modified in this item or file. Here’s another post that I wrote about this action, Get changes for an item or a file.

3. Check to see if the status is the column that changed, when this file / properties were just modified.

4. Start an approval, and the approver is the person in the “Approver 1” column in the library. I discuss this concept in the video.

5. Most likely, you’ll want something different to happen in the flow, depending on if it was approved or not? Add a condition:

6. Update the properties of the file that is being approved. Notice that now, if it’s approved, change the approval status to your next stage, such as “Approval 2”.

7. Over in the other branch of the condition, do the exact same thing, except change the Approval status to “Rejected”. Here is the high level overview of the first document approval process (flow).

Concatenating Comments: A Feedback Goldmine
Want to see approver comments along with the file? Let’s stack them up in SharePoint. Instead of overwriting, we’ll append new comments to the existing ones. Here’s the trick:
- You saw in the screenshot above for #6, see that I’ve created an approver comments column in SharePoint, and I’m inserting the dynamic content of the approver’s display name and their comments.
- By stage 3, you’ve got a full comment history, here’s how to concatenate the comments to add to the the column each time an approval or rejection happens. Notice (and you’ll see this in the video) that I have inserted the content of what’s already in the approver comments column, and I’ve added the approver: their comments.

Duplicate the flow, for each stage of the document approval process
Once you have built the first flow, your stage 1 flow is ready to copy it twice for stages 2 and 3. Again, here are the parts to change in each flow:
- Trigger Condition: Stage 2 fires on “Approval 2” (@equals(triggerBody()?[‘ApprovalStatus’], ‘Approval 2’)), stage 3 on “Approval 3.”
- Approver Email: Point it to “Approver 2” or “Approver 3” from your columns.
- Status Update: On approval, stage 2 sets “Approval 3,” stage 3 sets “Approved.” On rejection, all flows can set “Rejected”—or route back if you’re feeling spicy.
- Comments: Keep appending with that concatenation magic.
This multi-flow approach is my obsession for a reason. If you create one giant flow with all three stages, it’s a troubleshooting and debugging nightmare. Three tidy flows? Fix one without unraveling the universe.
Pro Tips to Polish it up
- Solutions for the Win: Bundle your flows in a Power Automate Solution. If someone leaves the team, reassign ownership. Future-proofing at its finest.
- Auto-Assign Approvers: Want approvers set on upload? Add a “When a File is Created” flow to populate those “Approver” columns. Hardcode emails for simplicity, or get fancy with a lookup list (shoutout to my Advanced Power Automate course for that trick).
- Teams Bonus: The Teams request title shows the stage (e.g., “Approval Stage 2”). Instant clarity, zero effort.
- Content Approval Tie-In: Using SharePoint’s built-in content approval? Set it to “Approved” after stage 3. Two systems, one victorious finish.
Why This Setup Is Perfect for Back and Forth Processes
Breaking this into three flows isn’t overkill. You get:
- Total Clarity: See who’s slacking (I’m talking to you, Approver 2).
- Routing Power: Send docs back for tweaks without a full reset.
- Troubleshooting Ease: One flow flops? Fix it fast without a 50-step mess.
Upload a file, set the approvers, and hit “Start Approval,” and watch it glide through the stages. By the time “Approved” hits, you’ve got a transparent, tracked process with comments galore. It’s a workflow symphony, and you’re the maestro. In the associated video below, I discuss several different ways that you can obtain who the approvers are, and manual versus automatic methods.
So, what do you think? Ready to build this beauty and conquer your approvals? Drop a comment with your thoughts, questions, or any killer hacks. Until next time, keep automating!
Here’s my video that walks through the process in the two blog posts I mentioned at the beginning, plus this one.
References
Part 1 SharePoint One Click Start Approval
Part 2 Trigger Conditions: For Optimizing Flow Execution
Related post about Get changes for an item or a file
Related post: Action Button in a list set column value
Would you like to learn Power Automate? Check out my very own online 10 hour comprehensive course!