← FinOpsAid blog

A usage signal is not a dollar — reconciling GitHub's AI credits to your bill — FinOpsAid blog

A usage signal is not a dollar — reconciling GitHub's AI credits to your bill

AI credits became a billing unit in June 2026, and your credit ledger still won't equal the invoice. What changed, what didn't, and how to reconcile the two without pretending either is the other.

Open a GitHub cost dashboard and it tells you that you spent a certain amount on AI last month. Open GitHub's billing page and it shows a different number. Nothing is broken. The two numbers are measuring different things, and the entire discipline of managing GitHub's AI spend comes down to understanding why — and refusing to pretend one is the other.

This got more interesting in June 2026, not less. Before then, credits were purely a usage metric and the advice was simple: never call them dollars. Since GitHub moved Copilot to usage-based billing, AI credits are the billing unit — consumption is priced at published per-model token rates and charged once you pass the allowance your subscription includes.

So the old shorthand needs retiring. Credits are no longer "not money". They are money with conditions attached, and the conditions are exactly where the two numbers still part company.

What GitHub's AI credits actually are now

A credit is a metered unit of AI consumption, priced. Input tokens, output tokens and cached tokens all draw against it at the rate published for whichever model served the request. That makes the credit ledger the closest thing to a real-time view of AI spend the platform has ever offered — it moves fast, it moves before the invoice does, and it tells you where consumption is happening while the month is still live.

What it still isn't is your bill. Three things stand between the two. Your subscription includes an allowance, so the first tranche of consumption changes the ledger and not the invoice. Promotional credits — Business and Enterprise accounts had them running into August 2026 — suppress the charge without suppressing the usage. And code completions and Next Edit suggestions consume no credits at all, so a large share of real Copilot activity never appears in the ledger in the first place.

The result is a ledger that leads the invoice, overstates it while an allowance is unspent, and understates total usage because the free surfaces are invisible to it. Directionally excellent. Not the thing you owe.

Why the signal and the bill disagree

Reconciling metered AI credits down to the billed invoice A waterfall from the metered credit signal to the billed total. Four documented adjustments account for the gap: an included allowance, the billing period boundary, trial and unbilled usage, and SKU mix with rounding. The gap is explainable rather than an error. SIGNAL AI credits metered Subscription allowance Period boundary Promotional credits SKU mix and rounding BILLED What the invoice says EVERY STEP OF THE GAP HAS A NAME
The two numbers are never meant to match. A tool that silently reports the left bar as dollars is confidently wrong; the deliverable is the middle — each adjustment named, so finance can follow the arithmetic. Illustrative proportions.

Once you look for them, the reasons for divergence are everywhere:

None of these are errors. They're the normal, expected distance between "how much did we use" and "how much are we billed."

The failure mode: confidently wrong

Here's how it goes wrong in practice. A tool takes the usage credits, multiplies by a published rate, and presents the result as "your AI spend." It looks precise. You carry it into a budget review. Finance pulls up the actual GitHub invoice, and it doesn't match — not by a rounding error, but by a margin large enough to notice.

Now you're not discussing cost control; you're defending your dashboard. And you've lost the more valuable argument, because the first casualty of a number that doesn't reconcile is your credibility on every other number you present. A metric you can't tie back to the invoice is worse than no metric at all: it actively costs you trust.

How to reconcile properly

The fix is not to pick one number and discard the other. It's to hold both, on purpose, and show the relationship:

  1. Meter the signal. Track credits and usage in near-real-time — that's your early-warning system and your attribution layer.
  2. Pull the billed totals. Get the authoritative dollars from GitHub's billing API, on GitHub's clock.
  3. Show the gap. Put the modeled figure and the billed figure side by side and surface the variance rather than hiding it inside a blended "spend" number.
  4. Label every estimate as an estimate. Anything modeled — per-repo, per-user, per-runner — carries that label and an as-of timestamp. No modeled dollar ever masquerades as a billed one.

Meter the signal, anchor it to the invoice, and never conflate the two. That's the whole discipline in one line.

Why the gap is a feature, not a bug

The instinct is to treat any divergence between model and bill as a defect to eliminate. It isn't. The gap is information. When your modeled AI spend and the billed total drift apart, one of two things is true: either your model has a data problem worth fixing, or there's a real cost driver you didn't understand yet — an allowance you blew through, a workload that grew, a plan detail you'd forgotten. Both are things you want to know. A tool that smooths the gap away to look tidy has thrown out the single most useful reading on the dashboard.

This is the same principle that runs under every other GitHub cost decision — reclaiming idle Copilot seats, attributing spend to teams, the whole FinOps playbook. Meter the signal, reconcile it against the bill, present estimates as estimates.

That reconciliation — credits metered in near-real-time, anchored to the billed invoice, every modeled figure labeled and timestamped — is the layer FinOpsAid refuses to skip. It's why the numbers on a Cost Explorer page are ones you can carry into a budget meeting and defend.

Frequently asked questions

Are GitHub AI credits the same as dollars?

No. Credits are a measure of usage, not a billed total. Consumption inside your included allowance bills nothing, so credits and the invoice legitimately disagree. Any tool that presents a credit count as spend will be confidently wrong in a way that is hard to catch.

Why does the credit ledger disagree with the GitHub invoice?

Because allowances, promotional credits and the credit-free surfaces all sit between them. The gap is explainable rather than an error — it just has to be explained. Treat it as a feature of the data, not a defect, and reconcile the signal against the billed figure rather than substituting one for the other.

How do I reconcile AI credits to what I was actually billed?

Take the billed line as the anchor and treat credits as the explanatory signal beside it. Reconcile in that direction — never derive a dollar figure by multiplying credits by an assumed rate, because the allowance means the effective rate is zero until it is exhausted.

Want to see the gap between your AI usage signal and your actual GitHub bill? Connect your GitHub org — read-only and free during beta — or explore the demo dashboard first.