1. Home
  2. Guides
  3. Power Automate
  4. How to send each person one email with their own Excel rows in Power Automate
Power Automate

How to send each person one email with their own Excel rows in Power Automate

Build a weekly Power Automate flow that reads an Excel table, finds each manager once, and sends each of them one Outlook email with a styled table of only their open rows.

Jump to a step (12)
Who this is for

This is for small offices that send the same kind of list to several people, like invoices per account manager, tasks per owner or orders per sales rep. Right now someone filters the sheet by person, copies the rows into an email and repeats it for the next person. It takes time, and sometimes a row ends up in the wrong email.

In the video I use a table of 14 invoices for three account managers. The flow skips the paid invoices, gets the unique list of managers, filters the rows for each one and sends one email each, with a clean styled table instead of the plain default one. Every name, email address and amount in the demo is made up.

What you need

  • A Microsoft 365 work account with Power Automate
  • Excel Online (Business) and Office 365 Outlook connectors (both Standard, no Premium license needed)
  • An Excel workbook stored in OneDrive for Business with your data formatted as a table (no SharePoint needed)
  • A column with each person's email address, plus a status column you can filter on
  • Optional: the sample workbook, the expressions and the finished flow, free to download on this page

Step by step

0 of 12 done
  1. 01

    Prepare the Excel table

    Upload the sample workbook to OneDrive. It has a table named Invoices with the columns Invoice, Customer, Amount, Due date, Status, Manager and Manager email. Three rows are Paid, and the flow skips them. The demo uses plus addresses so all emails land in one mailbox, but for real use put each manager's own address in Manager email.

  2. 02

    Create a scheduled cloud flow

    Click Create, then Scheduled cloud flow, and type Weekly open invoices per manager in Flow name. Click Calendar, select 16, November, 2026 (a Monday) and select 08:00 AM in the time box. In Repeat every select Week, then turn off Sunday, Tuesday, Wednesday, Thursday, Friday and Saturday so the preview shows On Monday every week. Click Create.

  3. 03

    Set the time zone and hours

    Click the Recurrence trigger. In Time zone, select your own time zone (I use (UTC-05:00) Eastern Time (US & Canada)). On these days already shows Monday. In At these hours select 8, press Escape, and type 0 in At these minutes so the preview shows Runs at 8:00 on Monday every week.

  4. 04

    Get the unpaid rows from Excel

    Click the plus icon below Recurrence, search for List rows present in a table, click the Standard filter and select List rows present in a table. Then set it up:

    • Click the action name, type Open invoices and press Tab.
    • Set Location to OneDrive for Business and Document Library to OneDrive. Click Open folder, pick your workbook (mine is Video demos > Open invoices.xlsx) and select Invoices in Table.
    • Click Advanced parameters, select Filter Query and DateTime Format, and press Escape. Type Status ne 'Paid' in Filter Query and set DateTime Format to ISO 8601.
    • On the Settings tab, turn on Pagination and type 5000 in Threshold.
  5. 05

    Get the list of manager emails

    Click the plus icon, search for Select, click Built-in and select Select. Rename it to Manager emails and press Tab. In From, click the lightning icon and select Open invoices > body/value. Click Switch to text mode next to Map, click the Map box, click fx, type item()?['Manager email'] and click Add.

  6. 06

    Remove the duplicate addresses

    Click the plus icon, search for Compose and select Compose. Rename it to Unique managers and press Tab. Click Inputs, click fx, type union(body('Manager_emails'),body('Manager_emails')) and click Add. Union keeps every value only once, so in the demo eleven addresses become three.

  7. 07

    Loop through each manager

    Click the plus icon, search for Apply to each and select Apply to each. Rename it to For each manager and press Tab. Click Select an output from previous steps, click the lightning icon and select Unique managers > Outputs. Everything inside this loop runs once for each manager.

  8. 08

    Filter the rows for this manager

    Click the plus icon inside the loop, search for Filter array and select Filter array. Rename it to Their invoices and press Tab. In From, click the lightning icon and select Open invoices > body/value. Click Edit in advanced mode and type @equals(item()?['Manager email'], items('For_each_manager')) in the box.

  9. 09

    Add the table columns

    Click the plus icon, search for Select, click Built-in and select Select. Rename it to Table columns, press Tab, and in From select Their invoices > Body from the lightning icon. For each column, type the key in Enter key, click Enter value, click fx, type the expression and click Add:

    • Key Invoice, expression item()?['Invoice']
    • Key Customer, expression item()?['Customer']
    • Key Amount, expression formatNumber(float(item()?['Amount']),'C2','en-US')
    • Key Due date, expression formatDateTime(item()?['Due date'],'dd MMM yyyy')
    • Key Status, expression item()?['Status']
  10. 10

    Create and style the HTML table

    Scroll to the end of the loop, click the plus icon, search for Create HTML table, click Built-in and select Create HTML table. Rename it to HTML table, press Tab, select Table columns > Output in From and leave Columns on automatic. Then click the plus icon, search for Compose, select Compose and rename it to Styled table. Click Inputs, click fx, enter replace(replace(replace(body('HTML_table'),'<table>','<table style="border-collapse:collapse;font-family:Segoe UI,Arial,sans-serif;font-size:14px">'),'<th>','<th style="background:#1F4E79;color:#ffffff;text-align:left;padding:8px;border:1px solid #d0d7de">'),'<td>','<td style="padding:8px;border:1px solid #d0d7de">') and click Add.

  11. 11

    Send one email per manager

    Click the plus icon, search for Send an email (V2) and select Send an email (V2). Click the Settings gear next to To, select Use dynamic content, then in To click fx, enter items('For_each_manager') and click Add. Type Your open invoices this week in Subject. Build the Body in this order (use fx and Add for each expression):

    • Type Hi
    • Add the expression first(body('Their_invoices'))?['Manager']
    • Type , and press Enter
    • Type You have
    • Add the expression length(body('Their_invoices'))
    • Type open invoices this week: and press Enter
    • Click the lightning icon, select Styled table > Outputs and press Enter
    • Type Please follow up on the overdue ones first.
  12. 12

    Save, test and check the emails

    Click Save, then Test, select Manually and click Test. Click Continue if the connections screen shows, then Run flow and Done. In the run, click Unique managers to see one address per manager, and check that the loop shows 1 of 3. Open one of the new emails and check the To: line and that the table holds only that manager's unpaid rows.

