Scheduling
The free version of Power Automate Desktop doesn’t have a scheduled run feature. This means you can’t start a flow automatically at a specific date and time.
Instead, you can create a flow that loops indefinitely, gets the current time, and branches only when a specific time is reached.
This article explains how to do that.
Implement by copying and pasting
Section titled “Implement by copying and pasting”As a sample, I created a flow that keeps looping and does something only at 8:00 in the morning.
Copy the following code and paste it into the Power Automate Desktop flow designer to add the actions.
LOOP FROM 0 TO 1 STEP 0 DateTime.GetCurrentDateTime.Local DateTimeFormat: DateTime.DateTimeFormat.DateAndTime CurrentDateTime=> CurrentDateTime Text.ConvertDateTimeToText.FromCustomDateTime DateTime: CurrentDateTime CustomFormat: $'''HH''' Result=> CurrentHour Text.ConvertDateTimeToText.FromCustomDateTime DateTime: CurrentDateTime CustomFormat: $'''mm''' Result=> CurrentMinute IF (CurrentHour = '08' AND CurrentMinute = '00') = True THEN Display.ShowMessageDialog.ShowMessage Title: $'''The specified time has arrived.''' Message: $'''It is 8:00 AM!''' Icon: Display.Icon.Information Buttons: Display.Buttons.OK DefaultButton: Display.DefaultButton.Button1 IsTopMost: False END WAIT 60ENDThe IF statement contains multiple conditions. For details on this technique, see the following page.
Points to watch out for
Section titled “Points to watch out for”Watch out for duplicate runs
Section titled “Watch out for duplicate runs”In this sample, the loop runs every minute and only does something at 8:00.
However, if the condition only checked whether it was in the 8 o’clock hour, the actions inside the IF statement would run about 60 times.
You need to prevent duplicate runs, for example by defining a variable that tracks whether the processing has already run and setting it once the processing runs.
Watch out for missed runs
Section titled “Watch out for missed runs”“WAIT 60” only waits 60 seconds, so each iteration takes slightly longer than 60 seconds by the time the actions in the loop take to run. As a result, on rare occasions, no check happens during the minute of 8:00, and the processing doesn’t run. If you need it to run reliably, shorten the wait time and combine it with the “already run” flag described above.