Guide · Google Sheets dashboard

How to Build a Google Sheets Dashboard (Step by Step)

A Google Sheets dashboard is one tab of big numbers and charts that reads from a tab of raw rows. You can build a good one in an hour with five tools Google already gives you: SUMIFS or QUERY to total the rows, scorecard charts for the headline numbers, SPARKLINE for trends, a dropdown to pick the month, and conditional formatting to flag a bad one.

This guide builds a real one for a small online business: monthly revenue, signups and costs, with every formula written out. Every Google feature below was checked against Google’s own help pages on November 9, 2026.

A sheet only knows what you put in it, though. When most of your numbers live in Stripe and Google Analytics, a Dashboard board on Context Board reads them for you. Context Board is ours, so weigh the bias. The last sections cover when that switch makes sense.

Quick answer
  • Use three tabs: Data for raw rows, Summary for monthly totals, Dashboard for what you look at. Never type a number on the Dashboard tab.
  • Total with SUMIFS or one QUERY. SUMIFS gives one cell per number. QUERY builds a whole month-by-type table from a single formula.
  • Show KPIs as scorecard charts: Insert, Chart, then Scorecard chart under Other, with last month as the baseline shown as a percentage.
  • Freshness is the weak spot. Someone has to paste or import new rows, or you write an Apps Script on a timer.
  • Numbers that live in Stripe or GA4? ContextBolt’s Context Board reads them itself while the board is open, and your agent builds the widgets. Free for 3 days, then $12 a month.

The layout: a data tab, a summary tab and a dashboard tab

Split the workbook into three tabs. It keeps the messy part away from the part you read.

TabWhat goes on itWho touches it
DataOne row per event: date, type, detail, amountYou, or an import, or a script
SummaryOne row per month, all formulasNobody, once it works
DashboardA month picker, scorecards, charts, sparklinesNobody, you just read it

The rule that saves you later: raw data only ever goes into Data. If you paste a Stripe export straight onto the Dashboard tab, the formulas that point at it break the next time the export has a different number of rows.

For the founder example, the Data tab has four columns.

A: DateB: TypeC: DetailD: Amount
2026-10-02RevenueStripe payments412
2026-10-02SignupsWebsite9
2026-10-03CostHosting40
2026-10-05CostAds150

Type holds one of three words: Revenue, Cost or Signups. Keep the spelling exact, because every formula below matches on it. A dropdown on column B stops typos at the source: select B2:B, choose Insert, Dropdown, and enter the three words as items.

To bring in money, export it from Stripe. Stripe’s help page on exporting payment data says to open the Transactions page, filter by date if you want, click Export, pick your columns and confirm, and a CSV downloads. In Google Sheets, choose File, Import, upload the CSV and pick Append rows to current sheet, which Google’s import help page says adds the data after the last row with anything in it. You will usually reshape the export into the four columns above first, on a scratch tab.

Step 1: Total each month with SUMIFS

On the Summary tab, put headers in row 1: Month, Revenue, Costs, Profit, Signups. Then list the months.

  1. In A2, type the first month: =DATE(2026,1,1)
  2. In A3, add one month: =EDATE(A2,1), then fill it down to A13. Google’s EDATE page describes it as the date a set number of months after another.
  3. In B2, total the revenue for that month:
=SUMIFS(Data!$D:$D, Data!$B:$B, "Revenue", Data!$A:$A, ">="&$A2, Data!$A:$A, "<"&EDATE($A2,1))

That reads as: add up column D where the type is Revenue and the date falls on or after the first of the month and before the first of the next. The syntax is Google’s own, SUMIFS(sum_range, criteria_range1, criterion1, ...), from its SUMIFS page.

  1. In C2, the same formula with “Cost” in place of “Revenue”.
  2. In D2, profit: =B2-C2
  3. In E2, the same formula with “Signups”.
  4. Fill B2:E2 down to row 13.

The dollar signs keep the Data columns fixed while the month reference moves down a row each time. To count rows instead of adding amounts, for example the number of paying days in a month, swap in COUNTIFS, which takes the same range and criterion pairs.

Step 2 (alternative): Build the whole summary with one QUERY

