Skip to main content
Lifetime license included with every purchase
n8n workflowsKPI dashboardexec reportingscheduled reports

How to Build a KPI Dashboard with n8n Workflows

Build n8n KPI dashboard automation that pulls metrics on a schedule, aggregates them, and emails a weekly exec rollup to Slack and inboxes. See the nodes.

Nn8n Marketplace Team·July 10, 2026·Updated July 10, 2026·7 min read

Most KPI Dashboards Die in a Spreadsheet Tab

Someone builds a metrics tracker. It works for three weeks. Then the manual copy-paste step slips, the numbers go stale, and the whole team quietly stops trusting it. That's the real failure mode, not the dashboard tooling.

n8n KPI dashboard automation fixes the part that actually breaks: the human in the loop. A workflow pulls each metric from its real source, aggregates everything on a schedule, and delivers a decision-ready rollup to Slack and inboxes before the Monday standup. No tabs to open. No numbers to retype.

The point isn't a prettier chart. It's a number you can trust on a cadence you don't have to maintain.

What You Can Automate

  • Weekly exec rollup: revenue, signups, churn, pipeline, and active users pulled from every source and emailed Monday 7am
  • Week-over-week deltas: each KPI tagged up, down, or flat against last week's stored snapshot
  • Threshold alerts: a Slack ping the moment churn crosses 5% or trial conversion drops under 2%
  • Multi-team digests: one workflow, a Switch node, separate rollups for sales, support, and finance
  • Board-deck exports: the same numbers appended to a Google Sheet that a slide deck reads from
  • Anomaly flags: a metric that moves more than 30% in a week gets called out in red before anyone asks

The KPI Rollup Pipeline

A working weekly dashboard runs as one scheduled pass with a stored history:

