# AI spend by team, app or customer

Amazon Bedrock, Vertex AI and Microsoft Foundry can each name a team, an app or a customer on the bill itself, if you set the signal they read when the request is made. Costfluent keeps those tags and labels on each AI cost line, beside the model and token tags it derives. This guide sets the signal on each source, then groups and allocates AI spend by it. Each step links to the page that owns the detail.

## Before you start

- A connection to AWS, Azure or Google Cloud with cost in the service category AI and Machine Learning; see [Connect AWS](/connect/aws), [Connect Azure](/connect/azure) and [Connect GCP](/connect/gcp).
- One tag key for the owner, such as `team`, `app` or `customer`, spelled the same on every source.

## 1. Set the signal on each source

Each cloud carries a different signal onto its bill. The statements below are each provider's own, read on 2026-11-10.

- **Amazon Bedrock.** Create an application inference profile for the model, tag it, and call the profile's ARN in place of the model ID with the InvokeModel or Converse API. Then activate the tag as a cost allocation tag in the Billing and Cost Management console; it applies to cost from activation on, not before ([AWS: Application inference profiles](https://docs.aws.amazon.com/bedrock/latest/userguide/cost-mgmt-application-inference-profiles.html)). Costfluent reads activated cost allocation tags from the data export's `Tags` column ([Connect AWS](/connect/aws#reporting-dimensions)).
- **Vertex AI.** Send the owner in the `labels` field of the request body of each Gemini call. Labels reach Cloud Billing only for pay-as-you-go requests; Provisioned Throughput ignores them. Keys and values take lowercase letters, digits, underscores and dashes ([Google Cloud: Custom metadata labels](https://docs.cloud.google.com/vertex-ai/generative-ai/docs/multimodal/add-labels-to-api-calls)). Costfluent reads them as resource labels ([Connect GCP](/connect/gcp#reporting-dimensions)).
- **Microsoft Foundry.** Tag the Foundry resource, or the resource each team deploys to. For models sold by Azure, Foundry also tags a project's usage with `project` on its own, in preview, and not for models sold through Azure Marketplace ([Microsoft: Plan and manage costs](https://learn.microsoft.com/en-us/azure/foundry/concepts/manage-costs)). Costfluent reads both from the row's tags ([Connect Azure](/connect/azure#reporting-dimensions)).
- **A custom provider.** Send your own tags with each cost row; see [Upload cost to a custom provider](/connect/custom-provider#file-format) and [AI spend from any source](/guides/ai-spend-from-any-source).

:::note
A tag reaches the bill from the day the provider starts writing it. Cost from before that day carries no owner, and Costfluent does not add one.
:::

## 2. Group AI spend by the owner

Open the saved report "AI spend" from the "AI spend" dashboard, or a new report filtered on **Service category** AI and Machine Learning. Group by **Tag** and choose the owner key as the **Tag key**, then by **Tag** `ai:model` to see each owner's models. See [Explore cost data](/cost-reports/explore) and [Overview and dashboards](/reporting/dashboards).

## 3. Make one owner value across sources

If the sources spell the owner differently, such as `team` on Bedrock and `project` on Foundry, create a virtual tag that reads the keys in order and fills the gaps with rules, and group by **Virtual tag** instead. See [Virtual tags](/allocation/virtual-tags).

## 4. Allocate it with the rest of the bill

To show each team its AI spend beside the rest of its cloud cost, add the owner to the segments' rules, as [Showback for teams](/guides/showback-for-teams) walks through. See [Segments and allocation rules](/allocation/segments).

## How it behaves

- The owner comes only from the bill: a tag or label the provider writes on the cost line. Costfluent never splits a line by request or by prompt.
- Cost without the owner key stays in the report, under an empty value of the grouping.
- A line whose model Costfluent does not recognize keeps its owner tags but carries no `ai:model`.

## Related

- [Showback for teams](/guides/showback-for-teams)
- [AI spend from any source](/guides/ai-spend-from-any-source)
- [Tags and tag coverage](/allocation/tags)
