An operations manager I work with needed a monthly report of every meeting her team held: who, when and how long. She’d been copying events out of Outlook into Excel by hand. A flow now does it on the first of each month, and a second flow does the reverse, turning rows in a planning spreadsheet into calendar events.
In this tutorial, I’ll show you three flows: exporting this month’s Outlook events to Excel, creating Outlook events from Excel rows, and creating an event whenever someone adds an item to a SharePoint list. I’ll also cover the time zone settings that trip up almost everyone.
Quick answer: To export events, use Get calendar view of events (V3) with Start Time startOfMonth(utcNow()) and End Time addToTime(startOfMonth(utcNow()), 1, 'Month'), then Add a row into a table for each event. To create events, use Create event (V4) and set its Time zone to match the times you pass in. The calendar view returns up to 256 events, in UTC.
Part 1: Export this month’s Outlook events to Excel
Step 1: Prepare the Excel table
Create a workbook in OneDrive or SharePoint with columns for the details you want, such as Subject, Start Date, End Date and Required Attendees. Select the header row and choose Home > Format as Table. Power Automate can only write to Excel tables, not to plain ranges:

Step 2: Get this month’s events
Create a flow. For a monthly report, use a Recurrence trigger; for testing, Manually trigger a flow is fine. Add Get calendar view of events (V3) from Office 365 Outlook and set:
- Calendar Id: Calendar.
- Start Time:
startOfMonth(utcNow()) - End Time:
addToTime(startOfMonth(utcNow()), 1, 'Month')

On September 27, 2026, that window runs from September 1 to October 1, so it covers the whole month. Some tutorials use addDays(utcNow(), 21) as the end, which gives 21 days from today instead of the end of the month.
Use the calendar view rather than Get events (V4). The calendar view includes each occurrence of a recurring meeting, while Get events returns only the series itself.
Step 3: Add a row for each event
Add Add a row into a table from Excel Online (Business). Choose the Location, Document Library, File and Table. Under Advanced parameters, select Show all, set DateTime Format to ISO 8601, and map the columns to the event’s Subject, Start, End and Required attendees. Power Automate adds a For each loop around the action for you:

Run the flow, and every event this month appears as a row in the table.
Show the times in your time zone
The calendar view returns start and end times in UTC, so a 10:00 AM Eastern meeting shows as 14:00 in Excel. To write local times, use an expression for the Start Date and End Date columns instead of the dynamic content:
convertFromUtc(items('For_each')?['start'], 'Eastern Standard Time', 'MM/dd/yyyy hh:mm tt')
The window itself is also in UTC. For a month that starts at midnight Eastern, use convertToUtc(startOfMonth(convertFromUtc(utcNow(), 'Eastern Standard Time')), 'Eastern Standard Time') as the Start Time, and the same expression with addToTime(..., 1, 'Month') inside it for the End Time.
More than 256 events?
The action returns at most 256 events. For a busy shared calendar, run it in pages with Top Count and Skip Count, for example 250 events at a time in a Do until loop, or shorten the window to a week.
Part 2: Create Outlook events from Excel rows
For the reverse, I use a planning sheet, Create Calendar Events, formatted as a table with Subject, StartDateTime, EndDateTime, Description, EventID and Index columns. The flow creates an Outlook event for each new row and writes the event’s ID back to the sheet, so it doesn’t create the same event twice.
Step 1: Schedule the flow and read the rows
Create a scheduled cloud flow. In the Recurrence trigger, set Interval and Frequency (for example, 1 Day), and set a Start time and Time zone so it runs at a predictable local hour. At these hours lets you choose the hour when the frequency is Day or Week.
Add List rows present in a table and pick the file and table:

It returns 256 rows by default; turn on Pagination in the action’s settings for bigger sheets.
Step 2: Skip rows that already have an event
Add a Condition with this expression on the left, is equal to, and the expression true on the right:
empty(items('For_each')?['EventID'])

The column name in the expression must match the Excel header exactly, including spaces and capitals.
Step 3: Create the event
In the True branch, add Create event (V4). Choose the Calendar id, map the Subject, Start time and End time to the row’s values, and set the Time zone. Under Advanced parameters, add Required attendees as addresses separated by semicolons:

Create event (V4) reads Start time and End time as clock times in the Time zone you choose, so pick the zone the sheet’s times are written in, such as (UTC-05:00) Eastern Time (US & Canada). If the sheet says 2:00 PM and the time zone is Eastern, the meeting is at 2:00 PM Eastern.
Step 4: Save the event ID back to the sheet
Add Update a row. Set Key Column to Index and Key Value to the row’s Index, and put the Id from Create event (V4) in the EventID column:

The key column name is case-sensitive, and if several rows share a key, only the first is updated, so use a unique value such as a number. The next run skips the rows that now have an ID.
Part 3: Create an event when a SharePoint item is added
The third flow creates a meeting whenever someone adds an item to a SharePoint list, Calendar Events Creation List, with a Meeting Subject (Title), Required Attendees (Person), Start Time, End Time and Meeting Message.
Create an automated cloud flow with When an item is created and select the site and list:

Add Create event (V4). SharePoint sends dates to the flow in UTC, so the simplest correct setup is to keep them in UTC: set Time zone to (UTC) Coordinated Universal Time and use these expressions for the start and end:
formatDateTime(triggerBody()?['StartTime'], 'yyyy-MM-ddTHH:mm:ss')
formatDateTime(triggerBody()?['EndTime'], 'yyyy-MM-ddTHH:mm:ss')

Outlook then shows the meeting at the right local time for each attendee. The mistake to avoid is formatting the UTC value this way and choosing Eastern as the time zone: the meeting lands four or five hours late. If you prefer Eastern, convert first with convertFromUtc(triggerBody()?['StartTime'], 'Eastern Standard Time', 'yyyy-MM-ddTHH:mm:ss').
If the Person column allows multiple people
Picking the attendees’ Email from dynamic content puts Create event inside a For each loop, which creates one meeting per person. Instead, add a Select action (From = Required Attendees, Map = item()?['Email']) and put join(body('Select'), ';') in Required attendees. See how to send an email to multiple recipients for the same pattern.
Things to know about Excel
- The file can be up to 25 MB, and the data must be in a table.
- The Excel connector allows 100 calls a minute, so adding hundreds of rows in a loop can be throttled. Add a short delay or add rows in batches.
- Changes can take up to 30 seconds to show, and the connector can keep the file locked for a few minutes, so don’t edit the workbook while the flow is writing to it.
- Without DateTime Format set to ISO 8601, dates can come back as numbers, such as 46292.
These Power Automate tutorials work well with calendar flows:
- Power Automate List Rows Present in a Table Filter Query + 10 Examples
- How to Get Current and Previous Month in Power Automate?
- How to Convert UTC to Local Time Zone in Power Automate? [3 Various Ways]
- How to Send Emails to Multiple Recipients from a SharePoint List Using Power Automate?
- How to Get More Than 100 Items Using The Get Items Action in Power Automate?
- How to Filter Excel Files Based On Date Using Power Automate + Send an Email
Frequently Asked Questions
How do I export Outlook calendar events to Excel with Power Automate?
Use Get calendar view of events (V3) for the date range, then Add a row into a table for each event. Microsoft lists the action’s parameters and limits in the Office 365 Outlook connector reference.
Why are the event times in Excel off by several hours?
The calendar view returns UTC times. Convert them with convertFromUtc and your time zone before writing them to Excel.
How many events can Get calendar view of events return?
Up to 256 per call. Use Top Count and Skip Count to get more in pages.
How do I create an Outlook event from a SharePoint list item?
Use When an item is created and Create event (V4). Keep the SharePoint times in UTC and set the Time zone to UTC, or convert them to your time zone first.
Why does my flow create one event per attendee?
The attendees come from a multi-person column, so Power Automate added a loop. Build one semicolon-separated string with Select and join instead.

I have worked with Microsoft technologies for more than 18 years, including SharePoint, Microsoft 365 and the Power Platform (Power Apps, Power Automate and Power BI), at companies like HP, TCS and KPIT. I started EnjoySharePoint in 2011 to share the solutions I build in real projects with readers in the United States, Canada, the United Kingdom, Australia, New Zealand and beyond. Microsoft has recognized this work with the Microsoft MVP award 13 times since 2014.
What happens when you want to have your excel table updated?
When an event in the calendar is deleted, modified or a new event is created, will the table update?
Hi Hector could you please advise if you get how to update the excel online sheet I’m stuck in this for many days.
Thanks
Hi Bhawana,
thanks for this flow. Is there a way to do it for shared calendars too?
Right now in “Calendar-ID” I see ony my own calendar and my co-worker’s calendar that I have full access to.
Hi Bhawana,
Thank you for this article. It is very helpful.
I would like to trigger the workflow upon arrival of a new calendar event.
Is there a way to achieve this?
Hi, thanks for the instructions on setting this up. It is useful. Just a note that the Excel date mapped to Outlook Start and End Time fields begin at 0:00hr. How can I set the Time Start to have 9:00hr and Time End at 17:00hr for each of the dates?
Thanks
Hi Bhawana,
Thank you for this flow.
How to calculate minuits between two times?
I couldn’t figure out div formula in compose process.
hi ,
Did you get the solution for this by any chance ?
I am getting an error with String was not recognized as a valid datetime
In excel i am using [$-en-US]d/m/jj u:mm am/pm;@ (to get the same layout as in the example) can someone tell me how to set the format of the cells?
It is creating multiple entries of the same event (at least 7 entries) in outlook. How to avoid that?
Same issue here. Wondering how to set this up in a way that it updates the existing events instead of creating duplicates.