Schedule Trigger (Mon 7am)
  → Google Sheets (read last week's snapshot row)
  → HTTP Request (analytics API) + Stripe (revenue) + Postgres (signups)
  → Merge (combine all sources)
  → Code (compute WoW deltas, build digest, flag anomalies)
  → Slack (post headline numbers to #leadership)
  → Gmail (send full HTML table)
  → Google Sheets (append this week's snapshot)

The stored snapshot row is the trick. Without it you have a report. With it you have a trend, and trends are what leadership actually reads.

1. Schedule

A Schedule Trigger set to a weekly cron (0 7 * * 1 for Monday 7am) beats firing daily. In practice, a daily KPI email trains people to ignore it; a weekly one gets opened. Keep the trigger generous so a slow API call doesn't collide with the next run.

2. Collect

One node per source. The Stripe node pulls MRR and new subscriptions, a Postgres node runs your signups query, and an HTTP Request node hits whatever analytics endpoint owns sessions and conversion. Read last week's snapshot from Google Sheets first, in the same pass, so the delta math has something to compare against.

3. Aggregate

Merge the source branches, then a single Code node does the real work: normalize each metric, subtract last week's value, and label the direction. Build the digest object here, not in three downstream nodes. One place to read, one place to debug.

4. Deliver

Slack gets the four or five headline numbers as a Block Kit message. Email gets the full table as HTML. Same data, two formats, both built from the digest object the Code node already produced.

5. Store

Append this week's snapshot as a new row before the workflow ends. That row is next week's baseline. Skip it and you're back to a static report with no memory.

Implementation Patterns

Pattern 1 — Color-coded WoW deltas. The dashboard earns its keep by telling you what changed, not what the number is. Compute the delta in the Code node and attach a status to each KPI:

const prev = $('Google Sheets').first().json;   // last week's row
const out = [];
for (const k of ['mrr', 'signups', 'churn_rate', 'active_users']) {
  const now = $json[k];
  const was = Number(prev[k] || 0);
  const pct = was ? ((now - was) / was) * 100 : 0;
  out.push({
    name: k,
    value: now,
    delta_pct: Math.round(pct * 10) / 10,
    status: pct > 5 ? 'up' : pct < -5 ? 'down' : 'flat',
  });
}
return [{ json: { kpis: out, generated: $now.toISO() } }];

Pattern 2 — Anomaly flag before the email. A KPI that swings more than 30% in a week is usually a data problem, not a business one. Add an IF node after the Code node: if any delta_pct exceeds the band, route to a separate Slack alert in #data-quality first so nobody acts on a broken metric. Self-hosting n8n means you own that data path, so a bad row is yours to catch, not a vendor's.

Pattern 3 — Fan-out by team. A Switch node after aggregation splits one run into role-specific digests: sales sees pipeline, finance sees MRR and churn, support sees ticket volume. One workflow, three audiences, no duplicate trigger logic.

n8n Nodes You'll Use Most

NodePurpose
Schedule TriggerFires the weekly rollup on a cron expression
Google SheetsReads last week's snapshot, appends this week's
StripePulls MRR, new subscriptions, churn
Postgres / MySQLRuns signup and usage queries against your DB
HTTP RequestHits analytics or any REST API for the rest
MergeCombines every source branch into one data set
CodeComputes deltas, flags anomalies, builds the digest
SlackPosts the glanceable headline numbers
Gmail / SendGridSends the full HTML table

Getting Started

  1. Build the Schedule Trigger first and set it to a weekly cron.
  2. Wire one source node per KPI; confirm each returns the field you expect in the execution log.
  3. Add the Google Sheets read for last week's snapshot, then Merge.
  4. Write the Code node that computes deltas and builds the digest object.
  5. Add Slack and Gmail nodes, both reading from the digest.
  6. Append this week's snapshot as the final step.
  7. Run it manually once, read the email end to end, then enable the schedule.

The fastest path is to start from a dashboard template that already wires the schedule, the merge, and the digest, then swap your own sources in. The Decision-Maker's Weekly Dashboard ships exactly that skeleton: a scheduled multi-source pull with WoW deltas and a dual Slack-plus-email delivery.

See the Decision-Maker's Weekly Dashboard
Skip the build

The Decision-Maker's Weekly Dashboard ships this end-to-end: a Schedule Trigger, the multi-source Merge, a Code node that computes week-over-week deltas and flags anomalies, and the dual Slack-plus-Gmail delivery already wired. It's part of The Complete n8n Templates Bundle, a one-time lifetime license to the whole catalog (plus every template added later) if you run more than one of these reporting automations.

Get the Decision-Maker's Weekly Dashboard

A KPI dashboard is one slice of a broader reporting habit. If you're wiring more than one digest, the patterns in automating data reporting and analytics with n8n cover the multi-track schedule, and sending database reports straight to Slack shows the Block Kit formatting in more depth. For the threshold-alert side, the Decision-Maker's Weekly Dashboard already includes the IF-node banding so a bad metric never reaches leadership.

Browse the full template catalog
FAQ

Common questions

How do I build a weekly KPI dashboard in n8n?
Use a Schedule Trigger set to Monday 7am. Wire one source node per metric (Google Sheets, a Postgres query, the Stripe node, an HTTP Request to an analytics API), then a Merge node to combine them. A Code node computes week-over-week deltas and builds the digest, and a Gmail plus Slack node send it. The whole run finishes in under a minute and needs no manual input.
Can n8n compare this week's KPIs to last week automatically?
Yes. Append every run's metric snapshot as a row in Google Sheets, then read the previous row at the start of the next run. A Code node subtracts the two and tags each KPI as up, down, or flat. That delta is what makes a dashboard decision-ready instead of a wall of raw numbers.
Should a KPI dashboard go to Slack or email?
Both, for different reasons. Slack gets the glanceable headline numbers where the team already lives, and email carries the full table that people forward into board decks. The same Code node can format both payloads from one aggregated data set, so you build the digest once and fan it out to two channels.
Stop reading. Start running.

Get the workflow templates this guide is built on

Import-ready n8n JSON, step-by-step setup, and tested end-to-end. One-time payment, own it forever.

Free — $40 value

Get 3 tested n8n templates, free

The full customer package for three real catalog templates — workflow JSON, step-by-step setup guide, credential checklist. Built through the same live-instance release process as everything we sell. Plus new templates and automation guides in your inbox. No spam, unsubscribe anytime.

  • 01Smart To-Do List ManagerPre-built n8n workflow template that automates productivity with OpenAI. Live in about 10 minutes.$14
  • 02Email Follow-Up AutomatorPre-built n8n workflow template that automates crm with OpenAI. Live in about 15 minutes.$12
  • 03Market Trend AnalyzerPre-built n8n workflow template that automates data processing with OpenAI. Live in about 10 minutes.$14