← FinOpsAid blog

Where is the money actually going? A section-by-section guide to the Cost Explorer — FinOpsAid blog

Where is the money actually going? A section-by-section guide to the Cost Explorer

Gross vs net, billed vs modeled, product vs SKU vs model, and why per-repository spend only shows CI. Every card on the FinOpsAid Cost Explorer, explained.

Cost Explorer is where you go after Overview tells you something moved. It is the only page in FinOpsAid that shows the gross → discount → net chain, and it is the page where the difference between a billed number and an attributed number is most likely to bite you.

Read the grammar behind every number first if you haven't — the badge and direction conventions below are defined there.

The page in nine zones

Layout of the Cost Explorer page A toolbar of granularity, group-by and compare controls; a row of six KPI tiles; a spend-over-time chart; a product donut beside a ranked product list; an AI credits chart beside a per-model breakdown; a SKU detail table; a spend-by-repository table; a cost-attribution section marked estimated with department and team splits; and a bottom row of cost drivers, period comparison and anomaly detection. COST EXPLORER — WHAT SITS WHERE 1 Granularity · Group by · Compare to — Period is top-right in the header 2 6 KPI tiles 3 Spend over time — billed $ / credits / both · area or bars · dashed forecast 4 Spend by product (donut) Spend by product (ranked) 5 AI credits over time AI credits by model 6 SKU detail — gross · discount · net (the invoice-grade table) 7 Spend by repository — modeled CI only 8 Cost attribution (EST) 9 Drivers · Compare · Anomalies
Teal = billed and invoice-grade. Amber = modeled. Zone 6 reconciles to your GitHub bill. Zones 7 and 8 are our attribution model applied on top of it, and both say so on the page.

Zone 1 — The toolbar, and what each control changes

Four controls, and they compose rather than compete.

The Save view and Share buttons at the far right are UI placeholders in the current build; they don't persist anything yet.

Zone 2 — Six KPI tiles

Tile What it counts Higher means
Total Spend Billed spend summed across the selected period. The footnote repeats the period so the number is never orphaned. Worse
Average Daily / Monthly Spend Total ÷ number of buckets. The delta is week-over-week, which is a different comparison from the tile beside it. Worse
Highest Day / Month The single most expensive bucket in the window, with its date underneath. Worse — and a big gap between average and highest is a spikiness signal worth chasing on Alerts.
Repositories Count of repositories in scope, with the active count as a footnote. Neutral.
Cost / Dev (Active) AI cost divided by active developers, not by headcount. Footnote gives the denominator. Worse, but read it as unit economics — rising cost per dev with flat total spend means fewer people are using the tool.
Forecast (month) Projected month-end spend, with a month-over-month delta. Worse

The denominator on Cost / Dev is the thing to check. Dividing by active developers rather than by everyone with a seat gives you the true unit cost of a person who actually uses the tool — which is the number that belongs in a business case, and a different number from the one you get by dividing the bill by headcount. There's a longer treatment in cost per active developer.

Zone 3 — Spend over time

The same three-tab metric switcher as Overview — Billed / AI credits / Both — plus two extras that only appear on the Billed tab:

Zones 4 and 5 — Product and model breakdowns

Spend by product appears twice, deliberately: a donut for share-of-total and a ranked horizontal bar list for exact amounts with percentages. Both are net billed cost — after discount. The donut caps at the top five products; the ranked list at six.

AI credits over time is the credit-specific version of the trend card: billed AI-credit dollars on one axis, credits used on the other. AI credits by model ranks billed dollars per model beside it. That pairing answers "did spend rise because we used more, or because we used something more expensive?" — usage on the left, mix on the right.

Zone 6 — SKU detail, the one table that reconciles

