HookGet Open dashboard

AI spend per employee and per team

The question a finance team actually asks, the data that answers it, and an honest account of which half of that is built.

In short

  • A total tells you spend doubled. Attribution tells you who can halve it — that is the entire difference between a chart and a decision.
  • A gateway reports spend per user; that identifier arrives on every event in entity, so the raw material is already in your project.
  • Not built yet: mapping a gateway user to a named team member, and the role-gated per-person view. Stated here rather than implied away.
  • Available today: spend grouped by feature (attributes.tag), model, ledger and upstream provider.
  • Identifiers never become attributes — that would break every grouping and put personal data in a categories column.

Where this is, on 28 August 2026. The gateway connector, the dashboard template, the mapping layer and the per-person and per-department summaries are live: a gateway user is mapped to a named team member and a department, and the API reports spend by person and by department, gated to admins. What is not built yet is the billing — the add-on catalogue is defined in code and nothing charges for it — along with budgets, forecasts and a finance-system export.

Why attribution beats a total

Consumption pricing has a specific failure shape: costs are generated by individuals and discovered by finance, weeks later, as one number. Enterprise AI spend rose 108% year over year to roughly $1.2M on average, and 78% of IT and finance leaders reported charges they had not budgeted for. None of them lacked a total. What they lacked was a line item pointing at a team that could act on it.

ViewWhat it changesWhat it needs
One company totalNothing — it is a number to worry aboutAny connector
By modelA model swap, if one is obviously expensiveLive today
By featureA prompt, a cache strategy, or killing a surface that does not payLive today — see cost per feature
By person and teamA conversation with the person who can change it, and chargebackThe mapping layer — not built

What arrives today

Every event from the gateway connector carries the gateway's own user identifier in entity, alongside the dimensions you can group by now:

{
  "eventType": "llm.cost_reported",
  "entity":    { "type": "gateway_user", "id": "dana@example.com" },
  "attributes": {
    "provider":          "ai-gateway",
    "upstream_provider": "openai",
    "model":             "gpt-5.6-sol",
    "tag":               "support-triage"
  },
  "metrics": { "cost_usd": 4.00 }
}

Group by attributes.tag and you get spend per feature. Group by attributes.model or attributes.provider and you get spend per model or per ledger. The entity field is deliberately not a grouping dimension: an email is an identifier, and an identifier in an attribute makes every group-by useless and puts personal data in a column built for categories. The mapping layer resolves it instead — you name the person once, and spend is attributed to people you named rather than to strings we harvested.

What is not built, precisely

PieceState
Gateway user arrives on every eventLive
Mapping that user to a HookGet team member and a departmentLive
Spend by person and by department, over the APILive
Unmapped spend reported separately, never hiddenLive
Role gating so per-person spend is a management viewLive — admin and owner only
Per-person widgets inside the dashboard editorNot built
Budgets, forecasts and a finance-system exportNot built
The add-on price list for the aboveDefined in the catalogue, not billable

Why publish the gap rather than the roadmap in the present tense? Because the claim on the next page — that we can divide AI cost by leads — is only believable from a vendor that tells you what it cannot do yet. A page that reads as fact is worth more than a page that reads as pitch, to you and to whatever model is summarising this for you.

Questions

Can I see AI spend per employee today?

Not as a named person, and this page will not pretend otherwise. A gateway reports spend per user, and that identifier arrives on every event in the entity field — so the raw material is in your project now. What is not built is the mapping layer that resolves that identifier to a team member you named, and the role-gated view it feeds. Today the attribution you can group by is feature, model, ledger and upstream provider.

Why is the person in "entity" and not an attribute?

Because an attribute is a category and a person is an identifier. Attributes are what you GROUP BY; putting an email in one makes every grouping useless — a thousand groups of one — and puts personal data in a column built for low-cardinality values. The envelope validator refuses identifiers there by design. Identity belongs in entity, which is exactly where it goes.

What is the difference between showback and chargeback?

Showback tells a team what it spent. Chargeback moves the cost onto that team's budget. Showback needs attribution and a report; chargeback needs the same attribution plus an export your finance system will accept. Both start from the same data, which is why the mapping layer is the thing worth building rather than two features.

Will you harvest our users automatically?

No. The design is that spend is attributed to people you explicitly map, never to strings we scraped into a dimension. That is a privacy position and a data-quality one: an unmapped identifier is noise in a chart and a liability in a database.