If you would rather not maintain twelve rows of SUMIFS, QUERY can build the month-by-type table in a single cell. Google’s QUERY page gives the syntax as QUERY(data, query, [headers]), where the query is written in the Google Visualization API Query Language.

=QUERY(Data!A1:D, "select year(A), month(A), sum(D) where A is not null group by year(A), month(A) pivot B", 1)

That returns one row per month and one column for each Type. Watch for 0-based months: the query language reference says months are 0-based, so January comes back as 0 and October as 9. Google’s QUERY page also says each column in the data range should hold one type of value, so keep text out of the Amount column.

To filter by date inside the query, use a date literal in the yyyy-MM-dd format:

=QUERY(Data!A1:D, "select B, sum(D) where A >= date '2026-10-01' and A < date '2026-11-01' group by B", 1)

Which to use? SUMIFS is easier to read and debug a cell at a time. QUERY is less typing and grows on its own as new months appear. For a first dashboard, SUMIFS. Once it works and you trust it, QUERY.

Step 3: Make the KPI row with a month dropdown and scorecard charts

Now the Dashboard tab. The top row is four numbers for the month you pick: revenue, costs, profit and signups.

  1. Add the month picker. Click B1, then Insert, Dropdown. Under Criteria choose Dropdown from a range and select Summary!A2:A13. Google’s dropdown help page lists the same menu path, plus Data, Data validation, Add rule.
  2. Pull this month’s revenue into B3: =SUMIFS(Summary!$B$2:$B$13, Summary!$A$2:$A$13, $B$1)
  3. Pull last month’s into C3: =SUMIFS(Summary!$B$2:$B$13, Summary!$A$2:$A$13, EDATE($B$1,-1))
  4. Repeat for costs, profit and signups in rows 4 to 6, pointing at Summary columns C, D and E.
  5. Add a scorecard chart. Click Insert, Chart. Under Chart type, open the list and pick Scorecard chart under Other.
  6. Set the key value to B3 on the Setup tab, and the baseline value to C3.
  7. Show the change as a percentage. Under Customize, Baseline value, choose to show the comparison as a percentage.

Google’s scorecard chart page covers each of those settings. Make one scorecard per number and line them up across the top. Change the month in B1 and all four update, with their change against the month before.

Keep the helper cells (B3 to C6) off to the side or on a hidden row. The scorecards are what you look at.

Step 4: Add charts and sparklines for the trend

Scorecards answer “how did this month go”. Charts answer “which way is it heading”.

A revenue against costs chart. Click an empty cell on the Dashboard tab, then Insert, Chart, and set the Data range on the Setup tab to Summary!A1:C13. Google’s chart help page says you double-click a chart to open the editor, change the type and range on the Setup tab, and titles, legend and gridlines on Customize. A column chart puts the two side by side for each month. Place it under the scorecards.

A sparkline beside each number. SPARKLINE draws a tiny chart inside one cell. Put these in D3 to D6, next to each KPI:

=SPARKLINE(Summary!B2:B13)
=SPARKLINE(Summary!C2:C13, {"charttype","column"})
=SPARKLINE(Summary!D2:D13, {"charttype","winloss"})
=SPARKLINE(Summary!E2:E13, {"charttype","column"; "color","green"})

Per Google’s SPARKLINE page, line is the default, column draws bars, and winloss shows only whether each value is positive or negative. That makes winloss a good fit for profit: you see at a glance which months lost money. To color a line sparkline, Google says to change the cell’s font color.

Step 5: Filter with slicers, and flag problems with conditional formatting

Slicers for charts. Click a chart, then Data, Add a slicer, and pick the column to filter by. Google’s slicer help page lists the limits to plan around:

  • A slicer filters charts and pivot tables on the sheet that use the same data, and does not filter formulas. Your SUMIFS scorecards ignore it, so the month dropdown drives those.
  • You get one slicer per column. To filter by type and by detail, add two.
  • Your filter choices are private and unsaved until you pick Set current filters as default from the slicer’s menu.

A slicer on Detail is handy for the costs chart. Untick Ads and see what the business costs to run without them.

Conditional formatting for bad months. Select Summary!D2:D13, then Format, Conditional formatting. Under “Format cells if” choose Custom formula is and enter:

=D2<0

