← 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.
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:
- GitHub billing and Copilot metrics — roughly 2 to 3 days.
- Anthropic org cost — about 5 minutes. Per-member Enterprise analytics — about a day, and it keeps reconciling for up to 30.
- Cloud AI billing (Vertex, Azure OpenAI, Bedrock) — hours to about a day, reconciling for several days after that.
- Membership, workflow and runner events — these do arrive in near-real-time, over webhooks.
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
- Check the Period before reading a single number. The default is usually 30 days, not the current month.
- Check the badge. Green means it reconciles. Amber means it's our model, and you should be able to say what the model is.
- Check the direction convention for the tile you're about to quote. Red up-arrow is a cost rising; green up-arrow is a rate improving.
- Check the as-of date before treating a drop as news.
- Read a dollar figure and its signal together. Credits without dollars overstates the problem; dollars without credits hides why they moved.
The rest of the series
Start here — Overview dashboard · Cost Explorer
Resources — Repositories · Pull Requests · Teams · Developers · GitHub Actions · Copilot · Anthropic / Claude · Cloud AI Spend · Licenses · Storage · Codespaces · Runners
Optimization — Budgets · Savings
Governance — Security & Governance · Benchmarking
Reports — Reports · 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.