Tips and common problems

  • Selecting Week in the schedule dialog turns on all seven days. Turn off the six days you do not want, or the flow runs every day.
  • The word Paid in the filter query must match the value in your Status column exactly. Filter Query also supports only alphanumeric column names, so filter on a column without spaces like Status, not Manager email.
  • If DateTime Format is not set to ISO 8601, Excel dates come in as serial numbers and the due date expression will not show real dates.
  • List rows returns only 256 rows by default. With Pagination on, it returns up to 5,000 rows on a Microsoft 365 license, not all rows.
  • If you named your actions differently, use your own names in the expressions, with underscores instead of spaces. The @ sign at the start of the Filter array condition is needed only in the advanced mode box, not in the expression editor.
  • Running the flow again sends all the emails again. If a run looks stuck, check the run history before you run it again. If the expression editor refuses Add for a second, wait a moment and click Add again.
Still stuck? Ask AI to help you fix itChatGPTClaudeGeminiCopilotPerplexityGrok

Questions

Do I need a Premium license or SharePoint?

No. Excel Online (Business) and Office 365 Outlook are Standard connectors, the other actions are built in, and the workbook lives in OneDrive for Business.

Do I have to type the long styling expression myself?

No. All expressions from the video, including the styling expression, are free to download on this page, along with the sample workbook and the finished flow.

Why does the table use inline styles?

Many email apps ignore style blocks. Inline styles on the table, header and cell tags keep the borders, padding and navy header visible in the email.

How do I remove the zero before single digit days?

The format dd MMM yyyy shows dates like 03 Nov 2026. Use a single d instead of dd if you do not want the leading zero.

Can I use this for tasks or orders instead of invoices?

Yes. Any Excel table with an email column works, for example tasks per owner or orders per sales rep. Change the column names in the expressions to match your table.

Video chapters

Files for this guide

ZIP
Send Each Person One Email with Their Own Excel Rows Power Automate HTML Table
Download

Flow package (.zip)? How to import it into your Power Automate.

Ask a question in the comments Last checked 11 Nov 2026. Screens change: if a step looks different, tell me in the comments.