Square to Microsoft Outlook, weekly sales CSV sent
Monday morning rolls around, and someone still has to log into Square, click into Reports, set the right dates, export a file, rename it, then email it. If you manage more than one location, it gets old fast.
Operations managers get stuck chasing last week’s numbers. Finance leads want a clean CSV that matches the Square Sales Summary (not “close enough”). And store owners just want the Square Outlook CSV automation to run without reminders or follow-ups.
This workflow pulls the previous week’s completed orders for every Square location, builds a summary that matches the Square dashboard report, turns it into a CSV, and emails it via Microsoft Outlook. You’ll see what it fixes, what it outputs, and what you need to run it reliably.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Square to Microsoft Outlook, weekly sales CSV sent
flowchart LR
subgraph sg0["Schedule Flow"]
direction LR
n0["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Get Square Locations"]
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Turn Locations Into List", pos: "b", h: 48 }
n2@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Ignore Locations w/o Sales", pos: "b", h: 48 }
n3["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Get Sales from Square"]
n4["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Compile Sales Reports"]
n5@{ icon: "mdi:play-circle", form: "rounded", label: "Schedule Trigger", pos: "b", h: 48 }
n6@{ icon: "mdi:cog", form: "rounded", label: "Convert Sales Summary to CSV..", pos: "b", h: 48 }
n7["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Get Dates From Last Week"]
n8@{ icon: "mdi:cog", form: "rounded", label: "Send Report", pos: "b", h: 48 }
n5 --> n7
n0 --> n1
n4 --> n6
n3 --> n2
n7 --> n0
n1 --> n3
n2 --> n4
n6 --> n8
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n5 trigger
class n2 decision
class n0,n3 api
class n4,n7 code
classDef customIcon fill:none,stroke:none
class n0,n3,n4,n7 customIcon
The Problem: Weekly Sales Reporting Turns Into Busywork
Weekly reporting sounds simple until it’s your job to do it every single week. You open Square, hope you picked the right date range (previous Monday to Sunday), export a Sales Summary, and then realize you need to repeat it for each location. Then comes the “quick” email to the manager or bookkeeper, which turns into three extra messages because someone can’t find the attachment or the file name is confusing. Worst part: if the exported numbers don’t match what people saw in the Square dashboard, you’re stuck explaining instead of acting on the data.
The friction compounds. Here’s where it breaks down in real life:
- Manually exporting a weekly report for 3–10 locations can easily eat about 1–2 hours every Monday.
- Small date-range mistakes happen, which means your “weekly” report includes the wrong weekend.
- Teams lose trust when the spreadsheet totals don’t match Square’s Sales Summary view, even if the difference is explainable.
- Reporting depends on one person remembering, so it slips during vacations, sick days, or busy weeks.
The Solution: A Weekly Square Sales Summary CSV, Auto-Emailed in Outlook
This n8n workflow runs on a weekly schedule (every Monday at 4:00 AM), pulls the previous week’s sales data from Square for all your locations, and generates a CSV report that mirrors Square Dashboard > Reports > Sales Summary. It starts by calculating last week’s date range, then calls the Square API to fetch your list of locations. After that, it loops through each location, retrieves completed orders for that time window, and ignores locations that had no sales. A processing step aggregates the order data into a clean weekly summary, then the workflow converts the output into a CSV file and emails it to whoever needs it using Microsoft Outlook.
The workflow kicks off automatically, which means you’re not relying on memory. Square becomes the source of truth, and Outlook becomes the delivery mechanism. The end result is a consistent weekly CSV, in the right inbox, at the same time every week.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you run 6 Square locations and you send a weekly sales CSV to your manager and bookkeeper. Manually, it’s often about 10 minutes per location to open reports, set dates, export, name the file, and sanity-check totals, which is roughly 60 minutes. Add another 10–15 minutes to email, answer questions, and resend attachments. With this workflow, you spend about 10 minutes once to connect Square and Outlook, then the Monday report is generated and emailed automatically while you sleep.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Square for sales, orders, and location data.
- Microsoft Outlook to send the weekly CSV by email.
- Square Access Token (get it from your Square Developer dashboard).
Skill level: Intermediate. You’ll paste API credentials, edit an email recipient, and test a scheduled run.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
A weekly schedule triggers it. The workflow is set to run every Monday at 4:00 AM, so your report shows up before anyone starts asking for numbers.
It calculates the previous week’s date range. A small code step generates the correct start and end dates (the prior Monday through Sunday), which keeps reporting consistent even around month changes.
Square data is pulled and cleaned up. n8n retrieves your Square locations, loops through them, fetches completed orders for each location, then skips the ones with no sales so your CSV doesn’t get cluttered.
A Sales Summary-style CSV is generated and emailed. The workflow assembles the weekly totals into a report that matches what you’d expect in Square’s Sales Summary view, converts it into a CSV file, and sends it out through Microsoft Outlook with the attachment ready to forward or import.
You can easily modify the schedule time to match your timezone and staffing rhythm based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Schedule Trigger
This workflow runs weekly and generates a date range for the prior week, so the schedule timing determines which sales data is pulled.
- Add and open Weekly Schedule Trigger.
- Set the schedule rule to Weeks and configure Trigger At Day to
1and Trigger At Hour to8. - Keep the node connected to Generate Previous Week Dates as the first step in the flow.
Step 2: Connect Square Data Retrieval
These nodes call Square APIs to pull locations and daily orders for the previous week.
- Open Retrieve Square Sites and set URL to
https://connect.squareup.com/v2/locations. - Credential Required: Connect your httpHeaderAuth credentials in Retrieve Square Sites.
- Open Expand Location List and set Field To Split Out to
locationsand Fields To Include toid. - Open Fetch Square Orders and set URL to
https://connect.squareup.com/v2/orders/searchwith Method set toPOST. - Set the JSON Body to
={ "location_ids": ["{{ $json.locations.id }}"], "query": { "filter": { "state_filter": { "states": ["COMPLETED"] }, "date_time_filter": { "created_at": { "start_at": "{{ $('Generate Previous Week Dates').item.json.date }}T00:00:00-05:00", "end_at": "{{ $('Generate Previous Week Dates').item.json.date }}T23:59:59-05:00" } } } }, "limit": 1000, "return_entries": false }. - Credential Required: Connect your httpHeaderAuth credentials in Fetch Square Orders.
-05:00. Update it if your Square account uses a different time zone to avoid missing sales.
Step 3: Set Up Sales Processing and Filtering
This section filters out empty order data and calculates summary totals per location and date.
- Open Filter Empty Sales and confirm the condition checks that
{{$json.orders}}is not empty. - Open Assemble Sales Summary and keep Mode set to
runOnceForEachItemto process each location’s daily orders. - Ensure Assemble Sales Summary references data from Generate Previous Week Dates and Retrieve Square Sites for date and location name mapping.
Step 4: Configure Report File and Email Delivery
The workflow converts the summary into a CSV and emails it via Outlook.
- Open Create CSV Report File and set Binary Property Name to
sales_report. - Set File Name to
=sales_report_{{ $('Weekly Schedule Trigger').item.json.timestamp }}.csv. - Open Dispatch Report Email and set To Recipients to
[YOUR_EMAIL]. - Set Subject to
=Your Square Sales Report for {{ $('Weekly Schedule Trigger').item.json['Readable date'].split(',')[0] }}. - Under Additional Fields → Attachments, attach the file using Binary Property Name
sales_report.
sales_report.
Step 5: Test and Activate Your Workflow
Run a manual test to confirm the report populates correctly and the email is delivered.
- Click Execute Workflow and check that Generate Previous Week Dates outputs 7 items.
- Verify Fetch Square Orders returns order data and that Filter Empty Sales passes items through.
- Confirm Create CSV Report File produces a binary file named like
sales_report_<timestamp>.csv. - Check your inbox to confirm Dispatch Report Email delivers the CSV attachment.
- When satisfied, toggle the workflow to Active for weekly production runs.
Common Gotchas
- Square credentials can expire or lack permissions for the endpoints you’re calling. If things break, check n8n’s Credentials panel and confirm your Square access token is still valid first.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Microsoft Outlook sending can fail if the mailbox requires admin consent, MFA changes, or restricted app access. Check the Microsoft connection in n8n and confirm the account can send to your target recipients.
Frequently Asked Questions
About 30 minutes if you already have your Square token and Outlook access ready.
No. You will connect credentials and edit a few fields like the recipient email. The “code” steps are already built into the workflow.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in Square API usage (usually minimal for weekly pulls).
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, but you’ll change two places. Update the Schedule Trigger to run daily, then adjust the “Generate Previous Week Dates” step to output yesterday’s start and end dates instead. Some teams also tweak the email subject to include the report date and add separate attachments per location if managers prefer that format.
Usually it’s an expired or incorrect Square access token in your Header Auth credential (it should look like “Bearer …”). It can also be missing permissions for the endpoints used to list locations or pull orders. If the workflow worked once and then stopped, check if the token was rotated or if the Square app was unpublished or restricted. Finally, if you have a lot of orders, you may be hitting pagination limits and getting incomplete responses, which shows up as odd totals.
If you self-host, it mostly depends on your server and how much data you pull, since n8n itself won’t cap executions. On n8n Cloud, it depends on your monthly execution allowance, but weekly reporting is usually well within limits. If you routinely have more than 1,000 orders per location per week, add pagination to the Square orders request so the report stays complete.
Often, yes, because this workflow needs looping over multiple locations, filtering, and assembling a report that matches Square’s Sales Summary, and n8n handles that kind of logic cleanly. Zapier and Make can do it, but the moment you add multi-step branching, it gets fiddly and can get expensive on task volume. n8n also gives you a realistic self-host path, which is handy if you want the automation to run without worrying about per-task billing. If you only have one location and you just need a basic daily email, Zapier might feel faster to set up. Talk to an automation expert if you want a quick recommendation based on your setup.
Once this is live, weekly sales reporting stops being a recurring task and becomes a dependable system. The workflow handles the repetitive part, and you get your Mondays back.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.