- Home
- Guides
- Power Automate
- How to get reminded about unread Outlook emails with Power Automate
How to get reminded about unread Outlook emails with Power Automate
Build a Power Automate flow that watches for important emails from chosen senders and marks them with Outlook categories (Overdue 1 Hour, 1 Day, 3+ Days) while they stay unread, then removes the category once you read them.
Jump to a step (13)
Invoices, approvals and client emails get buried under everything else, and a day later you realize an urgent message was never opened. Outlook rules can sort mail when it arrives, but they cannot tell you how long an important email has been sitting unread.
When a new email arrives from a sender you care about and the subject contains a word like urgent, invoice, approval, payment or contract, the flow waits an hour and checks the same email again. If it is still unread, it gets the Overdue 1 Hour category. After a day it moves to Overdue 1 Day, and after three days to Overdue 3+ Days.
If the email is read at any checkpoint, the flow removes the overdue category and stops. The build uses the Office 365 Outlook connector only, including its Send an HTTP request action to call Microsoft Graph, so no premium connector is needed.
What you need
- Microsoft 365 Business Basic or Standard with an Exchange Online mailbox
- Power Automate
- Three Outlook categories: OVERDUE - 1 HOUR, OVERDUE - 1 DAY and OVERDUE - 3+ DAYS
- A list of important sender addresses and subject keywords
Step by step
0 of 13 done-
01
Create the overdue categories in Outlook
In Outlook on the web, select the gear icon, then Accounts > Categories. Select Create new and add three categories, each with its own color:
OVERDUE - 1 HOUROVERDUE - 1 DAYOVERDUE - 3+ DAYS(the video uses red)
Power Automate can create categories on its own, but they all come out grey. Creating them first gives you colors you can spot at a glance.
-
02
Create the flow with the new email trigger
In Power Automate, select Create > Automated cloud flow, name it
Outlook Email Reminder System, and choose When a new email arrives (V3) from Office 365 Outlook. -
03
Filter by sender
Open the trigger, select Advanced parameters and show From. Enter the addresses of people whose emails you do not want to leave unanswered. They can be inside or outside your organization.
-
04
Add a trigger condition for subject keywords
Go to the trigger's Settings tab. Under Trigger conditions, select Add and paste a condition that checks the subject line. The flow only starts when the subject contains one of your words, so it does not run for every email from those senders. A condition that does this looks like:
@or(contains(toLower(triggerOutputs()?['body/subject']),'urgent'),contains(toLower(triggerOutputs()?['body/subject']),'invoice'),contains(toLower(triggerOutputs()?['body/subject']),'approval'),contains(toLower(triggerOutputs()?['body/subject']),'payment'),contains(toLower(triggerOutputs()?['body/subject']),'contract'))To add more words, add another
contains(...)line inside theor. -
05
Wait one hour
Add a Delay action and rename it
1 Hour. Set Count to1and Unit toHour.While testing, set the unit to
Minuteso you can watch the flow work in close to real time. -
06
Get the same email again
Add Get email (V2). For Message Id, select
Message Idfrom When a new email arrives (V3) (under See more). This fetches the current state of the exact email that started the flow. -
07
Check if the email is still unread
Add a Condition. On the left, select
Is Readfrom Get email (V2). Keep is equal to and typefalseon the right.True means the email is still unread after an hour.
-
08
Assign the Overdue 1 Hour category
In the True branch, add Assign an Outlook category. Set Message Id to the trigger's
Message Idand Category toOVERDUE - 1 HOUR.The category name must match the one you created in Outlook exactly. Otherwise Power Automate creates a new grey category.
In the False branch the email was read, so nothing else needs to happen. The video adds an optional Terminate action with Status
Succeededso the branch is not empty. -
09
Wait until the one-day checkpoint and check again
Inside the True branch, add another Delay, rename it
1 Day, and set it to23hours. Together with the first delay that makes 24 hours. (For testing, use 1 minute.)Add another Get email (V2) with the trigger's
Message Id, then a Condition withIs Readfrom this second Get email action is equal tofalse. -
10
Replace the category with Overdue 1 Day
Assign an Outlook category adds a category but cannot remove the old one, so use a different action. In the True branch, add Send an HTTP request from Office 365 Outlook.
- URI:
https://graph.microsoft.com/v1.0/me/messages/followed by the trigger'sMessage Id - Method:
PATCH - Under Advanced parameters, show Body and enter
{"categories": ["OVERDUE - 1 DAY"]} - Leave Content-Type as
application/json
This replaces the email's category list with the new category.
In the False branch the email was read, so remove the category. Copy the HTTP request action, paste it into False, and change the body to
{"categories": []}. - URI:
-
11
Wait until the three-day checkpoint and check again
Inside the True branch of the one-day check, add a Delay renamed
3 Daysand set it to48hours. With the first two delays, that makes three days.Right-click the earlier Get email (V2) action, copy it, and use Paste an action here. Nothing in it needs to change. Then add a Condition with
Is Readfrom this new Get email action is equal tofalse. -
12
Replace the category with Overdue 3+ Days
Copy the HTTP request into the new True branch and change the body to
{"categories": ["OVERDUE - 3+ DAYS"]}.Copy the remove-category HTTP request (the one with
{"categories": []}) into the False branch, so the category is cleared if the email was read within three days. Save the flow. -
13
Test with a normal and an urgent email
Select Test > Manually > Test. Send an email from one of your senders without any keyword in the subject. It arrives, but the flow does not start.
Now send one with
urgentorapprovalin the subject. The flow starts, and with short test delays you can watch the category change fromOVERDUE - 1 HOURtoOVERDUE - 1 DAY. Open the email before the last check and the flow takes the False branch and removes the category.When testing is done, set the delays back to 1 hour, 23 hours and 48 hours.
Tips and common problems
- Category names in the flow must match the names in Outlook exactly, including capitals and spaces. A mismatch creates a new grey category.
- The HTTP PATCH body replaces the whole category list on the email. If you already use other categories on the same emails, test carefully before running this on your main inbox.
- Remember to change the test delays from minutes back to 1 hour, 23 hours and 48 hours. The delays add up, so the second and third are shorter than the checkpoint they represent.
- Categories may not behave the same way in every shared mailbox setup. For a shared mailbox, use Move email (V2) to move the email into folders based on the delay instead.
- Once several emails carry these categories, select a category in Outlook to see every email in that overdue range.
Values used in this flow
| Checkpoint | Delay | Action when unread | Action when read |
|---|---|---|---|
| 1 hour | 1 hour | Assign an Outlook category: OVERDUE - 1 HOUR | Terminate (optional) |
| 1 day | 23 hours | HTTP PATCH body {"categories": ["OVERDUE - 1 DAY"]} | HTTP PATCH body {"categories": []} |
| 3 days | 48 hours | HTTP PATCH body {"categories": ["OVERDUE - 3+ DAYS"]} | HTTP PATCH body {"categories": []} |
All HTTP requests use method PATCH and the URI https://graph.microsoft.com/v1.0/me/messages/ plus the trigger's Message Id.
Prefer folders?
If you would rather move emails than tag them, see Organize Outlook Emails into Folders with Power Automate.
Questions
Can Power Automate remind me about unread emails in Outlook?
Yes. A flow triggered by When a new email arrives (V3) can wait with a Delay, re-check the email with Get email (V2), and use its Is Read value to decide whether to mark it as overdue.
How do I remove or replace an Outlook category with Power Automate?
The Assign an Outlook category action only adds categories. To replace or clear them, use the Office 365 Outlook Send an HTTP request action with method PATCH, the URI https://graph.microsoft.com/v1.0/me/messages/{Message Id}, and a body like {"categories": ["OVERDUE - 1 DAY"]} or {"categories": []}.
Does this flow need a premium connector?
No. Every action, including Send an HTTP request, comes from the standard Office 365 Outlook connector, plus the built-in Delay and Condition actions.
Will this work on a shared mailbox?
Categories may not work the same way in every shared mailbox setup. The video suggests moving emails into folders with Move email (V2) instead of using categories in that case.
