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.
This guide covers how to identify shared or unallocated costs, choose an allocation method, and combine the result into a single Dimension.
What you need
A Dimension where the costs you want to split are visible. This can be:
- A prebuilt Cloud Provider Dimension (such as Account, Service, or Region)
- A custom Grouping Dimension you built in Dimension Studio or CostFormation
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 Databaseelement in a Grouping Dimension that isolates your shared database costs by service or account, or aPre-Prodelement that you want to redistribute across development, QA, and staging.
If your Dimension has a Default Value, costs that do not match any rule are labeled with that value (such as
OtherorNot Allocated) instead of appearing under Not In Dimension. CloudZero treats these as identified elements. When setting up your allocation in Dimension Studio or CostFormation, target Default Value costs by matching the element name. Target Not In Dimension costs as unallocated spend.
Step 2: Choose an allocation method
CloudZero supports two allocation methods. Both work in Dimension Studio and CostFormation YAML.
| Method | How it works | When to use |
|---|---|---|
| Allocate By Rules | Splits 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 Streams | Splits 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
Use Allocate By Rules when you want to use known spend that exists in CloudZero already to allocate the shared or unknown spend. This can be done evenly or proportionally:
- Even splits costs equally across all elements regardless of usage. For example, there's a $10,000 database that's shared across the Mobile, Web, and Platform teams. CloudZero splits the cost evenly at $3,333.33 to each team.
- Proportional splits costs based on each group's share of existing spend. For example, a serverless function that calls the shared $10,000 database is already broken down by metadata: Mobile at $1,200, Web at $600, and Platform at $200. CloudZero uses those spend amounts to calculate proportions automatically (60%, 30%, 10%) and splits the $10,000 database cost based on those calculated proportions: $6,000 to Mobile, $3,000 to Web, and $1,000 to Platform. Proportions recalculate for each time period as new data arrives.
For allocations that need different split logic per element, 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. As new telemetry data arrives, the allocation updates automatically.
Example: You have $10,000 in shared database compute costs. Your observability platform shows 100,000 database queries total for January 25, where Mobile made 60,000, Web made 30,000, and Platform made 10,000. CloudZero calculates the proportions for that day (60%, 30%, 10%) and splits the $10,000 as $6,000 to Mobile, $3,000 to Web, and $1,000 to Platform.
How telemetry data maps to allocation
Every Allocation Stream has four components:
| Component | What it does |
|---|---|
| Timestamp | When the usage occurred |
| Element name | The entity each row allocates to (such as a team, product, or customer). CloudZero creates these as elements in the Allocation Dimension. |
| Allocation value | The usage number CloudZero uses to calculate proportions |
| Filter columns (optional) | Scope which spend the stream allocates. Without filters, the stream applies proportions to 100% of your organization's spend. Add filters to target specific services, usage types, or other categories. |
Example: A shared RDS database serves three teams. Your observability platform tracks compute and storage usage per team per day:
| Date | Team | Usage | Service | Usage Type |
|---|---|---|---|---|
| 2025-01-25 | Mobile | 60,000 | RDS | Compute |
| 2025-01-25 | Web | 30,000 | RDS | Compute |
| 2025-01-25 | Platform | 10,000 | RDS | Compute |
| 2025-01-25 | Mobile | 500 | RDS | Storage |
| 2025-01-25 | Web | 1,200 | RDS | Storage |
| 2025-01-25 | Platform | 800 | RDS | Storage |
Team is the element name, Usage is the allocation value, and Service and Usage Type are filter columns that scope the allocation to RDS compute and RDS storage independently.
Send your telemetry data as an Allocation Stream via CSV upload or the API.
If your Allocation Dimension uses multiple streams, the first stream listed takes precedence.
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.
Step 3: Set it up
There are multiple ways to design your allocation, but this is the approach we recommend:
-
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. Most organizations hide this Dimension (
hidden: truein Dimension Studio or CostFormation) because it serves as an input to the combined view, not something users interact with directly. -
Create a combined Grouping Dimension using a GroupBy rule that references both your Allocation Dimension and your Grouping Dimension. List the Allocation Dimension first, then the Grouping Dimension. The Allocation Dimension splits shared costs and redistributes them. The Grouping Dimension then organizes the remaining spend. Because the allocation already redistributed the shared costs, the shared element disappears from the final result.
Example: Your Team Dimension has Mobile at $8,000, Web at $5,000, Platform at $2,000, and Shared at $10,000. Your Allocation Dimension splits the $10,000 Shared element as $6,000 to Mobile, $3,000 to Web, and $1,000 to Platform. With the Allocation Dimension listed first, the combined result is Mobile at $14,000, Web at $8,000, and Platform at $3,000. Shared is gone because the allocation already redistributed it.
A typical setup uses three Dimensions. Using the Team example:
| Dimension | Type | What it does | Hidden |
|---|---|---|---|
| Team | Grouping | Organizes known spend using metadata rules, and in this example puts unknown spend into a Shared element | No |
| TeamAllocation | Allocation | Splits Team's Shared element using proportional, even, or stream-based allocation | Yes |
| Team (with Shared Allocation) | Grouping | Combines TeamAllocation and Team so that all Shared from Team is accurately distributed | No |
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.

