1. Home
  2. Guides
  3. Power Automate
  4. How to send birthday emails to Outlook contacts with Power Automate
Power Automate

How to send birthday emails to Outlook contacts with Power Automate

Build a scheduled Power Automate flow that checks your Outlook contacts every morning and sends a personal birthday email to anyone whose birthday is today, with a BCC to you as a record.

  • By Nur Islam
  • 10:45 video
  • 9 steps
  • 2.3K views
Jump to a step (9)
Who this is for

Small business owners and office managers want to send birthday greetings to clients and staff, but keeping track of dates and remembering to write each email is easy to miss. The birthdays are often already saved in Outlook contacts and nobody is using them.

The flow runs once a day at 9:00 AM. It reads your Outlook contacts, drops anyone without a birthday, converts today's date and each birthday to local time in MM-dd format, and sends an email when they match.

Everything uses standard connectors: Office 365 Outlook plus the built-in Date Time, Data Operation and Control actions. No SharePoint and no premium connectors.

What you need

  • Microsoft 365 Business Basic or Standard with Power Automate
  • Outlook contacts with the Birthday field filled in
  • An email address saved on each contact
  • Your local time zone, for the date comparison

Step by step

0 of 9 done
  1. 01

    Create a scheduled cloud flow

    Open Power Automate from the Outlook web app launcher, or go to make.powerautomate.com. Select Create > Scheduled cloud flow.

    Name the flow, keep the start date, set the start time to 9:00 AM and set Repeat every to 1 Day. Click Create. The flow will check for birthdays every morning.

  2. 02

    Get your Outlook contacts

    Add the Office 365 Outlook action Get contacts (V2). For Folder id, select Contacts (or a custom contacts folder if you only want to email certain people).

    Under Advanced parameters, add Top Count and set it to 1000. By default the action returns only 10 contacts, so set this higher than the number of contacts you have.

  3. 03

    Filter out contacts without a birthday

    Add Filter array from Data Operation. For From, select body/value from Get contacts (V2).

    Click Edit in advanced mode, delete the default, and insert this expression:

    not(empty(item()?['birthday']))

    item() is the current contact, empty() checks whether the birthday field is missing or blank, and not() flips the result so only contacts with a birthday are kept.

  4. 04

    Get today's day and month

    Add Current time from Date Time. It returns UTC, so add Convert time zone next:

    • Base time: output of Current time
    • Source time zone: (UTC) Coordinated Universal Time
    • Destination time zone: your local time zone
    • Time unit: Enter custom value and type MM-dd

    Uppercase MM is the month and lowercase dd is the day. Rename the action Current Day Month.

  5. 05

    Loop through each contact's birthday

    Add Apply to each from Control. For the input, select Body from Filter array.

    Inside the loop, add a Compose action with this expression to pull the current contact's birthday:

    item()?['birthday']

    The birthday comes back as a long UTC date and time.

  6. 06

    Convert each birthday to day and month

    Inside the loop, add another Convert time zone:

    • Base time: output of the Compose action
    • Source time zone: UTC
    • Destination time zone: your local time zone
    • Time unit: custom value MM-dd

    Rename it Birthday Day Month. Converting to local time first stops a birthday from shifting to the day before.

  7. 07

    Compare the birthday with today

    Add a Condition inside the loop. Left side: output of Current Day Month. Operator: is equal to. Right side: output of Birthday Day Month.

  8. 08

    Send the birthday email

    In the True branch, add Send an email (V2) from Office 365 Outlook.

    For To, switch to advanced mode and insert:

    item()?['emailAddresses'][0]['address']

    [0] picks the first email address if the contact has more than one.

    Write a subject and replace the first-name placeholder with item()?['givenName']. In the body, use item()?['displayName'] for the full name, or any other contact field.

    Under Advanced parameters, add BCC and enter your own email so you get a copy of every birthday email the flow sends.

  9. 09

    Save and test

    Save the flow. Click Test > Manually > Test > Run flow. In the video, two contacts have a birthday today and both get an email with their first name in the subject and full name in the body. After that, the flow runs by itself every morning.

Tips and common problems

  • Get contacts (V2) returns only 10 contacts unless you set Top Count. Set it higher than your total number of contacts.
  • Convert both today's date and the birthday to your local time zone before comparing. Outlook stores birthdays in UTC, which can move them to the previous day.
  • Use uppercase MM for month. Lowercase mm means minutes and the comparison will never match.
  • Add yourself in BCC so you can see exactly who received a birthday email each day.
  • Contacts with more than one email address get the email at the first one, because the expression uses [0].
Still stuck? Ask AI to help you fix itChatGPTClaudeGeminiCopilotPerplexityGrok

Expressions used in this flow

WhereExpressionPurpose
Filter arraynot(empty(item()?['birthday']))Keep only contacts with a birthday
Compose (in loop)item()?['birthday']The current contact's birthday
Convert time zone (both)MM-ddCustom format: month and day only
Send an email (V2): Toitem()?['emailAddresses'][0]['address']First email address on the contact
Subjectitem()?['givenName']First name
Bodyitem()?['displayName']Full name

Related builds

Questions

Can Outlook send birthday emails automatically?

Outlook cannot do it on its own, but a scheduled Power Automate flow can. It reads the Birthday field on your Outlook contacts each morning and sends an email to anyone whose birthday matches today.

Do I need a premium Power Automate licence for this?

No. The flow uses the Office 365 Outlook connector and built-in actions, which are included with Microsoft 365 business plans.

Can I send birthday emails to only some of my contacts?

Yes. Put those people in a separate Outlook contacts folder and select that folder in Get contacts (V2).

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.