Create long-running approval requests in Power Automate (override 28-days timeout)

Sending approval requests is one of the most common use cases for which Power Automate is used for, but the out-of-the-box connector for approvals has a limitation: if the approval request is not approved or rejected within 28 days, the action will time out and this will cause your flow to fail.

In this post, we will show you a workaround to create long-running approval requests so wave good-bye to the 28 days limitation!

Use Case

We have this SharePoint list to record new projects, and each project needs to be approved by management, and since some projects require larger investments they require more than 28 days to be approved or rejected.
If approvers do not take action on the approval request, we will resend it every
15 days.

When projects are sent for approval they have “New” status.

Management Consulting Services and Solutions

Power Automate Workflow

Step 1. Add a column to flag Request status

For our use case, we will have 3 different status: Started (default value), Complete (when approver completes request), Restarted (to indicate the request was resent)

Step 2. Set up your trigger

Since we need to track both new projects and restarted requests, our trigger will be “when an item is created or modified”. Just select the SharePoint site and the list this trigger will be linked to.

We will need this workflow to be triggered when:

– New Projects are added to our list (ie, when item is created, when our projects are created they are created with “New” status)

– Approval request is restarted (it, when item is modified to Request status = “Restarted”, but Status of the project remains as “New“)

Now, let’s add some settings to the trigger to ensure the workflow will only run when any of the above conditions are met. We will use “trigger conditions” for this.

When we write trigger conditions on choice columns, it’s always written like this: triggerOutputs()?[‘body/{column-name}/Value

Go to the ellipsis in the trigger card and hit on “settings”

We need Status = “New”.

				
					@equals(triggerOutputs()?['body/Status/Value'],"New")
				
			

Write this text under “trigger conditions” and hit on “Done”


Note we are applying this condition on the “Status” column – which we use for project status, not the “Request status” column

Step 3. Add Approval Actions

First, let’s add “Create an approval” action, add all the approval details and then add the “Wait for an approval” action. In this second action, just select “approval ID” variable coming from the “create an approval action”.

What this will do is to create an approval request and send it to the approver(s), right after it’s sent, it will wait for approval to happen – and while we wait here is where we have the so called 28 days limit, so this is where the workaround starts.

Long-Running Approval

Step 4. Modify “wait for an approval” time out attribute.

Use the action’s ellipsis and then click on the “Settings action”

Settings Action

We will update the “timeout” field.

Process Automation Services

The value you write here will depend on your process needs, but let’s suppose we want to resend the approval request to our approvers every 15 days. So we will write P15D (just make sure this value is less than 28 days). Then just click on “Done”.

P15D Approval Request

Step 5. Create a branch

Right after the “wait for an approval” action, add two parallel actions, as shown below. In the left side, we will have a condition, and on the right ride we will have “Update item” Sharepoint action


Step 6. Define what your workflow will do if action is approved or rejected

For our use case, we will just update the project status in the SharePoint list, we will also update request status to “complete”. This will be in the left side brach.



Step 8. Define what your workflow will do if action is not taken on the approval request

The “Update item” action should look like below, make sure the column you added at the beginning to flag restarted request is set as “Restarted



On the right side of the branches, use the ellipsis to update the “configure run after” value.

Make sure you update the checkboxes to look as below:

Set Variable to Completed

After you click on Done, this is how branches should look:

What this will do is:

  • If the approval request is completed within 15 days, it will follow the left path (where we set the project as approved). 
  • If the approval request is not completed within 15 days, the “wait for approval” action will time out and go to the right side of the workflow. This will make the request to be restarted and resent to the approver

Step 9. Cancel approval request before the next one is sent.

This step is kind of optional, because a new request will be sent regardless if you cancel the previous ones or not, but leaving open requests can cause issues or confusion for the approver if they find older emails regarding requests which have already timed-out. So, it’s recommended to add this action to cancel any request that is older than 15 days.

All approvals data is stored in Dataverse, so we will need a Dataverse action for this – so note that if you add this step, your Power Automate flow will become premium (hence, a license will be required – you can read our guide on licensing here).

Look for the “Update a row” action and set it up as follows:

  • Select “Approvals” as table name
  • Row ID = Select “approval ID” from the “create an approval” action.
  • Stage = Complete
  • Status Reason = Canceled
  • Status = Inactive.

Dataverse action should look like this:

It should be added right after the “update item” action, on the right branch of our workflow.

Step 10. Test your Workflow and See Magic Happen!

This is how the final flow should look: