- Home
- Guides
- Calendar & Scheduling
- How to send bulk Outlook calendar invites without showing everyone's email address
How to send bulk Outlook calendar invites without showing everyone's email address
Use Power Automate to add a list of people from Excel to one existing Outlook calendar event, one person at a time, with the attendee list hidden. Everyone gets their own invite and nobody sees who else was invited.
Jump to a step (13)
When you invite a large group to one Outlook event, every attendee can see the full attendee list and everyone's email address. For client webinars, trainings or community events that is a privacy problem, and creating a separate event for each person makes a mess of your calendar.
This flow works like a mail merge for calendar invites. It reads your Excel attendee list, then for each row it reads who is already on the event, adds the one new person, and updates the same event with the attendee list hidden. Outlook sends the invite only to the person just added.
The flow uses the Send an HTTP request action from the Office 365 Outlook connector to talk to Microsoft Graph, so you do not need SharePoint or a premium connector. You only need the event's ID, which you get once from Microsoft Graph Explorer.
What you need
- Microsoft 365 Business Basic or Standard with Power Automate and Outlook
- An existing Outlook calendar event that you own
- An Excel table in OneDrive with
NameandEmailcolumns - Access to Microsoft Graph Explorer, signed in with the account that owns the event
Step by step
0 of 13 done-
01
Prepare the Excel attendee list
Create an Excel file in OneDrive (the video uses
attendees.xlsx) with two columns:NameandEmail. Name is optional, so you can leave it blank for some people.Select the columns, click Format as Table and pick a style. Note the table name (here
Table1). -
02
Open the existing calendar event
Create or open the Outlook event you want people added to. In the video it already has one participant. The flow will add everyone from Excel to this same event rather than creating new ones.
-
03
Get the event ID with Graph Explorer
Open Microsoft Graph Explorer and sign in with the same Microsoft 365 account that owns the event. On the Modify permissions tab, consent to the calendar permission so it can read your events.
Set the method to
GET, paste this URL and click Run query:https://graph.microsoft.com/v1.0/me/calendar/events?$select=id,subject,start,endThe response lists your recent events with their subject, start and end. Find your event by its subject and copy its
id. Keep it somewhere handy for the next steps. -
04
Create an instant cloud flow
In Power Automate, click Create > Instant cloud flow. Name it
Add Excel list to Outlook event, choose Manually trigger a flow and click Create. You run it on demand whenever you have a list to add. -
05
Read the attendees from Excel
Add the Excel Online (Business) action List rows present in a table. Set Location to
OneDrive for Business, Document Library toOneDrive, chooseattendees.xlsxand selectTable1. This returns every person on your list. -
06
Initialize the AllAttendees array
Add Initialize variable, rename the action and the variable to
AllAttendees, and set Type toArray. For each Excel row, this array is rebuilt to hold the event's existing attendees plus the current person. -
07
Loop through each Excel attendee and reset the array
Add Apply to each and set its input to
valuefrom List rows present in a table. With five people in Excel, the loop runs five times. Everything below goes inside this loop.Inside the loop, add Set variable, choose
AllAttendeesand set the value to[]. This empties the array at the start of each person. Without it, attendees from earlier rows pile up and repeat. -
08
Read the existing attendees from the event
Add the Office 365 Outlook action Send an HTTP request and rename it
Get event attendees. Set the method toGETand the URI to:https://graph.microsoft.com/v1.0/me/events/YOUR_EVENT_ID?$select=attendeesReplace
YOUR_EVENT_IDwith the ID you copied.$select=attendeestells Graph to return only the attendee list, which you need before adding anyone.Add Parse JSON. Set Content to the body of Get event attendees. Click Use sample payload to generate schema, paste a small sample of the GET response and click Done so Power Automate builds the schema.
-
09
Append the existing attendees
Add a second Apply to each and set its input to the
attendeesarray from Parse JSON. Inside it, add Append to array variable, rename itAppend existing attendees, chooseAllAttendeesand paste this value:{"emailAddress": {"address": "", "name": ""}}Place the cursor between the address quotes and insert
addressfrom Parse JSON, then between the name quotes and insertname(both under See more). This puts everyone already on the event back into the array. -
10
Append the current Excel attendee
Outside the inner loop but still inside the outer loop, add another Append to array variable and rename it
Append new attendee. Use the sameAllAttendeesarray and the same JSON structure. This time insertEmailandNamefrom List rows present in a table.The array now holds the existing attendees plus exactly one new person.
-
11
Update the event with a PATCH request
After Append new attendee, add another Send an HTTP request and rename it
Add attendees. Set the method toPATCHand the URI to:https://graph.microsoft.com/v1.0/me/events/YOUR_EVENT_IDReplace the placeholder with your event ID. Open Advanced parameters, add Body, and send the attendee array with the attendee list hidden, for example
{"attendees": @{variables('AllAttendees')}, "hideAttendees": true}.Because the list you send matches the event plus one new person, Outlook only emails that one person. People already on the event are not emailed again. Save the flow.
-
12
Test the full flow
Click Test, choose Manually, then Test and Continue. Watch the run: the outer loop processes each Excel row, clearing the array, reading the event, adding existing attendees and adding the new one.
When it finishes, close and reopen the event in Outlook. Everyone from the Excel file is now on the attendee list.
-
13
Confirm each invite is private
Check Sent Items. You should see one invite per person (five in the video) rather than one bulk message. Open the invite in one attendee's inbox: it shows only that person, and no other email addresses are visible.
Tips and common problems
- Sign in to Graph Explorer with the same account that owns the Outlook event, or the event will not appear in the list.
- Reset the AllAttendees array to [] at the start of each Excel row. If you skip it, earlier attendees are appended again and repeat.
- Put Append new attendee outside the existing-attendees loop. Inside it, the new person would be added once for every existing attendee.
- The PATCH request replaces the event's attendee list with what you send, which is why the flow always reads and re-adds the existing attendees first.
- The flow is manual. If people register through Microsoft Forms and you want them added as they sign up, see the related video in the section below.
Microsoft Graph requests used in this flow
| Purpose | Method | URI |
|---|---|---|
| List recent events and find the event ID (Graph Explorer) | GET | https://graph.microsoft.com/v1.0/me/calendar/events?$select=id,subject,start,end |
| Read the event's current attendees | GET | https://graph.microsoft.com/v1.0/me/events/YOUR_EVENT_ID?$select=attendees |
| Update the same event | PATCH | https://graph.microsoft.com/v1.0/me/events/YOUR_EVENT_ID |
Replace YOUR_EVENT_ID with the ID you copied from Graph Explorer.
Related videos
Questions
How do I send an Outlook meeting invite without showing other attendees?
Add attendees one at a time to the same event and set the event's hideAttendees property to true. This flow does both with Power Automate and Microsoft Graph, so each person receives their own invite and sees only themselves.
Will existing attendees get another email every time someone is added?
No. The flow sends back the existing attendee list plus one new person, so Outlook only sends an invite to the person who was just added.
Do I need a premium Power Automate licence for this?
No. Send an HTTP request is part of the standard Office 365 Outlook connector, and the flow also uses Excel Online (Business) and built-in variable actions. No SharePoint is needed.
Why not just put everyone in BCC?
A calendar event does not have a BCC field for attendees. Adding people individually with the attendee list hidden gives each person a normal invite that they can accept, while keeping the list private.
