Unit cost divides cloud spend by valid units of value
An increase in the monthly cloud bill from KRW 30 million to KRW 40 million does not, by itself, mean cost efficiency has deteriorated. If orders doubled over the same period, the cost of processing one order may have fallen. Conversely, an unchanged bill with fewer active customers or completed jobs probably indicates a worsening cost structure.
The monthly Cloud Bill shows only total spending. To understand how costs scale as a product grows, divide them by a Value Metric such as customers, orders, transactions, or completed tasks. In its simplest form: cloud unit cost = cloud costs included for the same period and scope ÷ valid units of value generated in that period and scope.
This formula has three assumptions. Costs and value units refer to the same product, period, and environment. Currency and exchange-rate conventions agree. Only valid units that meet the success, deduplication, and cancellation rules enter the denominator. It also excludes three things: total accounting cost of goods sold or operating expenses; costs for products or periods outside the scope; and undefined test, retry, or internal usage.
The formula is simple; the work lies in defining its numerator and denominator. The FinOps Foundation likewise explains that no single Unit Metric suits every organization and that metrics should be as close as possible to the user's actual workflow.[4]
First decide what counts as one unit
Cost per customer is not always the best metric. In B2B SaaS with large differences in customer usage, a customer-count denominator hides the cost differences between large and small customers. Cost per order is also difficult to interpret without a policy for search, cart, and failed-payment costs incurred before completion. Start the Value Metric with the decision you need to make now.
Cost per token or per GB is a Resource Efficiency Unit Metric useful for engineering optimization. Cost per customer, transaction, or resolved case is a Business Unit Metric closer to product and management decisions. AI analysis may start with cost per token, but extending it toward accepted outcomes or completed tasks better reflects actual value.
Business | Candidate Value Metric | Example successful unit | Supporting metrics |
|---|---|---|---|
| Subscription SaaS | Active customers, active tenants, successful core workflows | Paid tenant actually using a core feature during the month | Tasks, storage, and users per tenant |
| Commerce | Paid orders, fulfilled orders, transaction value | Fulfilled orders excluding duplicates and cancellations | Items per order, return rate, traffic |
| Payments·Fintech | Authorized, settled, or successful transactions | Successful transaction within the system responsibility scope | Authorization failures, retries, transaction value bands |
| Data platform | Completed jobs, GB processed, successful queries | Production job completed without errors | Scan bytes, CPU time, latency |
| Business automation | Completed tasks, processed documents, resolved cases | Completed task requiring no human reprocessing | Exceptions, rework, human-review rate |
| AI service | Accepted responses, completed Agent Actions, resolved cases | Used outcome meeting quality conditions | Tokens, model calls, retries, tool calls |
From cost drivers to ongoing control — Break down spending by workload and resource, assess each change and carry budget guardrails into operations.
Write the Metric Contract first
The calculation contract matters more than the metric's name. A commerce example uses metric_id ORDER_FULFILLED_V1, decision_question “Does infrastructure cost scale efficiently as orders grow?”, and scope commerce-product-a / production / KR. Its denominator_name is fulfilled orders, business_event is order_fulfilled, success_condition is fulfillment_status = completed, and dedupe_key is order_id.
List canceled orders, test orders, duplicate events, internal operations accounts, and confirmed fraudulent orders under denominator_exclusions. Set period to calendar_month, timezone to Asia/Seoul, and late_event_policy to “restate the previous period through the third business day of the next month.” Assign business_definition to Product, event_quality to Data Engineering, and cost_definition to FinOps or Platform.
The resulting denominator is: valid value units = count of unique Business Events meeting the success condition. This assumes that dedupe_key consistently identifies the same unit, the event's success state is finalized after period end, and a policy covers restatement for late events. Exclude raw API-call counts, automatic retries, duplicate messages, test and internal traffic, and events whose success remains unconfirmed.
When the denominator definition changes, recalculate historical values under the same version or separate the Metric Versions.
Separate invoiced amounts from the operational cost view
As of August 22, 2026, the latest FOCUS Specification is 1.4.[6] FOCUS normalizes terminology and schemas across providers' billing data. It currently defines four datasets; the Cost and Usage Dataset is central to unit-cost calculations.[2]
The numerator usually has two possible cost views: BilledCost and EffectiveCost. This article pairs the cost metric and period basis according to the analysis purpose. Using EffectiveCost does not automatically make a figure an accrual expense or cost of goods sold in financial statements. FOCUS standardizes operational and billing analysis; it does not determine a company's accounting policies.
Distinguish the latest FOCUS version from the version a CSP actually exports. Current official adoption information mainly lists FOCUS 1.2 support for AWS, Azure, and Google Cloud. Preserve source_provider, source_export_name, source_focus_version, and ingested_at in the internal data model. Also retain charge_period_start/end, billing_period_start/end, billed_cost, effective_cost, billing_currency, service_category, service_name, resource_id, sub_account_id, region, tags, allocated_method_id, and allocated_resource_id. FOCUS 1.4 can be the target internal canonical schema, but do not populate absent 1.4 fields as though the source had supplied them.
- BilledCost
- Cost for reconciliation against the actual invoice. Suitable for invoice validation, payments, and monthly cash outflows.
- EffectiveCost
- Cost allocated to when resources are used or commitments consumed. Reflecting prepayments and commitments in actual usage rows makes it better suited to product allocation and consumption trends.
- Product and service operating unit cost
- Use EffectiveCost with ChargePeriodStart/End as the period basis.
- Invoice and payment reconciliation
- Use BilledCost with BillingPeriodStart/End as the period basis.
- Commitment and unused analysis
- Examine EffectiveCost and commitment status by Charge Period.
- Financial reporting
- Use a separate Finance-approved mapping under the accounting policy.
Classify costs as Direct, Shared, Idle, and Unallocated
Keep two classification axes separate. The first asks who a cost belongs to: Direct, Shared, Idle, Unallocated, or Excluded. The second identifies its technical category: Compute, Storage, Data·Network, Database, AI·Accelerator, Observability·Security, or other Platform costs.
A database cost may be Direct or Shared. An AI API cost may be linked directly to a customer's request or come from a common model endpoint used by several products. Adding Database, Network, or AI costs on top of Direct and Shared costs can count the same amount twice. Every cost row must have one attribution state and one technical category.
Total cost in the analysis scope = Direct + Shared + Idle + Unallocated + Excluded. This assumes that each row belongs to exactly one attribution state, all amounts use the same period, currency, and cost view, and credits, refunds, and corrections follow a consistent policy. Exclude labor, payment fees, and depreciation outside the billing export; uncollected costs from other vendors; and costs from other products or environments. This is a reconciliation equation for checking that billing data has not been lost. It does not automatically include every category in the unit-cost numerator.
Attribution state | Definition | Example | Default treatment |
|---|---|---|---|
| Direct Cost | Cost directly connected to a product, tenant, order, or task | Dedicated DB, tenant storage, model call with Event ID | Attribute directly to the target |
| Shared Cost | Cost consumed by several products or customers | Common cluster, load balancer, shared DB, logging | Allocate by usage or proxy |
| Idle Cost | Paid capacity not currently processing value units | Unused commitments, empty nodes, orphan resources | Show a separate pool and choose a policy |
| Unallocated Cost | Cost lacking an owner, product, or allocation key | Missing tags, unidentified accounts, mapping failures | Disclose amount and rate |
| Excluded Cost | Cost intentionally outside this metric | Tax, employee SaaS, one-time migration | Record the reason and a separate total |
Show attributed and reconciled unit costs separately
Keep currently attributable costs distinct from amounts that distribute unallocated costs by policy. Attributed cost = Direct Cost + Allocated Shared Cost + Included Idle Cost. Attributed unit cost = attributed cost ÷ valid value units. This assumes documented shared and idle inclusion policies, identical cost and value-unit scopes, and a separate status instead of a calculation when the denominator is zero. Exclude Unallocated Cost with no allocation basis yet, explicitly excluded costs, and non-cloud costs included only in accounting COGS.
Attributed unit cost shows the costs that product and engineering teams can currently explain. Track unallocated costs separately: unallocated rate = Unallocated EffectiveCost ÷ Total EffectiveCost in the analysis scope. This assumes the same cost view and scope on both sides, exclusion of Excluded Cost from the Total EffectiveCost denominator, and consistent classification of tag or owner-mapping failures as Unallocated. Exclude Shared Cost intentionally retained in a central budget, invoice-only tax, and costs outside the billing export. The FinOps Foundation also identifies the proportion of costs that cannot be classified or allocated as a Cost Allocation KPI.[1]
For reports that must distribute all costs across products, provide a separate reconciled figure. Reconciled unit cost = (attributed cost + Unallocated Cost allocated by policy) ÷ valid value units. This assumes a recorded allocation decision and owner, preservation of the total before and after allocation, and either the same historical policy or separate versions. Exclude arbitrary equal allocations with no understood cause, costs of other organizations or products, and Excluded Cost.
Showing attributed and reconciled unit costs together separates cost efficiency from Allocation Data Quality.
Allocate Shared Cost using keys close to its causes
The basic formula is: Shared Cost allocated to a target = Shared Cost Pool × the target's Allocation Key ÷ the sum of all targets' Allocation Keys. This assumes a reasonable causal connection between the key and cost, keys collected for the same period and in the same units, and allocations totaling 100% for each pool. Exclude targets without keys, periods with substantial missing data, and central overhead whose allocation adds little decision value.
The FinOps Foundation describes using CMDB, observability, and utilization data alongside billing metadata such as accounts, projects, and tags for finer shared-cost allocation.[1] A fixed ratio, proportional allocation, proxy, or central budget may suit different shared costs. The table gives examples of keys chosen for their connection to cost rather than convenience.
Cost Pool | Preferred Allocation Key | Shortcut to avoid |
|---|---|---|
| Shared Compute·Containers | CPU-seconds, Memory GB-seconds, Request Runtime | Equal weighting by request count alone |
| Shared Database | Query CPU, I/O Byte, Storage Byte-month, Query Runtime | Connection count alone |
| Network·Data Transfer | Transferred bytes, source-destination path, request count | Overall cloud-spend ratio alone |
| Object Storage | GB-month, read/write operations, retrieval bytes | File count alone |
| Logging·Tracing | Log ingest bytes, spans, metric cardinality | Equal allocation by service count |
| Shared Security | Protected requests, hosts, endpoints, traffic | Equal allocation across products |
| Managed AI API | Input, output, cached tokens, calls, and retries by model | API-call count alone |
| GPU·Accelerator | Accelerator-seconds, allocated memory, batch runtime | Equal weighting by job count alone |
| Common Support·Platform | Direct-cost ratio, active workloads, agreed fixed ratios | Arbitrary ratios without evidence |
Data·Network, Database, and AI·Accelerator costs
Transfer volume alone does not explain network costs. The path matters: Internet Egress, inter-region and inter-availability-zone transfers, NAT·Gateway Processing, and CDN Origin Transfer may incur different costs.[3] Where possible, retain the grain of source_scope, destination_scope, traffic_class, bytes_transferred, request_count, transfer_cost, processing_cost, and business_event_id. Attribute large batch or replication traffic that cannot be linked to orders or transactions to its job or data product first, rather than dividing it by order count.
A tenant-dedicated database is relatively easy to treat as Direct Cost. Splitting a shared database solely by query count can make a lightweight lookup and a large scan appear equally expensive. Combine query runtime, CPU, read/write I/O, storage, backup, and replica usage where possible. If observation costs outweigh allocation accuracy, select the main cost drivers and record that limitation.
For managed model APIs, the model, input tokens, output tokens, cached tokens, retries, and batch usage can drive cost. For owned GPUs, distinguish accelerator occupancy, actual compute time, allocated memory, batch throughput, and idle time. Full AI unit cost includes more than model calls. Depending on scope, include embeddings, vector databases, retrieval, tool calls, moderation, logging, and retries required by the task. Tokens measure resource consumption; pair them with an outcome-oriented Business Metric such as successful support sessions, accepted documents, or completed Agent Actions.
Do not call all Idle Cost waste
Unused capacity is not always removable. Idle includes headroom for failures or traffic bursts, warm standby for recovery, unused commitments, minimum scale-out nodes, baseline development and validation capacity, and orphan resources without owners.
Headroom and warm standby may be planned costs required for reliability. Unused commitments and orphan resources may instead warrant improvement. FOCUS provides states such as CommitmentDiscountStatus = Unused to identify unused commitment costs.[2]
Apply one of the three policies below to Idle Cost. Quietly spreading undecided idle costs across orders or customers mixes actual product efficiency with organizational purchasing and capacity-planning problems.
- Product attribution
- Apply to capacity reserved for the product’s reliability and recovery needs. Mark it as Included Idle Cost.
- Central efficiency pool
- Apply to unused commitments jointly owned by several products. Report a separate Idle KPI.
- Attribution to the causal owner
- Apply where a specific team or product clearly overprovisioned. Allocate it to that target.
Distinguish Fixed, Variable, and Step-fixed costs
Usage-based cloud billing does not make every cost fully variable. Classify cost behavior into four types.
Variable Unit Cost = Variable Cost ÷ valid value units. Fixed Cost Absorption = (Period-fixed Cost + Step-fixed Cost) ÷ valid value units. Total Unit Cost = Variable Unit Cost + Fixed Cost Absorption. This assumes consistent cost behavior within the period, documented thresholds for step-fixed capacity increases, and separation of one-time and recurring costs. Exclude future unit prices after the next capacity expansion, discounts not yet contracted, and accounting classifications of fixed and variable costs.
Average unit cost also differs from the marginal cost of the next order. With spare capacity, more orders may barely change costs until a node or database-tier upgrade pushes unit cost upward again. A supporting formula for growth is: incremental unit cost = increase in Included Cost between periods ÷ increase in valid value units between periods. This assumes comparable architecture, pricing, and allocation versions; a positive increase in value units; and separate removal or explanation of corrections and exchange-rate effects. Exclude one-time migrations or large reprocessing jobs, periods with major product-mix changes, and periods with different reliability or quality conditions.
- Variable Cost
- Costs responding relatively continuously to units, such as requests, runtime, transfer volume, or tokens.
- Step-fixed Cost
- Costs fixed within a band and rising at a threshold, such as DB instances, minimum nodes, or dedicated clusters.
- Period-fixed Cost
- Base support fees or fixed platform costs for the period.
- One-time Cost
- Nonrecurring costs such as migration, initial backfill, or large-scale reindexing.
Normalize periods for monthly comparisons
A calculated unit cost can still produce a misleading trend when period definitions differ. Normalize the ten items below.
FOCUS 1.4 explicitly addresses correction handling and billing-period status, but provider export support varies by version and implementation.[6] Check the source's correction behavior and data completeness during ingestion.
- Timezone
- Convert costs and Business Events to the same timezone.
- Partial month
- Compare complete dates only or mark a Partial Period.
- Charge and Billing Periods
- Use Charge Period for operations and Billing Period for invoice reconciliation.
- Currency
- Convert to one currency and record the FX source and date.
- Credits and refunds
- Decide whether to restate the original usage period or recognize the occurrence month.
- Late events
- Record the recalculation deadline and snapshot version.
- Commitment
- Do not mix BilledCost at purchase with EffectiveCost at consumption.
- One-time work
- Separate it from the recurring run rate.
- Tax
- State whether baseline Cloud Unit Cost includes it.
- Quality
- Interpret changes alongside success rate, latency, and error rate.
Read growth and cohorts alongside the average
Lower overall cost per customer may simply reflect an influx of low-usage customers. Higher unit cost may reflect more large customers or greater use of expensive features. Separate at least the six cohort dimensions below.
Do not take a simple average of cohort unit costs. Overall unit cost = sum of all cohort costs ÷ sum of all cohort valid units. This assumes non-overlapping cohorts covering the full scope, a common metric definition, and matching cost views, currencies, and periods. Exclude arithmetic averages of cohort unit costs, combinations of metrics with different denominators, and cohorts using different success conditions. The FinOps Foundation likewise emphasizes trends within a product, cohort, or defined scope rather than simplistic comparisons across entire organizations.[4]
Explain changes through seven drivers: provider rates and discounts, usage per unit, customer or product mix, architecture, idle capacity and headroom, shared-cost allocation, and tag or business-event data quality. Lower cost alone does not prove successful optimization. Guardrails for latency, error rate, availability, security, and outcome quality must also hold.
- New and existing customers
- Check for high onboarding and initial-loading costs.
- Plan and customer size
- Check whether pricing reflects large-customer usage and costs.
- Region
- Check differences in data movement and regional architecture.
- Product version
- Check whether new features changed unit costs.
- Usage band
- Check whether small customers and heavy users have different cost drivers.
- AI model and quality tier
- Check whether a higher-performance model balances its cost with improved outcomes.
Cloud Unit Economics Template
The template has four parts: Metric Contract, Cost Pool Register, period results dataset, and mandatory reconciliation checks. Fill in the eleven field groups below for the Metric Contract.
Start the period results dataset with period, scope, cohort, metric_version, and valid_value_units. Add direct_effective_cost, allocated_shared_cost, included_idle_cost, attributed_cost, unallocated_cost, excluded_cost, and total_effective_cost. Follow with attributed_unit_cost, reconciled_unit_cost, variable_unit_cost, fixed_cost_absorption, and unallocated_rate. Finish with allocation_version, source_focus_version, currency, availability_guardrail, latency_guardrail, quality_guardrail, and data_closed_at.
- Metric identity
- Record metric_id, metric_version, decision_question, and target_reader.
- scope
- Record product, environment, region, customer_segment, and included_services.
- value_metric
- Record denominator_name, business_event, success_condition, dedupe_key, exclusions, and late_event_policy.
- period
- Record grain(daily | weekly | monthly), timezone, charge_period_rule, and billing_period_rule.
- cost_view
- Set operational_numerator to EffectiveCost and invoice_numerator to BilledCost. Record source_focus_version, billing_currency, and fx_policy.
- cost_inclusions
- Record whether direct, shared, idle, data_network, database, and ai_accelerator are included.
- cost_exclusions
- Record tax, one_time, non_cloud, and other exclusions.
- allocation
- Record version, shared_pool_rules, idle_policy, and unallocated_policy.
- restatement
- Record correction_handling, close_date, and historical_recalculation.
- guardrails
- Record availability, latency, error_rate, quality, and security conditions.
- owners
- Assign business_metric, billing_data, allocation, and approval owners.
pool_id | Cost category | Technical category | Amount basis | Fixed behavior | Allocation Key | Inclusion |
|---|---|---|---|---|---|---|
| CP-001 | Direct | Compute | EffectiveCost | Variable | direct tag | INCLUDE |
| CP-002 | Shared | Database | EffectiveCost | Step-fixed | query CPU·I/O | INCLUDE |
| CP-003 | Shared | Network | EffectiveCost | Variable | transferred bytes | INCLUDE |
| CP-004 | Idle | Compute | EffectiveCost | Step-fixed | reliability policy | REVIEW |
| CP-005 | Unallocated | Mixed | EffectiveCost | Mixed | none | DISCLOSE |
| CP-006 | Excluded | Tax·One-time | BilledCost or separate ledger | Mixed | none | EXCLUDE |
Mandatory reconciliation checks
Pass the nine checks below before publishing each period's results. If any check fails, mark that period with a separate status and exclude its unit cost from trend comparisons.
- Cost Reconciliation
- Direct + Shared + Idle + Unallocated must equal Total EffectiveCost.
- Shared Allocation
- Allocation percentages must total 100% for every shared pool.
- Metric Completeness
- The event source must match aggregated valid units.
- Scope Alignment
- Product, environment, and region must match for costs and denominator.
- Period Alignment
- Costs and events must use the same period and timezone.
- Version Control
- Record metric, allocation, and source FOCUS versions.
- Unallocated Disclosure
- Disclose the unallocated amount and rate.
- Guardrail
- Compare reliability and quality conditions before and after cost improvements.
- Restatement
- Record whether corrections change historical values.
Worked example
These illustrative values demonstrate the calculation structure. period is 2026-07, scope is Product A / Production / KR, value_metric is fulfilled orders, and valid_value_units is 120,000. direct_effective_cost is KRW 18,000,000; allocated_shared_cost is KRW 5,400,000; included_idle_cost is KRW 1,200,000; unallocated_effective_cost is KRW 1,800,000; and excluded_invoice_items is KRW 600,000.
Attributed cost = 18,000,000 + 5,400,000 + 1,200,000 = KRW 24,600,000. Attributed Cloud Unit Cost per order = KRW 24,600,000 ÷ 120,000 orders = KRW 205 per order. This assumes all costs are EffectiveCost for the July 2026 Charge Period, orders were fulfilled in the same Asia/Seoul period with duplicates, cancellations, and tests excluded, and shared-cost ratios follow a preapproved Allocation Version. Exclude KRW 1,800,000 in unallocated costs, KRW 600,000 in invoice-only exclusions, labor, payment fees, customer-support costs, and accounting COGS adjustments.
Unallocated rate = KRW 1,800,000 ÷ KRW 26,400,000 ≈ 6.8%. Total EffectiveCost of KRW 26,400,000 is the sum of Direct, Shared, Idle, and Unallocated costs. Invoice-only exclusions are outside the denominator. Exclude tax, non-cloud costs, and costs from other products or environments.
If Finance, Product, and Engineering approve allocating all KRW 1,800,000 of unallocated cost to this product, calculate a separate reconciled figure. Reconciled Cloud Unit Cost per order = KRW 26,400,000 ÷ 120,000 orders = KRW 220 per order. Presenting both the attributed KRW 205 and reconciled KRW 220 distinguishes explainable product operating costs from Allocation Data Quality issues.
Keep Cloud Unit Cost separate from accounting cost
Cloud Unit Cost is an operational and management metric connecting technical costs to units of product value. It can inform pricing and profitability analysis, but it is not itself accounting cost of goods sold or gross profit. The FinOps Foundation describes its support for margin, pricing, and forecasting decisions while distinguishing its role from separate financial metrics.[4]
Depending on company policy, accounting costs may add or differently recognize support and operations labor, payment and messaging fees, external SaaS charges, owned-equipment depreciation, intangible assets and development costs, contractual credits and commitments, taxes, and shared administration expenses.[5] Do not simply rename Cloud Unit Cost as COGS per Customer or Gross Margin without Finance approval.
If the two must be connected, maintain a separate mapping. Set operational_metric to Cloud Unit Cost, finance_metric to Cloud COGS per Unit, mapping_status to Finance approval required, and cloud_cost_source to FOCUS EffectiveCost. Record additional_cogs_items, excluded_cloud_items, accounting_period, and accounting_policy_owner.
Explain unit-cost changes beyond the monthly bill
Cloud Unit Economics does not aim to reduce every cloud cost unconditionally. If cost per order increases, distinguish improved model quality, more large customers, database inefficiency, network paths, and unused commitments. Higher spending may be a reasonable investment when it delivers more value at higher quality. Conversely, a smaller bill with worse errors or latency is difficult to call good optimization.
There is no need to allocate every company cost perfectly at the outset. Start with one product, one Value Metric, and one month of data. Keep four rules from the beginning: document success, deduplication, and exclusion conditions for the denominator; distinguish Direct, Shared, Idle, and Unallocated costs; disclose unallocated costs; and read cost trends alongside Growth, Cohort, and Reliability.
Unit cost is an operating model that explains how product growth connects to infrastructure cost, rather than just a number.



