Cost Categories
CCM cost categories provide an understanding of where and how your money is being spent. Cost categories allow you to take data across multiple sources and attribute it to business contexts, such as…
Cost Categories transform raw cloud spending data into meaningful business contexts by aggregating costs across multiple sources (AWS, GCP, Kubernetes clusters, etc.) and organizing them into customizable business dimensions such as departments, teams, projects, or environments.
With Cost Categories, you can:
Map cloud costs to business units - Create categories like "Teams" or "Departments" to track spending across organizational structures
Drill down into detailed cost analysis - Examine specific cost buckets (e.g., the "Operations" team within a "Teams" category) to identify spending patterns
Apply consistent cost attribution - Use the same business contexts across different cloud providers and resource types
Filter and group in CACM Perspectives - Leverage your categories in reports and dashboards for comprehensive cost analysis
The logic behind cost categories is simple: Create Rules that bring in cost data -> Rules combine to form Cost Bucket -> Cost Buckets combine to form Cost Category
For example: Imagine your company has multiple departments. You want better visibility into marketing spend across various campaigns and cloud platforms. Currently, marketing costs are scattered across parts of AWS resources (for digital marketing), GCP resources (for YouTube marketing), and some kubernetes Clusters (for social media marketing tools):
Create a Cost Category called "Marketing"
Add Cost Buckets to this category:
"Digital Marketing" - with rules for AWS resources
"YouTube Marketing" - with rules for GCP resources
"Social Media Marketing" - with rules for Kubernetes clusters
Result: A comprehensive view of all Marketing costs across multiple cloud platforms

What is the difference between Cost Categories and Perspectives?
Cost Categories label and organize your cloud spend into custom buckets, while Perspectives let you view and analyze that categorized data using Cost Categories as filters or group-by dimensions.
What it is
A classification system that assigns costs into custom buckets based on rules you define.
A saved view of cost data with predefined filters, groupings, and time ranges.
Purpose
To label and organize costs into meaningful business groupings (e.g., Environment, Department, Project).
To analyze and visualize costs through a consistent lens, making it easy to track trends or budgets over time.
Scope
Changes how cost line items are categorized across all reporting and dashboards.
Controls how the categorized cost data is displayed and compared in reports.
How They Work Together
Cost Categories define the labels for your costs.
Perspectives decide how to look at those costs.
You can:
Use a Cost Category as a filter in a Perspective → see only costs for a specific category value.
Use it as a group-by dimension → break down total cost into category buckets.
Before You Begin
To create and manage Cost Categories in Harness CACM, you need:
Active CACM Connectors: You must have at least one active cloud connector set up for the cloud providers you want to categorize costs for: Set Up CACM Connectors.
Required Permissions: Your Harness user account must belong to a user group with the following role permissions:
Cloud & AI Cost Management: Cost Categories: Create/Edit
Cloud & AI Cost Management: Cost Categories: View
For more details on CACM permissions, see CACM Roles and Permissions.
Creating Cost Categories
In your Harness application, go to Cloud & AI Cost Management > Cost Categories > New Cost Category.
Define your Cost Bucket(s)

A cost category is composed of one or more buckets. Each bucket contains filters that collect data from specific sources.
Enter a descriptive name for the cost bucket (e.g., "Marketing Department")
Each bucket collects costs from data sources that belong to that department
Define Rules: Add multiple conditions to a rule using the AND operator (Use to filter data sources that include both criteria)/ OR operator (Use to filter data sources that include one of the criteria)
What are Rules?
Rules help you define which cloud resources to include in your Cost Bucket using a simple "Operand-Operator-Value" structure.
Operand The data category or attribute you want to filter on Select from:
Common
Cost Categories
Cluster
AWS
GCP
Azure
External Data
Operator The comparison method that defines how to match values Choose from:
IN: Include only resources that exactly match the specified value
NOT IN: Include all resources except those that match the specified value
NULL: Include only resources where this field has no value (excludes resources with this field)
NOT NULL: Include only resources where this field has a value
LIKE: Include resources where the field partially matches a pattern (uses regular expressions)
For exact pattern matching, use
^pattern$syntax
Values The specific data points to include or exclude in your perspective Select the specific data points to apply the rule to. These will vary based on your selected Operand and Operator.
After configuring all your cost buckets, click on "Continue"

Manage Unallocated Costs
When you use Cost Categories in a Perspective (as a filter or Group By dimension), some costs may not match any of your defined cost buckets. These are called Unallocated Costs.
In Manage Unallocated Costs, you can choose to show or ignore unallocated costs, and choose a name for how those costs are displayed.
Show Unallocated Values as (enter a name)
Ignore Unallocated Values
Share Default Costs among Cost Buckets (Coming Soon)
Overview Page

