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.
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
| Node | Purpose |
|---|---|
| Schedule Trigger | Fires the weekly rollup on a cron expression |
| Google Sheets | Reads last week's snapshot, appends this week's |
| Stripe | Pulls MRR, new subscriptions, churn |
| Postgres / MySQL | Runs signup and usage queries against your DB |
| HTTP Request | Hits analytics or any REST API for the rest |
| Merge | Combines every source branch into one data set |
| Code | Computes deltas, flags anomalies, builds the digest |
| Slack | Posts the glanceable headline numbers |
| Gmail / SendGrid | Sends the full HTML table |
Getting Started
- Build the Schedule Trigger first and set it to a weekly cron.
- Wire one source node per KPI; confirm each returns the field you expect in the execution log.
- Add the Google Sheets read for last week's snapshot, then Merge.
- Write the Code node that computes deltas and builds the digest object.
- Add Slack and Gmail nodes, both reading from the digest.
- Append this week's snapshot as the final step.
- 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 →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.
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 →Common questions
How do I build a weekly KPI dashboard in n8n?
Can n8n compare this week's KPIs to last week automatically?
Should a KPI dashboard go to Slack or email?
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.
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
More automation guides

n8n Backup Automation That Actually Verifies the Backup
A Backup You Never Verified Is a Coin Flip Every n8n backup automation tutorial that ranks does the same thing: schedule an export, push the JSON to Google Drive or S3, done. They back up the data and…

How to Build an n8n Log Alerting Workflow (No Grafana Required)
Most n8n Error Setups Tell You Everything, Which Means They Tell You Nothing An n8n log alerting workflow has one job: surface the failures that need a human and quietly file the ones that don't. The…

n8n Uptime Monitoring with Slack Alerts (Without the Alert Storms)
An Uptime Check That Cries Wolf Gets Muted in a Week The point of n8n uptime monitoring with Slack alerts isn't to detect a single outage. It's to be trusted the next hundred times it fires. Most of t…