Back to blog
Automatizaciónreportssalesn8n

How to Generate Automatic Sales Reports Every Monday Without Touching a Spreadsheet

Automate your weekly sales reports with n8n, your CRM, and OpenAI. Receive a clear summary every Monday with KPIs, week-over-week comparison, and alerts, delivered directly to email or WhatsApp.

Published on February 16, 2026·7 min read

Every Monday, someone on your team spends one to three hours doing the same thing: opens the CRM, exports the week's data, pastes it into a spreadsheet, calculates the totals, makes the chart, and puts together the email or presentation for the 10am meeting.

It's necessary work. But it's not work that requires a human — it requires a system.

In this article I'll explain how to build that system: a workflow in n8n that every Monday at 7am automatically pulls last week's data, processes it, generates a natural-language summary, and sends it directly to the right recipients.

No spreadsheet. No manual effort. No one having to remember to do it.


Why Manual Reports Are a Problem

The problem isn't just the time they consume. It's what happens when they depend on one person:

An automatic system resolves all of these problems at the root: it always arrives, on time, with the same format and consistent analysis.


The System You'll Build

By the end of this tutorial you'll have a workflow that:

  1. Activates automatically every Monday at 7am
  2. Pulls last week's sales data from your CRM or data source
  3. Calculates the main KPIs and compares them to the previous week
  4. Generates an executive summary in natural language with OpenAI
  5. Sends the report by email and/or WhatsApp to the defined recipients

The report arrives before the weekly meeting starts. The team has fresh numbers without anyone having had to work to get them.


Step 1: Define What Data You Need

Before touching n8n, define the KPIs you want in the report. Being clear here prevents building something nobody reads.

Most useful KPIs for most businesses:

Start with the first five. Adding more is easy once the system is running.


Step 2: Connect Your Data Source

The data source depends on how you currently manage your sales.

If you use HubSpot:

n8n has native HubSpot integration. The "HubSpot" node can search for deals closed in a specific date range. The query for the previous week:

Filter: closeDate >= [previous Monday] AND closeDate <= [previous Sunday]
AND stage = "closedwon"

If you use a Google Sheet as a sales log:

Use the "Google Sheets" node to read rows where the sale date falls within the previous week. n8n can filter directly using date expressions.

If you use Shopify:

n8n's "Shopify" node allows querying orders by date range. Use the orders endpoint with created_at_min and created_at_max parameters.

If you use another CRM or system:

Most modern CRMs have a REST API. In n8n, the "HTTP Request" node can query any API that returns JSON data. If your CRM has an API, it can connect to n8n.


Step 3: Calculate KPIs in n8n

With the raw data in n8n, use the "Code" node (JavaScript) to do the calculations:

// Current week data
const currentWeekSales = items[0].json.sales;

// Calculate KPIs
const totalSales = currentWeekSales.reduce((sum, v) => sum + v.amount, 0);
const numTransactions = currentWeekSales.length;
const avgDealSize = totalSales / numTransactions;

// Previous week data (from the second item)
const previousWeekTotal = items[1].json.totalSales;
const weekVariation = ((totalSales - previousWeekTotal) / previousWeekTotal * 100).toFixed(1);

// Top products
const productCounts = {};
currentWeekSales.forEach(v => {
  productCounts[v.product] = (productCounts[v.product] || 0) + v.amount;
});
const topProducts = Object.entries(productCounts)
  .sort(([,a], [,b]) => b - a)
  .slice(0, 3);

return [{
  json: {
    totalSales,
    numTransactions,
    avgDealSize: avgDealSize.toFixed(0),
    weekVariation: `${weekVariation > 0 ? '+' : ''}${weekVariation}%`,
    topProducts
  }
}];

Step 4: Generate the Summary With OpenAI

Numbers are useful. A natural-language analysis that contextualizes them is even more useful.

Configure the "OpenAI" node with this prompt:

You are a business analyst. Based on the following sales KPIs, generate an executive summary of maximum 150 words.

Week data:
- Total sales: ${{totalSales}}
- Number of transactions: {{numTransactions}}
- Average deal size: ${{avgDealSize}}
- Change vs previous week: {{weekVariation}}
- Top 3 products: {{topProducts}}

The summary should:
1. Start with the most relevant number (whether it was a good or bad week)
2. Highlight the most significant change vs the previous week
3. Mention the top product of the week
4. If there's a negative variation > 15%, add a heads-up note
5. End with an action-oriented sentence for the week ahead

Tone: direct, executive, no fluff.

Typical result:

Week of May 5-11 — Sales Summary

Sales of $47,850, up +12% over the previous week. Transaction count (134) was the highest of the month, driven primarily by the winter collection launch which represented 35% of the week's sales.

Average deal size climbed to $357, a signal that customers are buying higher-value items. The standout product was the waterproof jacket Model X3 with 28 units sold.

For this week: Keep the launch momentum going with a retargeting campaign for visitors who browsed but didn't buy.


Step 5: Send the Report

By email (Gmail):

Use the "Gmail" node to build the email with the summary and formatted KPIs. You can add a simple HTML table with the main numbers before the text summary.

By WhatsApp:

If leadership prefers to receive the report on WhatsApp, use the "WhatsApp Business" node to send the formatted message. WhatsApp supports bold text using asterisks, which lets you give hierarchy to the content.

Dynamic recipients:

If you need to send the same report to multiple people, configure a recipient list in Google Sheets. n8n reads the list and sends to everyone automatically. To add or remove recipients, just edit the sheet — no need to touch the workflow.


Automatic Alerts for Out-of-Range Numbers

Add a layer of intelligence to the system: alerts when something deserves urgent attention.

Configure an "IF" node in n8n that checks:

Alerts go through a separate channel (Slack, Telegram, or WhatsApp) with the context of the problem, so the team can act that same day.


System Variations

Daily report (instead of weekly):

Change the Schedule Trigger from "Mondays at 7am" to "every day at 7am" and adjust the date range to the previous day. Useful for e-commerce businesses or restaurants with high daily volume.

Report by sales channel:

If you sell through multiple channels (physical store, e-commerce, marketplace, WhatsApp), the system can generate a consolidated report with a breakdown by channel.

Live dashboard (instead of periodic report):

For businesses that need real-time data, n8n can feed a dashboard in Google Looker Studio or Notion that updates automatically every hour.


The Time You Recover

For a business with 5 team members where someone spends 2 hours each week generating reports:

And that's without counting the value of always having data available, on time, and error-free.


Want Me to Set It Up for Your Business?

The system I described in this article is something I implement with my clients in one week. The process includes connecting your specific data source, defining the KPIs that matter most to your business, and configuring the recipients and delivery channels.

The result: your reports arrive on their own, without anyone needing to remember to make them.

I want my automatic reports →

Does your business have this problem?

In 30 minutes I'll tell you exactly what to automate first and how much time you can recover.

Request free diagnosis