1. Home
  2. Guides
  3. Power Automate
  4. How to email a weekly sales report from Excel with Power Automate
Power Automate

How to email a weekly sales report from Excel with Power Automate

Build a scheduled Power Automate flow that reads your Excel orders table every Monday, filters last Monday through Sunday, totals the orders and sales, and emails one clean HTML report.

Jump to a step (12)
Who this is for

Every Monday someone opens the orders spreadsheet, filters last week's rows, adds up the totals, pastes everything into Outlook and sends the same report again. It takes time each week, and when that person is out the report does not go.

A Recurrence trigger starts the flow every Monday morning. It reads the Excel table with the DateTime format set to ISO 8601, so dates arrive as real dates and not serial numbers. Two Filter array actions keep only the previous Monday through Sunday. A loop counts the orders and adds up sales, a Select action and Create HTML table build the order table, and one Outlook email carries it all in a styled HTML layout.

Everything runs on your existing Excel file in OneDrive with standard actions. If there were no orders last week, the email still goes out with zero totals, so the report never silently goes missing.

What you need

  • Microsoft 365 Business Basic or Standard (standard Power Automate, no premium connectors)
  • An Excel file in OneDrive for Business with the orders formatted as a table (named Orders in the video)
  • Table columns: Order ID, Order Date, Customer, Product, Quantity, Order Total, Payment Status
  • An Outlook mailbox to send the report from

Step by step

0 of 12 done
  1. 01

    Format the orders data as an Excel table

    Open your orders workbook (Orders Log in the video). Select all the columns, choose Format as Table and pick any style. Note the table name shown in the ribbon. In the video it is Orders.

    Power Automate can only read rows from an Excel table, not a plain range.

  2. 02

    Create the scheduled cloud flow

    In Power Automate select Create, then Scheduled cloud flow. Name it Weekly Sales Report. Set it to repeat every 1 Week on Monday and select Create.

    Open the Recurrence trigger to set your Time zone and the exact time. In the video I set the hours to 9 and the minutes to 30, so the preview reads "Runs at 9:30 on Monday every week".

  3. 03

    List the Excel rows without the date bug

    Add List rows present in a table from the Excel Online (Business) connector. Set Location to OneDrive for Business, Document Library to OneDrive, browse to the Orders Log file and pick the Orders table.

    Under Advanced parameters, add DateTime Format and choose ISO 8601. This matters: without it, Excel dates often arrive in Power Automate as serial numbers that you cannot filter by date.

  4. 04

    Create the start and end date expressions

    Add a Compose action and rename it Start Date. In the input, open the expression editor and enter an expression that takes today's date and subtracts seven days. Because the flow runs on Monday, the result is the previous Monday.

    Add a second Compose action named End Date with an expression that subtracts one day, which gives the previous Sunday.

    The exact expressions are in the downloadable guide linked under the video. They follow this pattern:

    • Start Date: formatDateTime(addDays(utcNow(),-7),'yyyy-MM-dd')
    • End Date: formatDateTime(addDays(utcNow(),-1),'yyyy-MM-dd')
  5. 05

    Keep orders from the previous Monday onward

    Add a Filter array action and rename it Filter after last Monday. In From, select body/value from List rows present in a table.

    For the condition, pick the Order Date column on the left, choose is greater than or equal to, and select the Outputs of Start Date on the right. This drops everything before the previous Monday.

  6. 06

    Keep orders up to the previous Sunday

    A Filter array holds one condition in the basic editor, so add a second Filter array named Filter before this Monday. Set From to the Body of the first filter.

    On the left you cannot pick Order Date from the Excel action any more, because this filter reads the first filter's output. Use an expression that reads the order date of the current item instead, for example formatDateTime(item()?['Order Date'],'yyyy-MM-dd'). Choose is less than or equal to and select the Outputs of End Date on the right.

    Together the two filters return only orders from the previous Monday through Sunday.

  7. 07

    Initialize the two total variables

    Add Initialize variable named Total Orders, type Integer, value 0. Add a second one named Weekly Sales, type Float, value 0.

  8. 08

    Count orders and add up sales in a loop

    Add Apply to each and rename it Calculate weekly totals. Set its input to the Body of Filter before this Monday.

    Inside the loop:

    • Add Increment variable, rename it Count orders, pick Total Orders and set the value to 1.
    • Add another Increment variable, rename it Add order total, pick Weekly Sales, and for the value use an expression that reads the current row's order total, such as float(items('Calculate_weekly_totals')?['Order Total']).

    The float() function makes Power Automate treat the Excel value as a number before adding it. If no orders match, the loop is skipped and both variables stay at zero.

  9. 09

    Prepare the report table columns with Select

    Below the loop, add a Select action (Data Operation) and rename it Prepare report table. Set From to the Body of Filter before this Monday.

    In the map, add one row per column you want in the email, each with an expression as the value:

    • Order ID: item()?['Order ID']
    • Customer: item()?['Customer']
    • Product: item()?['Product']
    • Quantity: item()?['Quantity']
    • Total: item()?['Order Total']
    • Payment: item()?['Payment Status']

    Expressions are needed here because the data comes from the filter, not straight from the Excel action. You can rename, add or remove columns.

  10. 10

    Turn the rows into an HTML table

    Add Create HTML table (Data Operation). Set From to the Output of Prepare report table. Under Advanced parameters, leave Columns set to Automatic.

  11. 11

    Build the email

    Add Send an email (V2) from Office 365 Outlook and enter the recipient.

    Paste the subject from the email template in the downloadable guide and replace its two placeholders with the Outputs of Start Date and End Date.

    For the body, switch the editor to code view and paste the HTML from the guide, replacing what is there. Then replace each placeholder with dynamic content (type / and choose Insert dynamic content):

    • Start date and end date: the two Compose outputs
    • Total orders: the Total Orders variable
    • Weekly sales: the Weekly Sales variable
    • Report table: the Output of Create HTML table

    The styled HTML is what makes the report look clean. The default HTML table on its own looks plain and unformatted in the inbox.

  12. 12

    Save and test the flow

    Save, select Test, choose Manually and run the flow. Check the recipient's inbox. The email shows the reporting period, total orders, total sales and the full order table.

    The flow sends one email no matter how many rows the file has. If no orders are found, it still sends the email with zero orders, zero sales and an empty table.

