Using low-code to categorize meetings in outlook

Using low-code to categorize meetings in outlook header image

Ever since I started my new adventure around low-code I have been trying to optimize my workflow. One of the things I started doing right away was around implementing the exchange calendar categories again. I didn’t want to spend to much time on them, but love the idea of quickly glancing over my calendar to see if things are either internal or customer facing. So I ended up with a few categories and over the last few months I have been tagging my calendar items. But what if that could be smarter?

A quick overview with Exchange Categories

In general I don’t need to much categories. Currently I am running the following scenarios:

  • 🟩 Focus custom blocked for any task; don’t want to be disturbed
  • 🟦 Travel time either on the bike or in the car
  • 🟪 Internal meetings not related to customer work with internal people
  • 🟧 Customer: working on projects or sales related to customers
  • 🟨 Community community time like joining PnP Calls, MVP calls or working on CLI for Microsoft 365

I choose to tag private meetings with the 🟨 Community category as well, but mainly because I was to lazy to create a new category.

The main advantage being a quick overview of what type of ‘block’ the calendar is. It helps me in identifying things that can be moved or not, and how important the meeting is. Obviously rescheduling a customer meeting is more work then focus time. The only downside is that you will have to block mental energy to tag all those meetings. So what if we could automate this?

Power Automate to categorize

With that in mind I figured we could use Power Automate (or Logic Apps) to categorize my meetings. While the goal was not to categorize everything automatically the more the better. In order to automate anything one needs to consider what ‘rules’ are applied when picking a category manual when creating or accepting a meeting. So thinking about our categories

  • 🟩 Focus meetings created by me with no attendees and no category
  • 🟦 Travel meetings created by me with a subject that contains travel or rt
  • 🟪 Internal meetings created or accepted with only colleagues
  • 🟧 Customer meetings created or accepted with not only colleagues but also external people
  • 🟨 Community meetings accepted a topic related to PnP Calls, or added manually.

Let’s for the sake of a demo say that we start with with tagging: Travel, Internal and Customer using Power Automate. To do so we need a Trigger that triggers when something is happening in our calendar and a action to update.


Luckily there is a trigger that allows us to fire whenever an item is added, updated or deleted from a calendar. The only action required from our part is to figure out how to prevent firing on deleted items. And since we do not want to update items that already have a category specified we can take that into account as wel. Using trigger conditions we can achieve that. We need to check for two conditions, first to check if categories are empty and second if the action type is not deleted. Resulting in the following snippet.

@and(empty(triggerBody()?['categories']), not(equals(triggerBody()?['ActionType'], 'deleted')))

Trigger condition to exclude deleted items and items already with category


With the correct trigger in place the next step is to add conditions and actions. Based on our requirements we could check for travel or focus time and update our calendar item accordingly. For travel time we check for the organizer (only trigger for our account) and a check on the subject of the meeting to contain rt as travel time.

With that check in place we can then use the Send an HTTP request action that is part of the Office 365 Groups. You can read all about that one on With that action we can construct a call to the Microsoft Graph. Using the URL{triggerOutputs()?['body/id']} to make sure we update the calendar item that we got from our trigger. We then can use the Patch method and the following JSON body.

  "subject": "🚗 @{triggerOutputs()?['body/subject']}",
  "categories": ["Travel"]

If you are using other categories you can specify those as well, and if you do not want to update the subject of the meeting with a fancy 🚗 icon that line can be skipped as wel. After sending the HTTP request make sure to terminate the flow with a success message to prevent other categories as well.

Actions to trigger

With those two actions you have a full flow that will tag each meeting with this category. As you might expect you can have multiple checks for multiple categories you might want to add. As you can see my calendar looks quite colorful based on some of those automated triggers. And by making sure you do not process items that already have a category you can always override and pick one you like better in case the system fails

Calendar view

I hope that the little ‘code’ that is required to set a category did not scare you off and you can build a colorful 🎨 calendar as well!

Loading comments…