Set the fill to red and click Done. Any month that lost money now shows red. For signups, a color scale under Preview shades the busy months darker. Google’s conditional formatting page adds one limit: a custom formula can only reference cells on the same sheet, so put the rule on the tab that holds the numbers, or reach across with INDIRECT.

Google Sheets dashboard template: the finished layout

Put together, the dashboard reads top to bottom like this. Use it as a template: build the three tabs, type the formulas from the steps above into these cells, and paste your own rows into Data.

WhereWhat
Dashboard B1Month dropdown from Summary!A2:A13
Dashboard top rowFour scorecards: Revenue, Costs, Profit, Signups, each against last month
Dashboard D3:D6A sparkline per number, winloss for profit
Dashboard middleColumn chart of revenue against costs by month
Dashboard bottomLine chart of signups by month, with a slicer on Detail
Summary A1:E13Month, Revenue, Costs, Profit, Signups, all SUMIFS or one QUERY
Data A:DDate, Type, Detail, Amount, raw rows only

That is a working Google Sheets KPI dashboard. For which numbers deserve a scorecard in the first place, our KPI dashboard examples list ten boards with the formula behind each KPI.

How to keep a Google Sheets dashboard up to date

Formulas recalculate on their own when the rows change. The work is getting new rows in. You have four ways, from least to most setup.

1. Import on a routine. Export from Stripe, your bank or your ad account once a week and append the rows with File, Import. Free, simple, and only as current as your last import.

2. IMPORTRANGE from another sheet. If costs already live in a bookkeeping spreadsheet, pull them in instead of copying:

=IMPORTRANGE("https://docs.google.com/spreadsheets/d/your-sheet-id", "Costs!A1:D")

The first time, you click Allow Access. Google’s IMPORTRANGE page says a change in the source reloads every open sheet that imports it, and caps each request at 10MB of data.

3. Google’s Reports Builder add-on for GA4. Install it from Extensions, Add-ons, Get add-ons. Per Google’s add-on guide, you pick a property, dimensions, metrics and a date range, and each report lands on its own sheet, updated each time you run it. Running it is still a click.

4. Apps Script on a timer. Choose Extensions, Apps Script to open a script tied to the sheet. The UrlFetchApp service can call any web API, and appendRow adds a row to a tab. A small example that logs a number from a JSON endpoint:

function logSignups() {
  const sheet = SpreadsheetApp.getActive().getSheetByName('Data');
  const res = UrlFetchApp.fetch('https://example.com/api/signups-today');
  const count = JSON.parse(res.getContentText()).count;
  sheet.appendRow([new Date(), 'Signups', 'API', count]);
}

Then, in the script editor, click Triggers, Add Trigger, and choose a time-driven trigger. Google’s trigger guide says these run as often as every minute or as rarely as once a month, and that a daily trigger fires somewhere within its hour. From then on you look after code and an API key, and you fix the script when the API changes.

Where a Google Sheets dashboard stops

A dashboard in Google Sheets is free, and you control each formula. For numbers you type yourself, like a pricing model or next quarter’s targets, it stays the right tool.

It gets heavy when most numbers come from other apps.

  • Someone has to feed it. Methods 1 and 3 need a person each week. Skip a busy week and the scorecards show last month with no warning.
  • Each source is its own project. Stripe needs an export or a script, GA4 needs the add-on, Search Console needs another route. Each one is a thing to fix when it breaks.
  • Stale looks the same as current. A scorecard has no “last updated” line unless you build one.
  • It sits apart from the rest of your work. Your agents, your to-dos and the week’s launch checklist live somewhere else.

If you outgrow the sheet, our Looker Studio alternatives guide covers Google’s free dashboard tool and the paid options, and the dashboard software roundup prices nine tools for a small business.

When the numbers live in Stripe and GA4: a Dashboard board

A Dashboard board is a canvas of live widgets in Context Board, a web app at board.contextbolt.com. The difference from the sheet is where numbers come from. You connect a tool once, and the board reads it on our server while the board is open:

  • Revenue: Stripe (MRR and balance with a restricted key, or revenue, customers and subscriptions through Stripe’s own MCP server), Lemon Squeezy, PayPal and Square.
  • Traffic and search: Google Analytics and Search Console, each with a read-only Google sign-in, plus Plausible.
  • Product: PostHog, Supabase, Sentry and Vercel.
  • Anything else: any JSON API, RSS feed or calendar, or the push API from a cron job, n8n or Zapier.