How gross, discount and net relate in the SKU table Gross is list price before any agreement. Discount is the negative adjustment applied by your GitHub agreement, shown in teal with a minus sign. Net is what you were actually billed and is the column that reconciles to the invoice. A totals row at the foot of the table sums all three. SKU DETAIL — THREE COLUMNS, ONE OF THEM IS THE BILL GROSS $12,400 List price. What the SKU costs before your agreement. DISCOUNT −$3,100 Your negotiated reduction. Rendered green — it helps you. = NET $9,300 What you were billed. The only column finance wants. Every other dollar figure on this page — product, model, repo, team — derives from Net. A row with a zero discount is not a mistake; not every SKU is covered by an agreement. The totals row at the foot is the figure to compare against the invoice for the same window. Export CSV from this card when someone in finance asks for “the actual numbers”.
This is the invoice-grade table. Sorted by net descending, with a totals row and a CSV export. If a number elsewhere on the page is disputed, this is where you settle it.

Zone 7 — Spend by repository, and its one big limitation

The card subtitle states the limitation plainly, and it's worth restating: the per-repo figure is modeled GitHub Actions cost only. GitHub does not attribute Copilot spend to repositories, so no amount of engineering makes a per-repo Copilot dollar figure appear. A repository with heavy Copilot use and no CI shows $0 here, correctly.

Worth knowing what did change: repository-level Copilot usage metrics went generally available in July 2026, covering coding-agent and code-review activity per repo. That's a real attribution signal and we expect to surface it — but it is activity, not dollars, and turning it into a per-repo cost would mean inventing an allocation rule. When that arrives it will be labelled modeled, like everything else we allocate.

Columns: Runs, Failed (rendered in the warning colour when non-zero), Minutes, Actions Cost, Health, and a small sparkline. Only the top five by cost are shown; "Show more" goes to the full Repositories page. The search box filters before the top-five cut, so searching a repo name will surface it even if it isn't in the top five overall.

Minutes is the honest column. It's the billable signal. Actions Cost is that signal multiplied by a rate — useful for ranking, not for reconciliation.

Zone 8 — Cost attribution, and why department may be empty

This section has its own heading, an amber EST chip, and a one-line disclaimer: Copilot cost is not attributed to teams/departments by GitHub — these splits are our model. Everything under it is modeled.

Chargeback by department frequently reads "No department map loaded — department/location come from HRIS/SCIM, not GitHub." That is not a bug. GitHub has no concept of a department. Until an HRIS or SCIM feed supplies the mapping, there is nothing to split by, and inventing one would be worse than showing nothing. Clicking a department drills into its members.

By team does the same split by GitHub team. Same overlap caveat as everywhere else: a developer on three teams contributes to three rows.

Zone 9 — Drivers, comparison, anomalies

Cost drivers is a pie of the top six values for whichever dimension you chose in Group by. Switch Group by to Model and it answers "which model is the spend"; switch to SKU and it answers "which line item".

Compare periods appears only when Compare to is set to Previous period. It lists total spend plus the top four drivers, each with the current figure and a delta against the equal-length prior window. Standard cost semantics apply: a rising delta renders red.

Anomaly detection shows the newest spike in each of the three monitored series — spend, credits, and Actions minutes — with the percentage above the trailing baseline. It's a preview; the full ranked feed is on Alerts. The "Investigate" button is a placeholder in the current build.

What people get wrong on this page

The 60-second read

Frequently asked questions

What is the difference between gross, discount and net in the SKU table?

Gross is list price before any agreement. Discount is the reduction your GitHub agreement applies, shown with a minus sign. Net is what you were actually billed, and it is the only column that reconciles to the invoice. Every other dollar figure on the page derives from net.

Why does Cost Explorer show no Copilot cost per repository?

GitHub does not attribute Copilot spend to repositories, so no per-repo Copilot figure exists at source. The per-repository column shows modeled GitHub Actions cost only. A repository with heavy Copilot use and no CI correctly shows zero there.

Why is the chargeback by department card empty?

Department and location come from an HRIS or SCIM feed, not from GitHub — GitHub has no concept of a department. Until that mapping is supplied there is nothing to split by, so the card says so rather than inventing an allocation.

Want to explore your own spend? Connect your GitHub org — read-only and free during beta — or try the demo first. Next: how to read the Repositories page.