← FinOpsAid blog

How do I read this dashboard? The grammar behind every number in FinOpsAid — FinOpsAid blog

How do I read this dashboard? The grammar behind every number in FinOpsAid

Before any single page makes sense, four things do: the Period filter, the billed-vs-modeled badge, which direction is good, and how stale the data is. Read this first.

Every page in FinOpsAid is built from the same four ideas. Learn them once and every screen becomes readable — including the ones you haven't opened yet. Skip them and you will eventually misread a number in a way that costs you an argument in a budget meeting.

This is the index post for a guide to every page in the console. Each page gets its own walkthrough, linked at the bottom. Start here, because the four ideas below apply everywhere.

1. The Period filter scopes the page — and it isn't anchored to today

The dropdown at the top-right of the page header is the same on every page that shows a time series. Thirteen presets, in this order: Current FY, Previous FY, Last 7 / 30 / 60 / 90 days, Current month, Last month, Last 3 / 6 / 12 / 24 months, All time.

Two things about it surprise people.

The fiscal-year presets follow your calendar, not January. Current FY and Previous FY resolve against the fiscal-year start month set on the Settings page. GitHub has no concept of a fiscal calendar, so this is our setting, and it defaults to January until someone changes it. If your FY starts in April, set it once and the presets follow.

Relative windows anchor to the newest day of data, not to today. "Last 7 days" means the last seven days we actually have, not the seven days ending this morning. Copilot metrics and GitHub billing lag by a couple of days; if short windows were anchored to the wall clock they would routinely land in a gap and show you an empty chart. Anchoring to the data means a 7-day window always contains seven days of something.

Some pages carry a second control next to it — Granularity (Daily / Monthly), Group by, Compare to. Those scope within the period; they never widen it.

2. Billed, modeled, and signal are three different kinds of number

This is the distinction the whole product is built around, and it is the one that matters most in a conversation with finance.

Billed is a dollar amount that came off a GitHub, Anthropic, or cloud-provider billing API. It reconciles to an invoice. Storage cost, SKU-level net spend, Claude API cost, and Vertex/Azure/Bedrock spend are billed.

Modeled is a dollar amount we computed by applying a rate to observed usage, because the vendor doesn't publish that split. Per-repository Actions cost is modeled. Self-hosted runner cost is modeled from infra rates you supply. Per-developer and per-team Copilot cost is modeled unless GitHub attributes it, in which case the badge changes. Modeled numbers are always labeled — a (est.) suffix, the word "modeled" in the card subtitle, or an amber Estimated badge.

Signal is a usage quantity that is not money at all. AI credits used, Actions minutes, tokens, interactions, acceptance counts. A signal tracks activity; it does not track spend, and usage inside your plan's included allowance bills exactly zero dollars. That is why several charts default to a dual axis showing billed dollars on the left and credit usage on the right — a flat dollar line sitting over a spiky usage line is not a bug, it's the allowance doing its job.

How to tell a billed number from a modeled one Billed figures carry a green GitHub-attributed badge and reconcile to an invoice. Modeled figures carry an amber Estimated badge, an est. suffix, or the word modeled in the card subtitle, and are computed by applying a rate to observed usage. Usage signals such as AI credits, Actions minutes and tokens are quantities, not money, and never reconcile to a bill. THREE KINDS OF NUMBER, AND HOW THE UI LABELS THEM BILLED $ Green “GitHub-attributed” Came off a billing API. Reconciles to the invoice. Storage · SKU net · Claude · cloud MODELED $ Amber “Estimated” · “(est.)” A rate applied to usage, because the vendor won’t split it. Per-repo CI · runners · per-dev SIGNAL Counted in units, not $ Activity. Never a bill. Zero $ inside the allowance. Credits · minutes · tokens The badge is not decoration. It tells you whether the number survives a finance review. Take a green number to a CFO as fact. Take an amber number as an estimate, with its method attached. Never take a signal as either — a credit count is not a dollar, and it never becomes one by being large.
Check the badge before you quote the number. The same tile can flip from amber to green for a given org: when GitHub starts attributing per-developer Copilot cost, the Developers and Teams pages switch from a credit-share model to the real figure, and the badge changes with it.

3. Higher is not always better — and the colour tells you which

Most numbers in a cost tool are costs, so the default reading is up is bad. A rising delta renders red with an up arrow; a falling delta renders green. That applies to spend, forecasts, month-over-month change, anomaly deviation, and failed runs.

A specific set of metrics is flagged the other way, because for them rising genuinely is an improvement. On those tiles a rising delta is green:

Metric Where it lives Direction
Acceptance Rate Copilot, Developers, Teams higher is better
Success Rate GitHub Actions, workflow detail higher is better
Seat Utilization Licenses, Copilot higher is better
2FA Compliance Security & Governance higher is better
Avg Health Repositories higher is better
Cache Hit Anthropic / Claude higher is better
List vs Effective Anthropic members higher is better
Everything denominated in dollars everywhere lower is better

Two honest caveats. Utilization has a ceiling that isn't 100%. Runner utilization pinned near 100% means jobs are queueing, not that you're efficient. And acceptance rate is not productivity. It measures how often a suggestion was kept, which tells you whether the tool suits the codebase — a team on an unusual stack can be getting real value at a low acceptance rate.

4. Nothing here is real-time, and every page says so

Read the "as of last sync" stamp before you conclude something changed. The lags are structural, not a sync problem:

The practical rule: a number that dropped to zero for yesterday has almost certainly not been synced yet. Widen the period before you investigate.

One more control worth knowing: Demo vs Live mode. Demo mode serves representative data so you can explore a page that your org hasn't populated yet — a tenant with no Copilot subscription legitimately has no Copilot numbers, and demo mode is how you see what the page looks like when it does.

The 60-second read of any page

The rest of the series

Start hereOverview dashboard · Cost Explorer

ResourcesRepositories · Pull Requests · Teams · Developers · GitHub Actions · Copilot · Anthropic / Claude · Cloud AI Spend · Licenses · Storage · Codespaces · Runners

OptimizationBudgets · Savings

GovernanceSecurity & Governance · Benchmarking

ReportsReports · Alerts · Sync Activity

Frequently asked questions

What is the difference between billed and modeled cost in FinOpsAid?

A billed figure came off a vendor billing API and reconciles to your invoice. A modeled figure is one FinOpsAid computed by applying a rate to observed usage, because the vendor does not publish that split. Modeled numbers always carry an amber Estimated badge, an (est.) suffix, or the word modeled in the card subtitle.

Are AI credits the same as dollars?

No. AI credits are a usage signal, not money. Usage inside your plan's included allowance bills exactly zero dollars, so a large credit count can sit alongside a $0 billed line. That is why several charts show billed dollars on one axis and credit usage on the other.

Does a higher number mean something is better or worse in FinOpsAid?

By default, up is worse, because most figures are costs — a rising delta renders red. A specific set of rate metrics is flagged the opposite way and turns green when rising: acceptance rate, success rate, seat utilization, 2FA compliance, average repository health, and Anthropic cache hit rate.

How out of date is the data in FinOpsAid?

GitHub billing and Copilot metrics lag roughly two to three days. Anthropic org cost lags about five minutes, while per-member Enterprise analytics lags a day and keeps reconciling for up to 30. Cloud AI billing lags hours to about a day. Membership, workflow and runner events arrive in near real time over webhooks.

Want to read these numbers for your own org? Connect your GitHub org — read-only and free during beta — or explore the demo dashboard first.