“I really don’t enjoy scheduling meetings, can I delegate this work to Power Automate – to find free time for everyone and schedule a Teams meeting?”
One of the benefits of Power Automate is to get rid of the boring work. A work that everyone could do, that doesn’t need your skills yet it consumes your valuable time. And one of such tasks is scheduling meetings. It’s not exactly rocket science to find a free time slot for all attendees and send an invitation… Why not let the flow to do the work? To find the first available time slot and send the invite?
Building the flow
Such flow will need 4 pieces of information: attendees, title, description, and duration.
Start from the manually triggered flow (which can be started even on mobile phones) and define the inputs. Alternatively you could start the flow also from Teams, but that’s another topic.
The next step is to find the meeting time. Power Automate has a dedicated action called ‘Find meeting times’ that’ll do what you might expect – it’ll find the time slots where all attendees are free.
Use the entered Attendees as Required attendees, Duration as the Meeting duration, and expressions as range for the Start time and End time. In this example it’ll look for the first available time slot, earliest on tomorrow, latest in 30 days. Since it’s looking only for 1 candidate, the end time doesn’t really matter, it should be just far enough in the future to find at least 1 potential date.
Start time: startOfDay(addDays(utcNow(),1)) End time: addDays(utcNow(),30)
Now, when you have the available time slot, you can schedule the meeting with the ‘Create a Teams meeting’ action. Use the Title as the meeting Subject, the Description as the meeting Message, and the Attendees as Required attendees.
The tricky part comes with the Start and End time. As Outlook keeps all the dates and times in UTC time zone, you can’t use the proposed times directly. You must convert them to your local time zone first.
In the example below I used also the first(…) expression to get rid of an ‘Apply to each’.
ConvertTimeZone(first(outputs('Find_meeting_times_(V2)')?['body/meetingTimeSuggestions'])?['meetingTimeSlot/start/dateTime'], 'UTC', 'Central European Standard Time')
ConvertTimeZone(first(outputs('Find_meeting_times_(V2)')?['body/meetingTimeSuggestions'])?['meetingTimeSlot/end/dateTime'], 'UTC', 'Central European Standard Time')
The last step should be to send yourself a notification about the meeting date. Since you’re the organiser you won’t receive any invitation – it will appear in your calendar, but if you want the information also in another form you must send it in the flow.
As you can see, you can automate even small tasks in Power Automate, e.g. to schedule a Teams meeting. Not only will it save a few clicks, but it’ll save also the decisions related to meeting planning. It’ll take the first available time slot and send the meeting, not considering other time slots to be “better”.
But with that comes also a downside – it’ll pick any free time slot within the user’s working hours. If it’s not in the calendar, it doesn’t exist and the user is available, even during lunch time.
The solution can also be used only in your organisation as you can’t search in calendars of external users.
2 thoughts on “How to schedule Teams meeting with Power Automate flow”
Hello there! Great work! Can you please show how to maybe set the earliest time that it searches for openings beginning at like 9 or 10am, instead of 8am/start of day? I believe StartofHour.
it depends on the Outlook calendar settings, in Settings -> Calendar -> View you can define your Meeting hours.