The Cost Categories overview page provides a centralized view of all your defined categories. From this dashboard, you can:
View category details - Click any category to examine its cost buckets, rules, and configurations
Manage categories - Edit existing categories, clone them to create similar ones, or delete categories you no longer need
Copy cost buckets - Transfer bucket definitions between categories to maintain consistency across your cost organization structure:
Expand the source cost category
Select Manage Cost Buckets
Select buckets to copy
Click Copy and choose target categories
Verify with View Details
Note: If a destination category already has a bucket with the same name, rename it first to avoid conflicts.
Use Cost Categories
Cost Categories can be used across multiple Harness CACM features. The table below shows how each feature supports different Cost Category capabilities:
Usage Methods
• Rules for filtering
• Group By dimension
• Filter panel selection
• Dimension for analysis
• Filter for data selection
• Filter for recommendations, including Governance Recommendations. Cost categories that use labels are supported.
Shared Cost Buckets
✅ Supported
Costs allocated per sharing strategy
❌ Not Supported
❌ Not Supported
Nested Categories
✅ Supported
✅ Supported
✅ Supported
Cluster Data
✅ Supported
Can create categories with cluster rules
✅ Supported
✅ Supported
If Changes in Cost Category
Updates apply to historical data
Monthly tracking of changes
Updates apply to future recommendations
Note: When using Cost Categories across multiple features, be aware of the different support levels and behaviors to ensure consistent analysis.
In Perspectives
When you group by a cost category:
Each cost bucket appears as a separate line item
Costs are distributed to their respective buckets based on the rules defined in the cost category
Shared costs are allocated proportionally to each cost bucket according to your sharing strategy
Resources that don't match any bucket rules appear under "Unattributed"
Cross-Category Interactions
When using one cost category in a rule and grouping by another cost category:
Only costs that match your rule's cost category will be included
These costs are then grouped according to the buckets in your group-by cost category
Resources that match your rule but don't belong to any bucket in your group-by category appear under "No [Category Name]"
Shared costs from both categories are allocated according to their respective sharing strategies
Important: When using multiple cost categories with overlapping resources, be careful with shared buckets. If both categories have shared buckets with overlapping rules, costs might be counted differently than expected.
Filter
You can use Group By and filters together. For example, your filter could select Manufacturing from the Department Cost Category, and then you can select GCP: SKUs in Group By.
When including multiple cost categories in your filter, it is important to check for any shared cost buckets between them. If you have shared cost buckets with overlapping rules in both cost categories, the cost of these buckets is counted twice, resulting in duplication of costs. Therefore, it is recommended not to have multiple cost category filter in a Perspective. However, if you must add a multiple cost category filter, avoid overlapping shared cost buckets between cost categories to prevent any potential errors.
When creating a Perspective, you can define a rule using cost categories. The benefit of using a cost category as a rule in a Perspective is that the cost category definition is separated from all the Perspectives that use it.
If you modify the definition of a cost category, any Perspective that uses the cost category automatically displays the changes.
For example, if a new product is added to the Manufacturing department, you can simply update the Manufacturing bucket in the Departments Cost Category, and that change is automatically reflected in all the Perspectives that use that Cost Category.
If cost categories with overlapping cost buckets are used in your Perspective rule, the total cost of the cost buckets in both categories is counted only once. However, the cost of the shared buckets between the two categories is duplicated because of overlapping rules. Therefore, it is recommended to avoid using multiple cost categories with overlapping shared cost buckets in your perspective rule to prevent any potential errors.
When you add a cost category to your Perspective rule:
The Perspective will only show costs that match the selected cost buckets within that category
Shared cost buckets associated with the selected cost buckets will be included and allocated according to your sharing strategy
Costs outside your selected buckets will not appear unless you include "Unattributed" in your selection
In Dashboards
You can visualize cost categories in your custom dashboard. Cost Categories is available in AWS, GCP, Azure, Unified and External Data Explores
Update Delay: Changes to cost categories may take up to 24 hours to appear in dashboard data.
Historical Data Behavior: Cost category changes apply to data from the current month forward via CUR and Billing Exports. Historical data remains unchanged.
Deletion Behavior: When you delete a cost category, it remains visible in dashboards until the end of the current month. Example: If deleted on January 24th, it will still appear until January 31st.
Shared Buckets: Important: Shared cost buckets are not included when using cost categories in dashboards.