Tips and common problems

  • If dates show up as numbers like 45512, set DateTime Format to ISO 8601 in List rows present in a table. Filters on serial numbers will not work.
  • In the second Filter array, use an item() expression for the order date. Dynamic content from the Excel action points at the wrong data once you filter the output of the first filter.
  • Wrap the order total in float() before adding it to Weekly Sales, so Power Automate treats it as a number.
  • The flow runs on Monday, which is why -7 days gives the previous Monday and -1 gives Sunday. If you change the run day, adjust both expressions.
  • Check the time zone in the Recurrence trigger, or the report may arrive at the wrong hour.
Still stuck? Ask AI to help you fix itChatGPTClaudeGeminiCopilotPerplexityGrok

Expressions used in this flow

The exact versions are in the free downloadable guide linked under the video. These follow the same pattern.

WhereExpressionWhat it does
Start Date (Compose)formatDateTime(addDays(utcNow(),-7),'yyyy-MM-dd')The previous Monday when the flow runs on Monday
End Date (Compose)formatDateTime(addDays(utcNow(),-1),'yyyy-MM-dd')The previous Sunday
Filter before this Monday (left side)formatDateTime(item()?['Order Date'],'yyyy-MM-dd')The order date of the current filtered item
Add order total (Increment variable)float(items('Calculate_weekly_totals')?['Order Total'])The current order's total as a number
Prepare report table (Select)item()?['Order ID'], item()?['Customer'], item()?['Product'], item()?['Quantity'], item()?['Order Total'], item()?['Payment Status']One value per email table column

Questions

Can Power Automate send a weekly report from Excel without SharePoint?

Yes. This flow reads the Excel file straight from OneDrive for Business with the Excel Online (Business) connector and sends it with Office 365 Outlook. No SharePoint list or premium connector is involved.

Why do Excel dates show as numbers in Power Automate?

Excel stores dates as serial numbers. In List rows present in a table, open Advanced parameters and set DateTime Format to ISO 8601 so the dates come through as real dates.

What happens if there were no orders last week?

The loop is skipped, both variables stay at zero, and the email is still sent with zero orders, zero sales and an empty table. You always know the flow ran.

How do I change the day or time the report is sent?

Open the Recurrence trigger and change the day of the week, the hours, the minutes and the time zone. If you move it off Monday, update the start and end date expressions too.

Video chapters

Files for this guide

XLSX
Sample orders workbook for the weekly sales report flow An Excel table named Orders with 60 made-up orders: the same columns the guide uses, ready to save in OneDrive and test the flow.
Download
Ask a question in the comments Last checked 26 Sep 2026. Screens change: if a step looks different, tell me in the comments.