Square to Outlook, month end sales CSV emailed
Month-end reporting sounds simple until you’re hunting for the right Square date range, exporting the same report again, and realizing one location is missing. Then you’re stuck cleaning spreadsheets and replying to “can you resend that?” emails.
Square Outlook CSV automation hits hardest when ops managers are juggling multiple locations, but finance leads and agency-style fractional CFOs feel it too. You get a consistent Sales Summary-style CSV in your inbox automatically, every month, without babysitting Square exports.
This workflow pulls last month’s completed orders for every Square location, builds a clean summary, turns it into a CSV, then emails it via Microsoft Outlook. You’ll see what it fixes, what you need, and how teams typically adapt it.
How This Automation Works
See how this solves the problem:
n8n Workflow Template: Square to Outlook, month end sales CSV emailed
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 Month"]
n8@{ icon: "mdi:cog", form: "rounded", label: "Send Report", pos: "b", h: 48 }
n5 --> n7
n0 --> n1
n4 --> n6
n3 --> n2
n1 --> n3
n7 --> n0
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 Challenge: Month-End Square Sales Reporting That Doesn’t Break
Square’s dashboard report is fine when you’re looking at one store and you have time. Month end is rarely like that. You’re switching between locations, double-checking the “previous month” window, exporting, naming files, then stitching totals together in a spreadsheet so someone else can do forecasting, payroll checks, or commission payouts. One missed filter, one wrong timezone assumption, one location with zero sales that still needs to be “accounted for,” and the whole thing turns into a back-and-forth thread that wastes the first morning of the month.
It adds up fast. Here’s where it usually breaks down in the real world.
- Exporting the Sales Summary manually turns into a recurring calendar chore that still gets skipped when people are busy.
- Multi-location accounts invite mistakes, because one forgotten location quietly throws off the totals.
- CSV files are rarely “ready,” so someone ends up cleaning headers, formatting dates, or re-labeling columns.
- If you’re paying commissions or sending numbers to a landlord or partner, late reports create awkward conversations and rushed decisions.
The Fix: Monthly Square Sales Summary CSV, Sent via Outlook
This automation runs on a schedule (the 1st of every month at 8:00 AM), calculates the exact start and end dates for the previous calendar month, and then talks to Square’s API for you. It first fetches every Square location connected to your account, then loops through them to pull completed orders for the month. Locations with no sales get ignored automatically, so your report stays focused. Next, it aggregates the order data into a summary designed to match what you see in Square Dashboard > Reports > Sales Summary. Finally, it generates a clean CSV file and emails it through Microsoft Outlook to whoever needs it.
The workflow starts with a monthly schedule trigger. From there, it calculates last month’s date window, pulls locations and orders from Square, and compiles a consistent summary. The end result is a CSV attachment delivered via Outlook, ready to forward or drop into your finance process.
What Changes: Before vs. After
| What This Eliminates | Impact You’ll See |
|---|---|
|
|
Real-World Impact
Say you run 5 Square locations and you send a month-end sales CSV to a manager and a bookkeeper. Manually, it’s usually about 15 minutes per location to filter dates, export, and sanity-check totals, plus another 15 minutes to combine and email it, so roughly 90 minutes. With this workflow, the “work” is basically zero on the day it runs: it triggers automatically, compiles the CSV, and emails it. You might spend 10 minutes once a month skimming the attachment, which means you keep about an hour back every month (and the deadline stress disappears).
Requirements
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Square account + Square API access token to fetch locations and orders.
- Microsoft Outlook account to send the CSV to stakeholders.
- Square API credential (Header Auth) (get it from the Square Developer dashboard, then paste as a Bearer token).
Skill level: Intermediate. You won’t write an app, but you will add credentials, confirm date logic, and test with your own Square data.
Need help implementing this? Talk to an automation expert (free 15-minute consultation).
The Workflow Flow
A monthly schedule kicks it off. The workflow runs automatically on the 1st at 8:00 AM, so you stop relying on reminders or someone’s memory.
Dates are calculated for the previous month. A small code step derives the correct start and end window, which matters more than people think when month end lands on weekends or you’re operating across timezones.
Square data is pulled across all locations. It fetches your Square locations first, then pulls completed orders for each one via HTTP requests. If a location has no sales, it’s filtered out so your CSV stays clean.
A sales summary is assembled and emailed. The workflow aggregates the orders into a Sales Summary-style dataset, converts it into a CSV file, and sends it through Microsoft Outlook to the recipient you choose.
You can easily modify who receives the email to support different reporting lines. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Schedule Trigger
Set the monthly trigger that starts the workflow and generates the previous month date list.
- Add and open Monthly Schedule Starter.
- Set the schedule rule to run monthly and confirm the hour is Trigger At Hour
8. - Connect Monthly Schedule Starter to Derive Previous Month Dates as shown in the workflow flow.
Step 2: Connect Square API Data Sources
Retrieve Square locations and orders so each location is queried for every day in the previous month.
- Open Retrieve Square Sites and set URL to
https://connect.squareup.com/v2/locations. - Credential Required: Connect your
httpHeaderAuthcredentials in Retrieve Square Sites. - In Expand Location List, 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 MethodPOST. - Set JSON Body to
{ "location_ids": ["{{ $json.locations.id }}"], "query": { "filter": { "state_filter": { "states": ["COMPLETED"] }, "date_time_filter": { "created_at": { "start_at": "{{ $('Derive Previous Month Dates').item.json.date }}T00:00:00-05:00", "end_at": "{{ $('Derive Previous Month Dates').item.json.date }}T23:59:59-05:00" } } } }, "limit": 1000, "return_entries": false }. - Credential Required: Connect your
httpHeaderAuthcredentials in Fetch Square Orders.
Step 3: Set Up Processing and Filtering
Generate the date list, filter empty responses, compute totals, and convert results to a CSV file.
- Open Derive Previous Month Dates and keep the provided JavaScript Code for generating a list of dates.
- In Filter Empty Sales, ensure the condition checks that Value 1 is
{{ $json.orders }}with the operator Not Empty. - Open Assemble Sales Summary and confirm Mode is
Run Once for Each Itemto compute per-day totals. - In Generate CSV Report, set Binary Property Name to
sales_reportand File Name to=sales_report_{{ $('Monthly Schedule Starter').item.json.timestamp }}.csv.
timestamp value during tests.Step 4: Configure Output Email Delivery
Send the generated report as an email attachment using Outlook.
- Open Email Report Dispatch and set To Recipients to your email address (replace
[YOUR_EMAIL]). - Confirm Subject is
Your Last Month's Square Sales Reportand Body Content contains the HTML message. - Under Additional Fields → Attachments, ensure Binary Property Name is
sales_report. - Credential Required: Connect your Microsoft Outlook credentials in Email Report Dispatch (this node needs credentials but none are configured yet).
sales_report.Step 5: Test and Activate Your Workflow
Run a manual test to confirm data retrieval, CSV generation, and email delivery, then activate for monthly production use.
- Click Execute Workflow to run from Monthly Schedule Starter and watch items flow through Fetch Square Orders and Assemble Sales Summary.
- Confirm Generate CSV Report outputs a binary file named like
sales_report_<timestamp>.csv. - Verify an email arrives from Email Report Dispatch with the CSV attachment.
- Once successful, toggle the workflow to Active so it runs monthly at the scheduled time.
Watch Out For
- Square credentials can expire or lack permissions. If things break, check the Square Developer dashboard token status and the Header Auth value in n8n first.
- If you add pagination for high-volume locations, it’s easy to undercount by stopping at 1,000 orders. Validate totals against Square Dashboard the first month you run it.
- Microsoft Outlook sending can fail if your tenant blocks programmatic attachments or the mailbox has restrictions. Check the Outlook credential connection in n8n and test with a smaller CSV during setup.
Common Questions
Usually about 30 minutes if your Square token and Outlook login are ready.
Yes. You’ll mostly be copying an API token into n8n and testing that the email arrives with the attachment.
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 access (typically included with your Square developer access) and any optional add-ons you choose to run in n8n.
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.
You can. Common tweaks are changing the schedule in “Monthly Schedule Starter,” adjusting the date logic in “Derive Previous Month Dates,” or altering which fields appear in the CSV in “Assemble Sales Summary.” If you need a different destination, you can swap “Email Report Dispatch (Microsoft Outlook)” for Gmail, or add Google Sheets to archive each month automatically.
Most of the time it’s an expired or misformatted Square access token (the header should look like “Bearer …”). Also check that the token has access to the right account and locations. If you suddenly start pulling lots of orders, rate limiting can show up as intermittent failures, so it’s worth retrying or adding simple backoff logic.
For most small businesses, it’s plenty. The main limitation is how many orders you’re pulling per location and whether you add pagination beyond the first 1,000 orders. On n8n Cloud, capacity depends on your plan’s monthly executions; if you self-host, you’re mostly constrained by your server resources and Square API limits.
Often, yes, especially if you have multiple locations and want the report to match Square’s Sales Summary closely. This workflow relies on custom logic (date handling, looping locations, filtering empty locations, and aggregating orders), which is doable in Zapier/Make but tends to get expensive or fiddly as soon as you add branching and data shaping. n8n also gives you a self-host option, which is handy if you run lots of automations and don’t want every extra task to raise your bill. The trade-off is setup responsibility: you’ll test it once and you should validate the first report against Square’s dashboard. If you want someone to sanity-check it with you, Talk to an automation expert.
Once this is live, month-end sales reporting becomes background noise. The workflow handles the repetitive parts so you can focus on what the numbers actually mean.
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.