Skip to main content
A sub-account is the unit inside a provider that a charge belongs to. It answers “who is this spend for” in a way the provider itself recognises: a GCP project, a Grafana stack, a GitHub user, one of your own customers behind an AI gateway.

The type is provider-relative

There is no fixed list of sub-account types. Each provider names its own tenancy unit, and CostGraph keeps the provider’s word for it rather than flattening everything into one term. Where a provider names the type itself, that word is theirs and we keep it. Elsewhere we follow the provider’s own hierarchy: Datadog treats the paying org as the billing account and each sub-org as a sub-account, and Cursor uses the member’s email address. This is why the dashboard shows the type next to the name. acme on its own is ambiguous; Project acme is not.

Where it comes from

  • Provider integrations pick it up for you, following whatever hierarchy the provider exposes.
  • AI gateways attribute each request to the customer that made it. See AI gateways, which also covers labelling requests the gateway could not attribute itself.
  • Pushing your own cost data lets you set it per row, so two customers on the same product and period stay separate. See multi-tenancy in FOCUS push.

On the dashboard

Turn on the Sub-accounts column in the cost breakdown. Each row then shows its largest sub-accounts as chips, and expanding one adds a row per sub-account. Those rows carry the same measures as the row above them, not just dollars: usage quantity and unit, unit price, and billed, list and contracted cost. That is the point of tenancy in CostGraph - what a customer cost you is only half the question, and what they consumed is the half that says whether the cost is justified. A tenant whose spend doubled while its usage stayed flat is a rate problem; one whose usage doubled with it is simply growth. Two measures are deliberately withheld when they would be arithmetic rather than fact. A rolled-up “N more” line reports a quantity only when every sub-account inside it shares one usage unit, and a unit price only when that quantity exists - summing hours and gigabytes into one number, or dividing by it, would invent a figure the bill does not contain. Two things are worth knowing about how the breakdown reads:
  • Rows with no tenancy show a dash. Plenty of spend legitimately has no sub-account. A provider that reports none, or an account-level fee that belongs to nobody in particular, is shown as blank rather than invented.
  • “Unassigned” only appears where something else is attributed. When part of a row carries a sub-account and part does not, the remainder is called out, because that gap is the difference between your bill and what tenancy can explain. When nothing in the row is attributed, there is no gap to report.
Clicking a sub-account in the breakdown narrows the whole view to it. Sub-account is also a grouping and a filter in its own right, so you can lead with it rather than reaching it through a provider.