How to

How to build an executive KPI dashboard

Every function brings its own numbers to the leadership meeting and the first twenty minutes go on reconciling them. Here is the model behind one dashboard, the prompts to build it, and what it takes to run it.

The short answer

An executive KPI dashboard is four parts: a short list of metrics with agreed definitions, a target and an owner on every one, trend rather than a point in time, and a visible refresh state so nobody quotes a stale figure. The discipline is subtraction. A dashboard with forty numbers is a report nobody reads, and the value comes from the argument about which twelve matter, which is a leadership conversation rather than a build task.

kpi.helix-app.ai

Leadership dashboard

12

Metrics, capped at 15

8

On target

2

Stale right now

Q3 frozen

Snapshot taken 30 Sep

112% of target
97%
2.7x, target 4x
41, target 45
103% of target
Net new ARRGross retentionPipeline coverNPSCash days

Coloured by progress against target, not by direction of travel. Pipeline cover is the flagged one: it went up this quarter and is still well short of where it needs to be.

A sketch of the leadership view. Twelve metrics with a hard cap at fifteen, because the pressure is always to add and an uncapped dashboard becomes the report it replaced.

What matters here

  • An executive dashboard is four parts: few metrics, a target and owner on each, trend over point-in-time, and a visible refresh state.
  • The hard part is subtraction. Forty numbers is a report; twelve is a dashboard, and choosing them is a leadership argument rather than a build task.
  • Every metric needs a named owner who would defend it. A number nobody owns generates a question nobody answers.
  • Show trend and target together. A number on its own tells a leadership team nothing about whether to act.
  • Put the last refresh time on the page. A dashboard that is silently stale is worse than one that is honestly late.
  • Link each metric to its definition, or the meeting spends its first twenty minutes rediscovering that two teams count revenue differently.

Who this is for

You run a leadership meeting, or you prepare for one. Every function arrives with its own numbers and they do not agree. What you want is one page everybody trusts, with few enough numbers that people actually read it.

How it works in practice

What happens between the data changing and a leadership team making a decision about it.

  1. 1

    The list is short, and stays short

    Ten to fifteen metrics with a cap enforced in the app, because every function will want theirs added.

  2. 2

    Every metric has a target and a named owner

    Without a target it produces discussion; without an owner, an unanswered question.

  3. 3

    Numbers refresh on a schedule and say when they last did

    A metric past its cadence reads as stale rather than showing an old figure as current.

  4. 4

    Trend and target sit beside the value

    Coloured by progress against target rather than direction, because some metrics going up is bad.

  5. 5

    The owner writes a line before the meeting

    What moved, why, and what they are doing. That turns an agenda item into a decision.

  6. 6

    Period end is frozen

    So the September figure still reads the same in December, and later corrections show as a difference rather than a rewrite.

What an executive dashboard is made of

An executive dashboard is not every chart in one place. It is four parts, and the first one is an exercise in saying no.

A short list

Ten to fifteen metrics, chosen deliberately, each tied to something the leadership team can actually change. Everything else belongs on a functional dashboard.

A target and an owner

Every metric has a number it is supposed to hit and a named person who would defend it. Without both, a metric produces discussion rather than decision.

Trend, not a snapshot

Current value, previous period, same period last year, and the direction. A figure with no history tells a leadership team nothing about whether to act.

A visible refresh state

When each metric last updated, shown on the page. A dashboard that is quietly stale gets quoted in a board pack, which is the expensive version of the problem.

These prompts start from a Helix project, which is what handles sign-in, credentials and hosting. Start with Helix

The prompts