In Recommendations
Using Cost Categories with Recommendations
You can filter CACM Recommendations using Cost Categories to focus on specific business areas:
Regular Cost Buckets
Fully supported
Nested Cost Categories
Fully supported
Shared Cost Buckets
Not supported
To filter recommendations using cost categories:
Go to Cloud & AI Cost Management > Recommendations
Select your cost category in the Filter panel
Select the cost buckets you want to include
All the resources included in your selected cost buckets will appear in the filtered recommendations view.

Stamped and Dynamic Cost Categories
Cost Categories let you group and filter cloud spend using custom bucket rules. But when you filter a Perspective by a specific bucket, the results can differ significantly depending on whether your pipeline uses stamped or dynamic mode, even when the underlying cost data is identical.
Stamped mode assigns each cost record to exactly one bucket at ingestion time, using a priority-ordered CASE WHEN evaluation. The bucket assignment is stored as a column on the row so when you filter later, you're filtering against a pre-computed value.
Dynamic mode skips the pre-assignment. Instead, it evaluates the bucket's filter conditions directly at query time against the raw data. No priority logic is applied, it simply checks whether a row satisfies the bucket's rules.
Refer to this to understand the Dynamic Toggle on Perspectives Page: Dynamic Toggle
Example Setup
Cost Category: CC1
Buckets (in priority order):
CB1:region = us-east-1CB2:awsAccountId = acc1
Raw Cost Data:
us-east-1
acc1
$10
us-west-2
acc1
$20
How Stamping Works
At data ingestion, each cost record is assigned to exactly one bucket using a CASE WHEN statement that respects rule priority:
Result after stamping:
us-east-1
acc1
$10
CB1
us-west-2
acc1
$20
CB2
The first row matches both rules (region = us-east-1 AND awsAccountId = acc1), but because CB1 has higher priority, it wins. The row is stamped as CB1 and never considered for CB2.
Filtering Behavior: Stamped vs Dynamic
Scenario: Perspective filtered by CC1 = CB2
Stamped Mode — Result:
us-west-2
acc1
$20
Note: The
us-east-1 | acc1row ($10) is not in these results — it was stamped asCB1, notCB2. It doesn't appear as Unattributed either; it simply doesn't match theCB2filter and is excluded entirely.
Dynamic Mode — Result:
us-east-1
acc1
$10
us-west-2
acc1
$20
Why Are the Results Different?
The difference comes down to what question each mode is answering when you filter by a bucket.
Stamped Mode: "Which rows were assigned to this bucket?"
Stamped mode stores the bucket assignment as a column on each row at ingestion time. When you filter by CB2, the query is:
This asks: "Give me rows where the pre-computed bucket is CB2."
The us-east-1 | acc1 row was stamped as CB1 (because CB1 had higher priority). When you filter for CB2, that row simply doesn't match — it is excluded from results. It does not fall into Unattributed; Unattributed only applies to rows that matched no bucket during stamping.
Dynamic Mode: "Which rows match this bucket's filter conditions?"
Dynamic mode doesn't use the stamped column. Instead, it evaluates the bucket's underlying filter at query time:
This asks: "Give me rows that satisfy CB2's rule definition."
Both rows have awsAccountId = acc1, so both match — regardless of what bucket they would have been assigned to by priority.
The Root Cause: Priority is Lost in Dynamic Filtering
When stamping occurs, the system evaluates all bucket rules together in priority order and assigns each row to exactly one bucket. The priority logic is baked into the stamped value.
When dynamic filtering occurs, the system only evaluates the single bucket's filter you're querying. It has no awareness of other buckets or their priority. It simply checks: "Does this row match the filter conditions for CB2?"
This is why:
Stamped respects priority → overlapping rows go to the highest-priority bucket only
Dynamic ignores priority → overlapping rows appear wherever their attributes match
Grouping Behavior
When grouping by CC1, we always use all buckets' CASE WHEN statement with priority order:
Result (same for both modes):
CB1
$10
CB2
$20
Grouping reconstructs the full priority logic, so results are consistent.
Summary
Stamped
"Which rows were assigned to this bucket?"
Yes — priority is baked into the stamped value
Dynamic
"Which rows match this bucket's conditions?"
No — only evaluates the bucket you are filtering by
Key clarification: In Stamped Mode, the $10 row doesn't go to
Unattributed— it goes toCB1.Unattributedonly applies to rows that matched no bucket at all during stamping.
Examples
FAQs
Last updated
Was this helpful?


