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:

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, or a Pre-Prod element 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 Other or Not 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.

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

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:

ComponentWhat it does
TimestampWhen the usage occurred
Element nameThe entity each row allocates to (such as a team, product, or customer). CloudZero creates these as elements in the Allocation Dimension.
Allocation valueThe 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:

DateTeamUsageServiceUsage Type
2025-01-25Mobile60,000RDSCompute
2025-01-25Web30,000RDSCompute
2025-01-25Platform10,000RDSCompute
2025-01-25Mobile500RDSStorage
2025-01-25Web1,200RDSStorage
2025-01-25Platform800RDSStorage

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:

  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. Most organizations hide this Dimension (hidden: true in Dimension Studio or CostFormation) because it serves as an input to the combined view, not something users interact with directly.

  2. 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:

DimensionTypeWhat it doesHidden
TeamGroupingOrganizes known spend using metadata rules, and in this example puts unknown spend into a Shared elementNo
TeamAllocationAllocationSplits Team's Shared element using proportional, even, or stream-based allocationYes
Team (with Shared Allocation)GroupingCombines TeamAllocation and Team so that all Shared from Team is accurately distributedNo

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.