Paste these into Claude Code, Codex or Cursor in order. Each one leaves you with something that runs, so you can stop after any step.

  1. The short list, and saying no to the rest

    The build is easy. The subtraction is the work.

    In this Helix project, build me an executive KPI dashboard.
    
    A metrics table: name, a one-line definition in business language, the
    function it belongs to, the unit, the target for the current period, a
    named owner, and how often it refreshes.
    
    Keep the list short. Ten to fifteen. Build a hard cap into the app with a
    warning when somebody tries to exceed it, because the pressure will
    always be to add rather than remove, and a dashboard with forty numbers
    is a report nobody reads.
    
    Require an owner on every metric, and require a target. A metric with no
    target produces a discussion, and a metric with no owner produces a
    question nobody answers.
    
    Link each metric to its full definition, including what it deliberately
    excludes. Most leadership disagreements about a number are about the
    exclusions, and having the answer one click away saves the first twenty
    minutes of the meeting.
    
    I sign in through Helix, so do not build a login page. Read the signed-in
    user from the runtime. And do not put any key or connection string in the
    code: if this needs to reach another system, tell me and I will create the
    connection in my workspace.

    Worth knowing. The cap is the feature. Without it, every function adds theirs and within two quarters you have the report you were trying to replace.

  2. Trend and target, together

    Because a number on its own is not a decision.

    Now the display, and never show a bare number.
    
    For each metric: the current value, the previous period, the same period
    last year, the change as an amount and a percentage, the direction, and
    progress against target.
    
    Chart the trend rather than only the latest figure. A leadership team
    needs to know whether something is improving, and a single number cannot
    say.
    
    Colour by whether the metric is on track against its target, not by
    whether it went up. Some metrics going up is bad, and a dashboard that
    does not know which is which teaches people to ignore the colour.
    
    Handle missing data honestly. If a metric has not refreshed, say so
    rather than showing the last known value as though it were current.
  3. Make staleness visible

    Because the expensive failure is a quiet one.

    Add refresh handling, and put it on the page rather than in a log.
    
    Each metric records when it last updated successfully and what its
    expected cadence is. Show the timestamp next to the number, and flag
    anything that has missed its cadence.
    
    If a source fails, the metric shows as stale rather than showing an old
    figure as current. A number nobody knows is out of date is the one that
    ends up quoted in a board pack.
    
    Let me snapshot the whole dashboard at period end and keep it, so what
    was reported in September still reads the same in December even after the
    underlying data is corrected. Corrections then show as a difference
    between the snapshot and the live figure, which is a useful thing to see
    rather than a problem to hide.
  4. Commentary, and the drill-down

    The part that turns a chart into a meeting worth having.

    Two last things.
    
    Let the owner of each metric add a short comment for the period: what
    moved, why, and what they are doing about it. Prompt for it before the
    meeting rather than during. A number with the owner's explanation
    attached is a decision; a number alone is an agenda item.
    
    And let me drill from any metric to the detail behind it, or link out to
    the functional dashboard that owns it. The executive view should be the
    top of a path rather than a dead end.
    
    Then report: metrics on and off target over time, which metrics change
    owner or definition most often, which is usually a sign the metric is not
    settled, and how often each metric was stale when the meeting happened.

    Worth knowing. The owner comment is the highest-value field and the one most likely to be skipped. Prompting for it before the meeting is the only way it gets written.

  5. Connect it to real systems

    The step that turns a working prototype into something with your data in it.

    Now connect it to the systems we actually run, so it works on real data
    rather than the rows you seeded.
    
    Anything in angle brackets is a placeholder. Swap it for whatever we use
    instead, and have the app name the connection it wants rather than assume
    a vendor, so changing my mind later is a config change and not a rewrite.
    
    <Snowflake>. Read most metrics from the warehouse, where the definitions
    have already been applied consistently.
    
    <Salesforce>. Read pipeline, bookings and retention where they are not
    already modelled in the warehouse.
    
    <NetSuite>. Read revenue, margin and cash figures for the finance metrics.
    
    <Looker>. Link each metric to the functional dashboard that owns it, so
    the executive view is the top of a path rather than a dead end.
    
    <Okta>. Read the group that says who is on the leadership list, which is
    the only thing the app should check before showing performance against
    target.
    
    <Amplitude>. Read product engagement metrics, which are usually the ones
    missing from the finance systems.
    
    <Zendesk>. Read support volume and satisfaction, which leadership asks
    about and nobody has to hand.
    
    <Slack>. Remind each owner to write their commentary before the meeting
    rather than during it.
    
    Only write where I have said to write. Everything else is read only.
    
    Do not write a key, a token or a connection string anywhere in the code,
    and do not ask me to paste one. Tell me which connections you need and I
    will create each as an authentication in my Helix workspace. Reference
    them by alias.

    Worth knowing. Every name in angle brackets is a placeholder for whatever you run. Helix holds the credential as a workspace authentication, so the app references an alias and never the secret itself.

  6. Ship it

    The last step of every build: a URL, and the right people on it.

    Deploy my app.

    Worth knowing. Your assistant runs helix deploy underneath and the app comes back as a URL. This shows company performance against target, so set Access Control before sharing and be deliberate about who sees the whole page.

