← All Tips

How to Build a Google Sheets KPI Dashboard (For Early-Stage Businesses)

Build a free Google Sheets KPI dashboard with QUERY formulas, SPARKLINE trends, and conditional formatting. Track MRR, CAC, churn, and pipeline in one place.

Published June 29, 2026

Most early-stage businesses don't need Tableau. They don't need Looker, Metabase, or a $500/month BI tool. They need one place to see whether their key numbers are moving in the right direction — and they need it to take less than five minutes to update on a Friday afternoon.

Google Sheets does this better than any BI platform for businesses under 50 people. It's free, shareable with a link, requires no setup or infrastructure, and runs on formulas any non-technical founder can learn in an afternoon. Here's how to build a KPI dashboard in Google Sheets that's actually used — not just impressive to screenshot.

The Raw Data Sheet

Every dashboard needs clean data at its foundation. Create a sheet called RawData with four columns:

| Date | Metric Name | Value | Notes | |------|-------------|-------|-------| | 2026-06-20 | MRR | 4800 | Post June campaign | | 2026-06-20 | Active Users | 342 | | | 2026-06-20 | CAC | 47 | FB ads only |

Date — Use ISO format (YYYY-MM-DD) for reliable sorting. One row per metric per week.

Metric Name — Use consistent names. "MRR" must always be "MRR" — not "Monthly Recurring Revenue" or "mrr." Inconsistent naming breaks every formula downstream.

Value — Raw numbers only. No currency symbols, no percentage signs. Store 4.2 for a 4.2% churn rate, not "4.2%."

Notes — Optional context. Useful when a number spikes or drops — log the reason here so future-you knows what happened.

The logging ritual: Every Friday, open RawData and add one row per metric. Set a recurring calendar block — "5-min KPI log" at 4:45 PM every Friday. It takes less time than writing the meeting summary you'll send about the same numbers anyway.

The KPI Summary Sheet

This is where raw data becomes a readable dashboard. Create a second sheet called KPI Summary with one row per metric and these columns: Metric Name, Latest Value (QUERY formula — see below), Target, Status (conditional formatting), and Trend (SPARKLINE).

Status column: Add a formula that compares Latest Value to Target and returns a readable label:

=IF(B2>=C2, "On Track", IF(B2>=C2*0.8, "Watch", "Off Track"))

Apply conditional formatting to the Status column:

  • "On Track" → green background
  • "Watch" → yellow background
  • "Off Track" → red background

Now every metric has a traffic-light status visible at a glance, no scrolling required.

SPARKLINE trend: In the Trend column, add a sparkline for each metric:

=SPARKLINE(QUERY(RawData!A:C, "SELECT C WHERE B='MRR' ORDER BY A ASC", 0))

This renders a tiny line chart showing the metric's movement over all logged values — right inside the cell.

Example KPIs to track: MRR, Active Users, CAC (Customer Acquisition Cost), Churn Rate, NPS, Pipeline Value. Start with whichever 4–6 you currently discuss in every team or investor call — those are your real leading indicators.

The QUERY Formula, Explained

The QUERY() function is what makes this whole dashboard work without manual copy-pasting. Here's the formula to pull the last 12 MRR values:

=QUERY(RawData!A:D, "SELECT A, C WHERE B='MRR' ORDER BY A DESC LIMIT 12", 0)

Breaking it down:

  • RawData!A:D — the data range: all rows in RawData, columns A through D
  • SELECT A, C — return only the Date (column A) and Value (column C)
  • WHERE B='MRR' — filter to rows where the Metric Name equals "MRR" exactly
  • ORDER BY A DESC — sort by date, newest first
  • LIMIT 12 — return at most 12 rows (last ~3 months of weekly data)
  • 0 — the headers argument: 0 means no header row returned

To pull the single latest value for your KPI Summary sheet, change it to:

=QUERY(RawData!A:D, "SELECT C WHERE B='MRR' ORDER BY A DESC LIMIT 1", 0)

Copy this pattern for every metric — just swap "MRR" for "Active Users," "CAC," etc.


Want a production-ready tracker? The Personal Finance Tracker ($19) is a Google Sheets template with income tracking, expense categories, monthly summaries, and clean export formatting — no setup required.


Building the Trend Chart

A line chart from your QUERY results makes MRR or Active Users growth immediately legible in investor updates and team reviews.

  1. Run the 12-row QUERY for MRR into a helper range (e.g., cells F1:G12 on KPI Summary).
  2. Select that range (F1:G12) — Date in column F, Value in column G.
  3. Insert → Chart. Google Sheets auto-suggests a line chart. If not, set Chart Type to Line.
  4. Set the X-axis to column F (dates) and the series to column G (values).
  5. Title it "MRR — Last 12 Weeks" and move it to the Charts sheet (right-click → Move to own sheet).

Repeat for Active Users. These two charts alone cover 90% of what stakeholders want to see on a dashboard screenshot.

The Weekly Update Ritual

The dashboard only has value if the numbers stay current. Build this into your Friday workflow:

4:45 PM Friday — 5-minute ritual:

  1. Open RawData. Add one row per metric with last week's actuals. Notes column for anything notable.
  2. Flip to KPI Summary. Scan the Status column for any red "Off Track" flags.
  3. For each red KPI, write one sentence in your team channel: what's red, why, what's the next action.
  4. Update the Forecast row if you maintain one — adjust the Target column if goals have shifted.

That's it. Five minutes. The discipline is in the Friday habit, not the dashboard.

Template Structure: 3 Sheets

Here's the complete architecture at a glance:

Sheet 1: RawData

  • Raw weekly log: Date, Metric Name, Value, Notes
  • Never delete rows — this is your source of truth
  • Sort order doesn't matter; QUERY handles it

Sheet 2: KPI Summary

  • One row per metric
  • QUERY formula for latest value
  • SPARKLINE for trend
  • Status column with conditional formatting (green / yellow / red)
  • Helper range for chart source data (optional, can be hidden)

Sheet 3: Charts

  • MRR line chart
  • Active Users line chart
  • Any other trend charts you want to embed in investor decks or team updates
  • Keep this sheet clean — it's the one you screenshot

Lock the RawData sheet header row (View → Freeze → 1 row) so columns never shift. Protect the KPI Summary formula cells from accidental edits (Right-click → Protect Range → restrict to yourself). Share the whole file as "Viewer" for anyone who should see but not edit.


Building this dashboard takes about two hours on a Sunday afternoon and will save you that time every week for the rest of the year. If you'd rather start with a fully formatted, formula-complete template, the Personal Finance Tracker ($19) gives you clean income tracking, expense categories, monthly summaries, and export-ready formatting — without the setup work.

Free Resource

Not ready to buy? Grab our free Notion Quick-Start Template

A no-fluff starter workspace to get organized in 30 minutes. Free, no credit card required.

Want a ready-built tracker?

The Personal Finance Tracker (Google Sheets) is a $19 template with income tracking, expense categories, monthly summaries, and clean export formatting — no setup required.