# Power Automate Delay until stops after 30 days: how to wait longer

> For the full documentation index, see https://250highstreet.com/llms.txt

> A Power Automate run lasts 30 days at most. To wait 60 days or 6 months, store the date in a SharePoint column and let a daily flow check it.

Short answer: a single flow run cannot wait past 30 days. Microsoft's limits page says: "After 30 days, any pending steps time out." To wait longer, stop making one run wait. Save the target date on the item, then use a flow that runs every day and acts on items whose date has arrived.

## The limit, in Microsoft's words

Microsoft's page "Limits of automated, scheduled, and instant flows" lists these values in its duration table:

- Run duration: 30 days. The page says it "is calculated using a run's start time and includes flows with pending steps like approvals."
- Run retention in storage: 30 days.
- Minimum recurrence interval: 60 seconds.
- Maximum recurrence interval: 500 days.

So a Delay until set 45 days out will not reach its date. The run times out first. The same 30 days applies to an approval that nobody answers. See "[Power Automate approval timeout after 30 days](/guides/power-automate-approval-timeout-30-days/)".

## Why a Do until loop does not fix it

A Do until loop that waits and checks again is still one run. Microsoft's table gives the loop its own limit: "Until iterations" has a default of 60 and a maximum of 5,000. That limit counts loops. The 30 day run duration still applies on top of it. A loop wrapped around a long wait runs into the 30 days, not the iteration count.

## The pattern: one date column and one daily flow

Instead of holding a run open, keep the date in the list and let a short flow look at it every morning. Each run lasts seconds.

Example: a Contracts list where someone needs a reminder 90 days after the start date.

Columns to add to the list (describe them in your own list; there is nothing to download):

1.  Title, for the contract name.
2.  Start date, a Date column.
3.  Remind on, a Date column. Fill it with the start date plus 90 days. Our advice, not a Microsoft rule: set it in the list form or in a short flow with the addDays expression, so it is stored on the row.
4.  Reminder sent, a Yes/No column. Set its default value to No.

Microsoft documents addDays this way: addDays('\<timestamp\>', \<days\>, '\<format\>'?). Its example adds 10 days: addDays('2018-03-15T00:00:00Z', 10) returns "2018-03-25T00:00:00.0000000Z". A negative number subtracts days.

## Build the daily flow