What it connects to

An executive dashboard is almost entirely reads, from every system that holds a number somebody quotes.

  • Snowflake

    Read most metrics from the warehouse, where the definitions have already been applied consistently.

  • Salesforce

    Read pipeline, bookings and retention where they are not already modelled in the warehouse.

  • NetSuite

    Read revenue, margin and cash figures for the finance metrics.

  • Looker

    Link each metric to the functional dashboard that owns it, so the executive view is the top of a path rather than a dead end.

  • Okta

    Read the group that says who is on the leadership list, which is the only thing the app should check before showing performance against target.

  • Amplitude

    Read product engagement metrics, which are usually the ones missing from the finance systems.

  • Zendesk

    Read support volume and satisfaction, which leadership asks about and nobody has to hand.

  • Slack

    Remind each owner to write their commentary before the meeting rather than during it.

Each line says whether the app reads, writes or both. Anything not described as writing should be read only.

Named systems are the ones most teams actually run, not a list of the only ones that work. Swap in whatever you use.

Each connection is an authentication in your Helix workspace, referenced by alias. The app names the connection it wants and never holds the credential, so nothing here ends up in your code and any of it can be rotated or revoked without a redeploy.

Running it for real

The build gets you a working dashboard. Its numbers reach a board pack and it reads from several systems of record, so it needs to be run properly.

AI Deployment

Get it to a URL people can open

One command takes the app from your assistant to a live address, so the people who need it get a link rather than instructions for running it locally.

App Security

Put your identity provider in front of it

Company performance against target is among the most sensitive internal data there is. SSO means people sign in with their existing account, and access is scoped deliberately rather than by link.

App Security

Connect the system of record with managed credentials

Pulling metrics from finance, CRM, product and support systems on a schedule needs real access to each. Granting it to the app rather than pasting keys into it means credentials can be rotated or revoked without a redeploy.

App Registry

Put a name on it

Every app carries a named owner and an entry IT can see, so the tool does not become nobody's problem when the person who built it changes role.

Cost Management

Know what it costs to run

Per-app spend visibility, with budgets and caps, so an internal tool cannot quietly become a line item nobody can explain.

Questions people ask

What makes an executive dashboard different from a functional one?

Subtraction. A functional dashboard can carry forty numbers because one team lives in it. An executive dashboard carries ten to fifteen, each tied to something the leadership team can change, and everything else belongs on the functional one it links to.

How many metrics should it show?

Ten to fifteen, with a hard cap enforced in the app. The pressure will always be to add rather than remove, and within two quarters an uncapped dashboard becomes the report it was built to replace.

Why does every metric need an owner and a target?

Because without a target a number produces discussion rather than a decision, and without an owner a question about it goes unanswered. Both are required fields for a reason.

How should staleness be handled?

Visibly. Show the last refresh next to each number and flag anything past its cadence. A metric that fails to refresh should read as stale rather than quietly displaying the last known value, because that is the figure that ends up in a board pack.

Should the dashboard be snapshotted?

Yes, at period end. Underlying data gets corrected and backfilled, and without a frozen snapshot the September figure changes after September has been reported. The gap between snapshot and live is itself worth seeing.

Can I build this without an engineering team?

Yes. The prompts here are written for Claude Code, Codex or Cursor and stage the build. The hard part is not the build, it is agreeing which twelve numbers matter, and that is a leadership conversation.

Last reviewed September 2026.

Build it, then run it properly

Helix is the governed runtime for AI-built apps. Deploy what you build, put SSO in front of it, connect it to your systems with managed credentials, and give it a named owner.