1. Home
  2. Guides
  3. Calendar & Scheduling
  4. How to add Microsoft Forms registrants to an existing Outlook calendar event with Power Automate
Calendar & Scheduling

How to add Microsoft Forms registrants to an existing Outlook calendar event with Power Automate

Build an event registration flow where each Microsoft Forms response adds the person as an attendee to one existing Outlook event, and Outlook sends them the invite. Only the new registrant gets an email.

  • By Nur Islam
  • 13:39 video
  • 11 steps
  • 1.8K views
Jump to a step (11)
Who this is for

When you run a webinar, workshop or training session, you register people through a form and then add each one to the calendar event by hand. Flows that create a new event per response fill your calendar with duplicates, and a careless update can wipe the attendee list or email everyone again.

You start with one master event already in your Outlook calendar. When someone submits the registration form, Power Automate reads the event's current attendees through Microsoft Graph, builds a list of existing attendees plus the new person, and sends that full list back to the same event with a PATCH request. Outlook then sends the invite to the new attendee only.

The Graph calls use the standard Send an HTTP request action in the Office 365 Outlook connector, so you do not need the premium HTTP connector.

What you need

  • Microsoft 365 with Outlook, Microsoft Forms and Power Automate (standard connectors)
  • One existing Outlook calendar event to act as the master event
  • Access to Microsoft Graph Explorer, signed in with the account that owns the event
  • A registration form with Name and Email fields (the demo also has a privacy consent question)

Step by step

0 of 11 done
  1. 01

    Create the master event in Outlook

    Create the event in your Outlook calendar first (the demo is a one-hour session called Power Automate Automating Business Processes). Every registrant will be added to this one event. It can already have attendees. The flow keeps them.

  2. 02

    Get the event ID with Microsoft Graph Explorer

    Open Microsoft Graph Explorer and sign in with the account that owns the event. On the Modify permissions tab, consent to the calendar permissions so it can read your events.

    Run a GET request with this URI:

    https://graph.microsoft.com/v1.0/me/calendar/events?$select=id,subject,start,end

    Find your event in the response, copy its id and paste it into Notepad. You need it twice in the flow.

  3. 03

    Set up the registration form

    Put the event date, time and location in the form description so people know what they are registering for. The form has three questions: Name, Email Address and a privacy consent.

  4. 04

    Create the flow and get the response

    In Power Automate select Create > Automated cloud flow, name it (the demo uses Event Registration to Outlook Calendar) and choose the Microsoft Forms trigger When a new response is submitted. Pick your form.

    Add Get response details, select the same form and set Response Id to the trigger's Response Id. You now have the registrant's name and email.

  5. 05

    Read the event's current attendees

    Add Send an HTTP request from the Office 365 Outlook connector (a standard action) and rename it HTTP Get Event. Use method GET and this URI, with your event ID in place of YOUR_EVENT_ID:

    https://graph.microsoft.com/v1.0/me/events/YOUR_EVENT_ID?$select=attendees

    The $select=attendees part returns only the attendee list. You need it because the update must send back the complete list: existing attendees plus the new person.

  6. 06

    Parse the attendee JSON

    Add Parse JSON. Set Content to the body output of HTTP Get Event. For Schema, select Use sample payload to generate schema, paste a small sample of the attendees response and select Done. Power Automate generates the schema so you can pick attendee fields as dynamic content.

  7. 07

    Create the AllAttendees array

    Add Initialize variable, rename it AllAttendees, set Name to AllAttendees and Type to Array. Leave it empty. It will hold the final attendee list.

  8. 08

    Copy the existing attendees into the array

    Add Apply to each. For the input use an expression that returns only the attendees from Parse JSON, for example body('Parse_JSON')?['attendees'].

    Inside the loop add Append to array variable, rename it Add existing attendee, choose AllAttendees and paste an attendee object as the value, for example:

    {"emailAddress":{"address":"","name":""},"type":"required"}

    Put the cursor between the quotes of address and insert the attendee's emailAddress address from Parse JSON (under See more), then do the same for name.

  9. 09

    Add the new registrant

    Outside the loop, add another Append to array variable, rename it Add new registrant and choose AllAttendees. Paste the same JSON structure, but this time insert the Email Address and Name answers from Get response details.

  10. 10

    Update the event with a PATCH request

    Add another Office 365 Outlook Send an HTTP request and rename it HTTP Update Event. Use this URI with your event ID:

    https://graph.microsoft.com/v1.0/me/events/YOUR_EVENT_ID

    Set Method to PATCH (it updates only part of the event). Under Advanced parameters add Body and send the full array, for example {"attendees": @{variables('AllAttendees')}}. Save the flow.

  11. 11

    Test and check the invite

    Select Test > Manually and submit the form with a test name and email. After the run succeeds, reopen the event in Outlook and select Edit: the new attendee is listed. The registrant's inbox has the invite, and your Sent Items shows only one email, to the new person.

Tips and common problems

  • Never PATCH the event with only the new registrant. That replaces the attendee list. Always read the existing attendees first and send the full list back.
  • Use Send an HTTP request from the Office 365 Outlook connector. It is a standard action, unlike the premium HTTP connector.
  • Sign in to Graph Explorer with the same account that owns the event, and consent to the calendar permissions, or the events list will be empty or fail.
  • In the video, existing attendees did not get repeat update emails, and a person who submits the form again with the same email does not get a second invite.
  • Want each registration reviewed first? Add an approval step before the Graph update.
Still stuck? Ask AI to help you fix itChatGPTClaudeGeminiCopilotPerplexityGrok

Graph requests used in this flow

PurposeMethodURI
List events to find the event ID (Graph Explorer)GEThttps://graph.microsoft.com/v1.0/me/calendar/events?$select=id,subject,start,end
Read the current attendeesGEThttps://graph.microsoft.com/v1.0/me/events/YOUR_EVENT_ID?$select=attendees
Write the final attendee listPATCHhttps://graph.microsoft.com/v1.0/me/events/YOUR_EVENT_ID

Replace YOUR_EVENT_ID with the ID you copied from Graph Explorer. Need a new event for every submission instead? See Create calendar invites from Microsoft Forms.

Questions

How do I add Microsoft Forms respondents to an existing Outlook meeting automatically?

Use Power Automate: get the form response, read the event's attendees with a Graph GET request, add the new person to an array of existing attendees, then PATCH the same event with the full array. Outlook sends the invite to the new attendee.

Does this create a new calendar event for every registration?

No. It updates one existing event. If you want a separate event per submission, that is a different build covered in a separate video.

Do I need a premium Power Automate license to call Microsoft Graph for calendar events?

Not for this flow. The Office 365 Outlook connector's Send an HTTP request action is standard and can call the Graph /me/events endpoints used here.

Will existing attendees get an email every time someone registers?

In the test in the video, only the new registrant received an email. The Sent Items folder showed a single message.

Video chapters
Ask a question in the comments Last checked 26 Sep 2026. Screens change: if a step looks different, tell me in the comments.