Go to [https://make.powerautomate.com](https://make.powerautomate.com). Exact names may differ on your screen.

1.  Select My flows, then the Cloud flows tab, then Create from blank.
2.  Select the Add a trigger node and search for Recurrence. Select Recurrence.
3.  Set Interval to 1 and Frequency to Day. Microsoft's scheduled flow page gives the same example for a weekly flow: Interval = 1 and Frequency = Week.
4.  Open the advanced options. In the Time zone field, pick your time zone. In Start time, use the format YYYY-MM-DDTHH:MM:SSZ. Microsoft's page gives 2025-03-24T22:00:00Z as 3:00 PM Pacific time, so the trailing Z means UTC.
5.  If you chose Day, set At these hours and At these minutes to the time you want the flow to run.
6.  Add a Get items action for the SharePoint list. In the advanced options, set Filter Query so the flow returns only rows where Remind on is today or earlier and Reminder sent is No. Our advice, not a Microsoft rule: test the filter on two rows first, one due and one not. If the filter returns nothing, see "[Power Automate Get items filter query returns nothing: how to fix it](/guides/power-automate-get-items-filter-query-not-working/)".
7.  In Get items, set Top Count to 5000 and turn Pagination on. Get items returns 100 rows by default. See "[Power Automate Get items only returns 100 rows](/guides/power-automate-get-items-only-returns-100/)".
8.  Add an Apply to each over the Get items result.
9.  Inside it, add the action you want, such as Send an email (V2).
10. Still inside the loop, add Update item and set Reminder sent to Yes.

The Reminder sent column is the guard. Without it, a flow that runs every day would email the same row every day. The flow only acts on rows where the column is No, then sets it to Yes. Update item changes the row, so if you ever move this logic into a flow that triggers on item modified, add a loop guard as well. See "[Power Automate flow triggers itself in a loop](/guides/power-automate-flow-triggers-itself-infinite-loop/)".

## Date format for the filter

Microsoft's date and time page shows how to turn the current UTC time into text: formatDateTime(utcNow(), 'dd-MM-yyyy') returns the date as 15-06-2009 in its example. Another example uses the pattern 'MMMM dd, yyyy, HH:mm'. For the filter, you need a year-month-day text. Our advice, not a Microsoft rule: try formatDateTime(utcNow(), 'yyyy-MM-dd') and check the result in a test run before you rely on it.

The same page says Power Automate uses UTC by default. A flow that runs near midnight can see a different date than your calendar does. See "[Power Automate date shows the wrong day with formatDateTime](/guides/power-automate-formatdatetime-mm-dd-yyyy-time-zone/)".

## When the flow does not run

A daily flow that stays quiet has a schedule or connection problem to find. See "[Power Automate scheduled flow not running](/guides/power-automate-scheduled-flow-not-running/)". To run only on weekdays, see "[Power Automate recurrence on weekdays only](/guides/power-automate-recurrence-weekdays-only/)".

## Longer than the 500 day recurrence maximum

Microsoft lists 500 days as the maximum recurrence interval. If you need a gap longer than that, you do not need a recurrence that long. The daily flow compares dates, so it handles a 2 year wait the same way it handles a 60 day wait.

## When a single wait is fine

If the wait is shorter than 30 days, Delay until inside one run is simpler. Our advice, not a Microsoft rule: choose the date column pattern when the gap is close to 30 days, when people may change the date, or when you want to see all pending reminders in one list view.

## Checks before you turn it on

- The Remind on column holds a Date, not text.
- Reminder sent defaults to No on every new row.
- The flow runs under an account that will stay at the company. See "[Power Automate flow owner left the company](/guides/power-automate-flow-owner-left-company/)".
- Test with a row whose Remind on is today. Run once. Check the email, then check that Reminder sent changed to Yes. Run again and confirm nothing is sent twice.

For a plain "remind me before the due date" flow, see "[Send a reminder before a due date](/guides/send-reminder-before-due-date/)".

## When to get help

You can build all of this yourself in Microsoft 365. If you would rather have it built and tested for your team, I do that. A tracker like this is a fixed price: \$5,000 for one, built in 2 weeks. See "[What a SharePoint tracker costs to build](/guides/what-a-sharepoint-tracker-costs/)". Bring one example of the problem to a free call.

I am Al Davies. I run 250 High Street LLC and build SharePoint trackers and Power Automate flows for operations teams. I work remotely. The first call is free, and I will not try to sell you anything.

See trackers I built: [Tools I built](/portfolio/)

## FAQ

### What is the maximum delay in Power Automate?

A run lasts 30 days at most. Microsoft says: "After 30 days, any pending steps time out."

### Why does Delay until fail for a date 60 days away?

The run times out at 30 days, before the date arrives. Store the date on the item and use a daily flow instead.

### Can a Do until loop wait longer than 30 days?

No. The loop is part of the same run. Microsoft gives Until iterations a default of 60 and a maximum of 5,000, and the 30 day run limit still applies.

### How long can a recurrence flow repeat?

Microsoft lists a maximum recurrence interval of 500 days and a minimum of 60 seconds.

### How do I stop a daily flow from sending the same reminder twice?

Add a Yes/No column with a default of No. The flow acts only on rows where it is No, then sets it to Yes.

## Sources

- [Microsoft Learn, Limits of automated, scheduled, and instant flows - Power Automate](https://learn.microsoft.com/en-us/power-automate/limits-and-config)
- [Microsoft Learn, Run a cloud flow on a schedule in Power Automate](https://learn.microsoft.com/en-us/power-automate/run-scheduled-tasks)
- [Microsoft Learn, Customize or format date and time values in a flow - Power Automate](https://learn.microsoft.com/power-automate/date-time-values)
- [Microsoft Learn, Reference for functions in workflow expressions - Azure Logic Apps](https://learn.microsoft.com/en-us/azure/logic-apps/workflow-definition-language-functions-reference)

## Related guides

- [Power Automate approval fails after 30 days waiting](/guides/power-automate-approval-timeout-30-days/)
- [Power Automate run history only shows 28 days: how to keep a longer record](/guides/power-automate-run-history-28-days/)
- [Remind an approver who has not answered after two days](/guides/power-automate-approval-reminder-after-2-days/)

Source: https://250highstreet.com/guides/power-automate-delay-until-more-than-30-days/
