Allocating Shared and Unknown Spend

Some cloud costs cannot be organized using metadata alone. A shared database serves multiple applications, but the billing data only shows a single line item. Other costs have no tags or account attributes at all, leaving them entirely unallocated. CloudZero handles both cases the same way: Allocation Dimensions split these costs across teams, products, customers, or any other grouping that fits your business.

Step 1: Identify what to split

Before creating an Allocation Dimension, identify the costs you want to split. You can allocate:

  • Unallocated spend: Costs that do not match any rule in an existing Dimension, appearing under Not In Dimension. For example, if your Team Dimension leaves 30% of spend unallocated, you can split that 30% proportionally across the teams that do have spend.
  • Identified elements: Costs already grouped into a named Dimension element. For example, a Shared Database element in a Grouping Dimension that isolates your shared database costs by service or account.
ℹ️

Costs assigned to a Default Value are treated as identified elements, not unallocated spend. If your Dimension has a Default Value like Other, those costs are considered allocated to the Other element. Only costs under the Not In Dimension label (no Default Value set) are truly unallocated.

Step 2: Choose an allocation method

CloudZero supports two allocation methods. Both work in Dimension Studio and CostFormation YAML.

MethodHow it worksWhen to use
Allocate By RulesSplits costs evenly or proportionally using spend data already in CloudZero. No additional data required.You want to spread shared costs evenly across groups, or use known spend patterns from related services to distribute costs that cannot be directly attributed.
Allocate By StreamsSplits costs proportionally using usage data you send to CloudZero from observability, security, marketing, or other sources.You have usage metrics (such as API calls, query counts, storage per customer, or other consumption data) and want allocation based on actual usage.

Option A: Allocate By Rules

Splits costs using spend data already in CloudZero. No additional data required. You choose between two methods:

MethodHow costs are splitExample
EvenEqually across all elements$1,000 shared across 4 teams = $250 each
ProportionalBased on each group's share of existing cloud costsA shared database serves three applications. A serverless function that calls the database is already allocated across those applications (60%, 30%, 10%). CloudZero uses those proportions to split the $10,000 database cost: $6,000, $3,000, and $1,000. Proportions recalculate continuously as spend patterns change. For multi-level splits, see ForEachElementOf.

Option B: Allocate By Streams

See Telemetry Streams to learn how to send non-cost data (such as observability metrics, security data, marketing data, or other usage data) into CloudZero.

Once your telemetry data is in CloudZero, the usage patterns in that data determine how costs are split proportionally. If your observability platform shows Team A generated 60% of API calls and Team B generated 40%, CloudZero splits the shared API gateway costs 60/40. As new telemetry data arrives, the allocation updates automatically. When using multiple streams, the first stream listed takes precedence if streams overlap on the same resource and time period.

How telemetry data maps to allocation

Each telemetry record tells CloudZero how much of a shared resource each group consumed. CloudZero uses those values to calculate proportions and split the cost.

For example, a shared API gateway serves three teams. Your observability platform tracks API calls per team per day:

DateTeamAPI Calls
2025-01-25Mobile60,000
2025-01-25Web30,000
2025-01-25Platform10,000
2025-01-26Mobile45,000
2025-01-26Web40,000
2025-01-26Platform15,000

After sending this data as an Allocation Stream (via CSV upload or the API), CloudZero creates elements for Mobile, Web, and Platform in the Allocation Dimension. On January 25, Mobile receives 60% of the shared cost, Web receives 30%, and Platform receives 10%. On January 26, the proportions shift to 45%, 40%, and 15%. Each day's allocation reflects that day's actual usage.

Rate-based allocation

Allocate By Streams also supports a fixed rate per unit of usage, where each element's cost is their usage multiplied by a rate you set. This is useful for internal chargeback with agreed-upon transfer prices. The remaining spend goes to a default element so the total always reconciles with the actual bill. For syntax details, see CostFormation Reference.

Explorer showing allocated costs split across elements

Step 3: Set it up

  1. Create an Allocation Dimension that splits the shared or unknown costs you identified in Step 1, using the method you chose in Step 2. Follow the guide for Dimension Studio or CostFormation YAML.
  2. Combine it with your other costs. Open the Grouping Dimension where you organize your dedicated costs (for example, your Team or Product Dimension). Add a GroupBy rule that uses the Allocation Dimension as a source. CloudZero merges the allocated costs into the same elements as your dedicated costs, giving you a single Dimension that shows the full picture. This also makes it easy to add new rules as your cost model evolves.

Filtering noise and small elements

If an Allocation Dimension produces many elements where most account for very little spend, you can set a cutoff threshold to filter out the noise. Elements below the threshold are either excluded or grouped into a single bucket. This is available for proportional and standard telemetry allocations. For configuration details, see CostFormation Reference.

ℹ️

Have questions or feedback? Reach out to your account manager.