Why Your KPI Reporting Deserves to Be Automated
In most SMBs, KPI reporting looks like this: someone opens five tabs, copies numbers into Google Sheets, applies formulas, generates a PDF, then sends it by email. Every Monday. Every month. Every quarter.
The problem isn't reporting itself — it's the human time swallowed by tasks a machine performs better, faster, and without errors.
Automating KPI reporting with a custom dashboard means turning a recurring chore into a living system that updates itself and alerts you when a metric goes off track.
The Technical Architecture: n8n at the Core
Here's the stack we deploy at Otomy for our SMB clients:
| Layer | Tool | Role |
|---|---|---|
| Orchestration | n8n (self-hosted) | Data collection, transformation, routing |
| Database | Supabase (PostgreSQL) | Structured storage for historical KPIs |
| Front-end | Next.js on Vercel | Interactive, responsive dashboard |
| AI (optional) | Claude AI via API | Automated summaries, anomaly detection |
| Notifications | Slack / Email / SMS | Real-time alerts |
This architecture is modular: you can start with n8n + Google Sheets on a tight budget, then migrate to Supabase as data volume grows.
Step 1 — Identify Your Data Sources
Before building anything, list exactly where your KPIs come from:
- Google Analytics 4: traffic, bounce rate, conversions
- Stripe / WooCommerce: revenue, average order value, refund rate
- HubSpot / Brevo: open rates, leads generated, sales pipeline
- Google Search Console: impressions, clicks, average position
- Internal databases: PostgreSQL, Airtable, Notion
n8n offers over 400 native integrations. For unsupported APIs, a simple HTTP Request node does the job.
Step 2 — Build the n8n Workflow
Here's a concrete workflow for a weekly e-commerce report:
Trigger
Cron Trigger → Every Monday at 7:00 AM
Data Collection
1. HTTP Request → Google Analytics 4 API (sessions, conversions)
2. HTTP Request → Stripe API (revenue, refunds)
3. HTTP Request → Google Search Console API (clicks, impressions)
Transformation
4. Function Node → Calculate conversion rate, AOV, delta vs. previous week
5. IF Node → If conversion rate < 2% → alert branch
Storage
6. Supabase Node → INSERT into 'weekly_kpis' table
Notification
7. Slack Node → Formatted message with key KPIs in #reporting
8. (Alert branch) Email Node → Urgent notification to the manager
Pro tip: use n8n's Merge node to combine responses from different APIs before transformation. This prevents spaghetti workflows.
Step 3 — Store Intelligently With Supabase
Why Supabase instead of plain Google Sheets?
- SQL queries: calculate rolling averages and period-over-period comparisons directly in the database
- Row Level Security: each client only sees their own data
- Auto-generated REST API: your front-end consumes data without a custom backend
- Real-time: Supabase Realtime pushes updates to the dashboard instantly
Recommended table structure:
CREATE TABLE weekly_kpis (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
client_id UUID REFERENCES clients(id),
week_start DATE NOT NULL,
sessions INTEGER,
conversions INTEGER,
revenue NUMERIC(10,2),
avg_order_value NUMERIC(10,2),
conversion_rate NUMERIC(5,4),
seo_clicks INTEGER,
seo_impressions INTEGER,
created_at TIMESTAMPTZ DEFAULT now()
);
Step 4 — Build the Front-End Dashboard
We use Next.js deployed on Vercel to build custom dashboards. Why?
- SSR/SSG: pages load in under 200ms
- Recharts or Tremor: charting libraries built for dashboards
- Auth via Supabase: secure login in 10 lines of code
- Responsive: accessible on mobile for executives on the go
Each dashboard typically includes:
- Overview panel: the 5-7 critical KPIs with trend indicators (↑ ↓)
- Time-series charts: evolution over 4, 12, or 52 weeks
- Visual alerts: a KPI below threshold automatically turns red
- PDF export: server-side generated for board meetings
Step 5 (Bonus) — Add Intelligence With Claude AI
This is where it gets truly powerful. Add an HTTP Request node in n8n that sends your weekly KPIs to the Claude AI API with this prompt:
Analyze these weekly e-commerce KPIs. Identify notable trends,
anomalies, and suggest 3 concrete actions.
Respond in English, 150 words maximum.
The AI-generated summary is then:
- Inserted into Supabase (
ai_summarycolumn) - Displayed at the top of the dashboard
- Included in the weekly Slack message
Result: your executive reads one paragraph instead of dissecting a table of numbers.
Common Mistakes to Avoid
- Too many KPIs: limit yourself to 7-10 metrics maximum. Beyond that, nobody reads them.
- No alert thresholds: a dashboard without alerts is a pretty poster. Define thresholds for every KPI.
- Ignoring reliability: configure n8n's Error Trigger node to be alerted if a workflow fails silently.
- Forgetting historical data: don't store only the latest value. History enables comparisons and trend detection.
What Does It Cost?
| Component | Estimated Monthly Cost |
|---|---|
| n8n self-hosted (VPS) | €5-15 |
| Supabase (Free tier) | €0 |
| Vercel (Free tier) | €0 |
| Claude AI API | ~€5-10 |
| Total | €10-25/month |
Compare that with the cost of an employee spending 4 hours per week on manual reporting: roughly €800/month in time equivalent. The ROI is immediate.
Conclusion: From Reactive Reporting to Proactive Steering
Automating your KPI reporting with a custom dashboard is no longer a luxury reserved for large enterprises. With n8n as the orchestrator, Supabase for persistence, and Next.js for visualization, an SMB can deploy a complete system in under two weeks.
At Otomy, we help SMBs across France and Algeria make this transformation. If your Mondays still start with copy-pasting into Excel, it's time to automate.