You don’t build the scorecards by hand. Add the board to Claude, ChatGPT, Claude Code, Codex or Cursor over MCP and ask: “Put Stripe MRR and new customers top left, GA4 users beside them, and a goal ring for 100 customers.” Your agent adds the widgets and connects them, and its name sits on each change so you can undo it.

MRRStripenow
$6,240
5.1%vs last month
UsersGoogle Analyticsnow
9,8128.4%last 28 days
28 days agoToday
Customers goalnow
64of 100
By Dec 31
Signupsnow
212
12vs last week

Costs are on the Running costs sheet. Ads paused until the pricing test ends.

An example Context Board named Founder HQ. Every number on it is example data.

Against the sheet, nobody pastes, because the board reads the source itself. And a number you can’t trust shows as such: when a read fails, the widget keeps its last good value and says what went wrong and when.

Some numbers have no API, like costs from three different invoices. Keep those on a Sheet board in the same workspace, with the SUMIFS you just learned, and ask your agent to add the rows.

What it doesn’t do. Context Board has no live connection to Google Sheets and does not read your sheet. You can bring a sheet over once: in Google Sheets choose File, Download, Microsoft Excel (.xlsx), then import the file into a Sheet board, where it arrives as a copy with its tabs and formulas. QUERY and IMPORTRANGE are not supported there, and sources refresh only while a board is open. If your numbers are all typed by hand and your team already lives in Google Drive, stay in Sheets.

Which one to build this week

  • Your numbers are typed by hand, or come from one export a month: build the Google Sheets dashboard above. Data, Summary, Dashboard, SUMIFS and scorecards.
  • You already keep costs or targets in another spreadsheet: add IMPORTRANGE and keep going in Sheets.
  • Revenue is in Stripe, traffic in GA4, and you are tired of pasting: start a Dashboard board, connect both, and keep the hand-typed numbers on a Sheet board beside it.

If you go the sheet route, build the Data tab first and paste last month’s Stripe export into it tonight. If you go the board route, try Context Board free for 3 days, then $12 a month, connect Stripe, and ask your agent for your first four scorecards.

Frequently asked questions

Something else on your mind? Get in touch.

How do I create a dashboard in Google Sheets?

Use three tabs. A Data tab holds raw rows, a Summary tab turns them into monthly totals with SUMIFS or QUERY, and a Dashboard tab shows the totals as scorecard charts, line and column charts, and SPARKLINE trends. A month dropdown made with Insert, Dropdown lets you switch the month the numbers show.

Is there a Google Sheets dashboard template I can copy?

The layout in this guide works as one. A Data tab with Date, Type, Detail and Amount columns, a Summary tab with one row per month, and a Dashboard tab with a month dropdown, four scorecards, two charts and a sparkline per number. Type the formulas from this post into those cells and paste your own rows into Data.

How do I make a Google Sheets dashboard update automatically?

Formulas recalculate when the data changes, so the job is getting new data in. IMPORTRANGE pulls from another spreadsheet, and Google says a change in the source reloads open sheets that import it. Google's Reports Builder add-on imports GA4 data when you run it. For anything else, an Apps Script on a time-driven trigger can fetch an API and append rows, as often as every minute or as rarely as once a month.

What is the best chart for a KPI in Google Sheets?

A scorecard chart. It shows one big number, its key value, and can compare it with a baseline such as last month, shown as a percentage change. Find it under Insert, Chart, Chart type, Other, Scorecard chart.

Can Context Board read my Google Sheet?

No. There is no live connection to Google Sheets. You can download a sheet as .xlsx with File, Download and import it into a Context Board Sheet board as a copy, with its tabs and formulas. Later changes in Google Sheets don't follow it, and QUERY and IMPORTRANGE are not supported on the board.

How does a Context Board dashboard stay current without pasting?

It reads Stripe, Google Analytics, Search Console, Lemon Squeezy, Plausible, PostHog and more itself while the board is open, and your agent (Claude, Claude Code or Codex) can send numbers no tool exposes. A failed read keeps the last good value and says what went wrong. It is free for 3 days, then $12 a month.