FinOps Open Cost and Usage Specification
FinOps Open Cost and Usage Specification
Specification
Version
v0.5 Candidate Release
⚡ Warning
Copyright © 2023 - FinOps Open Cost and Usage Specification (FOCUS) a Series of the Joint Development
Foundation Projects, LLC. Linux Foundation trademark, and document use rules apply.
This is a candidate for release as a publication. This is not a published release of the FinOps Open Cost and Usage
Specification.
This document was published by the FOCUS Working Group as a Working Draft using the Recommendation track.
Publication as a Candidate Release does not imply endorsement by the FOCUS Project and its Members.
This document should be considered a draft document and may be updated, replaced or obsoleted by other
documents at any time. It is inappropriate to cite this document as other than work in progress.
This document was produced by a group operating under the W3C Patent Policy. FOCUS maintains a public list of
any patent disclosures made in connection with the deliverables of the group; that page also includes instructions
1 of 33
for disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains
Essential Claim(s) must disclose the information in accordance with section 6 of the W3C Patent Policy.
Abstract
FOCUS is an open-source specification for cloud billing data. It defines a common schema for billing data, aligns
terminology with the FinOps Framework and defines a minimum set of requirements for billing data. The
specification provides clear guideline for billing data generators to produce FinOps-serviceable data. The
specification enables FinOps practitioners to perform common FinOps capabilities such as chargeback, cost
allocation, budgeting and forecasting etc. using a generic set of instructions, regardless of the origin of the FOCUS
compatible dataset.
2 of 33
Contributors
Thanks to the following FOCUS members for their contributions to this work.
3 of 33
Table of Contents
1. Introduction
1.1. Background and History
1.2. Intended Audience
1.3. Scope
1.4. Design Notes
1.5. Typographic Conventions
1.6. Conformance Checkers and Validators
2. Dimensions
2.1. Availability Zone
2.2. Billing Account ID
2.3. Billing Account Name
2.4. Billing Currency
2.5. Billing Period End
2.6. Billing Period Start
2.7. Charge Period End
2.8. Charge Period Start
2.9. Charge Type
2.10. Invoice Issuer
2.11. Provider
2.12. Publisher
2.13. Region
2.14. Resource ID
2.15. Resource Name
2.16. Service Category
2.17. Service Name
2.18. Sub Account ID
2.19. Sub Account Name
3. Metrics
3.1. Amortized Cost
3.2. Billed Cost
4. Attributes
4.1. Column Naming Convention
4.2. Currency Code Format
4.3. Date/Time Format
4.4. Null Handling
5. Glossary
6. Appendix
6.1. Grouping constructs for resources and/or services
6.2. Origination of Cost Data
4 of 33
1. Introduction
This section is non-normative.
FOCUS aims to establish a community-driven specification for consumption-based billing data. Due to the
lack of a broadly adopted specification, infrastructure and services providers have resorted to proprietary
billing schemas and terminology. However, the lack of conformance amongst the billing data generators has
forced FinOps practitioners to employ disparate, best-effort schemes which each practitioner must develop
individually for each provider in order to perform essential FinOps capabilities such as chargeback, cost
allocation, budgeting and forecasting.
The FOCUS specification's schema definition and FinOps aligned terminology provide a clear guide for
producing FinOps-serviceable billing datasets. Datasets conforming to FOCUS enable FinOps practitioners to
perform common FinOps capabilities, like the ones mentioned above, using a generic set of instructions,
regardless of the origin of the dataset.
This project is sponsored by the FinOps Foundation. This work initially started under the Open Billing
working group under the FinOps Foundation. The decision was made in Jan 2023 to begin to migrate the
work to a newly formed project under the Linux Foundation called the FinOps Open Cost and Usage
Specification (FOCUS) to better support the creation of a specification.
Billing data generators: Infrastructure and services providers that bill based on consumption, such as
(but not limited to):
Cloud Service Providers (CSPs)
Software as a Service (SaaS) platforms
Managed Service Providers (MSPs)
Internal infrastructure and service platforms
FinOps tool providers: Organizations that provide tools to assist with FinOps
FinOps practitioners: Organizations and individuals consuming billing data for doing FinOps
1.3. Scope
The FOCUS working group will develop an open-source specification for billing data. The schema will define
data dimensions, metrics, a set of attributes about billing data, and a common lexicon for describing billing
data.
While the schema, naming, terminology and attributes of many providers were reviewed during
development, this specification aims to be provider-neutral. In some cases, the approach may closely
resemble one or more provider's implementation, while in other cases, the approach might be new. In all
cases, the FOCUS group (community composed of FinOps practitioners, Cloud and SaaS providers and
FinOps vendors) will attempt to prioritize alignment with the FinOps Framework and Capabilities.
The FOCUS group working on the specification aims to work backwards from essential FinOps capabilities
that practitioners need to perform to prioritize the dimensions, metrics and the attributes of the billing data
that should be defined in the specification to fulfill that capability. Some of the enabled capabilities will be
documented in the Appendix: FinOps Capabilities Enabled by FOCUS (TODO).
1.4.3. Extensibility
The initial specification aims to introduce a common schema and terminology for billing datasets produced
by Cloud Service Providers (CSPs). The specification however aims to be extensible to SaaS products and
other types of cost datasets. Future versions of the specification will look to expand the content to support a
broader set of prioritized FinOps capabilities.
An implementation of this specification is not compliant if it fails to satisfy one or more of the "MUST",
"MUST NOT", "REQUIRED", "SHALL", or "SHALL NOT" requirements defined in the specification. Conversely,
an implementation of the specification is compliant if it satisfies all the "MUST", "MUST NOT", "REQUIRED",
"SHALL", and "SHALL NOT" requirements defined in the specification.
6 of 33
2. Dimensions
The FOCUS specification defines a group of columns that provide qualitative values (such as dates,
resource, and provider information). These columns are categorized to as 'dimensions' within the dataset
and are needed to serve many FinOps capabilities. You can use dimensions to categorize, filter, and reveal
details in your data when grouped with 'metrics', which are the quantitative (numeric) values. The
Dimensions are presented in Alphabetical order.
The AvailabilityZone column SHOULD be present in the billing data. This column MUST be of type String and
MAY contain null values.
2.1.1. Column ID
AvailabilityZone
Availability Zone
2.1.3. Description
A provider assigned identifier for a physically separated and isolated area within a Region that provides high
availability and fault tolerance.
Constraint Value
0.5
7 of 33
2.2. Billing Account ID
A billing account is a container for resources and/or services that are billed together in an invoice. Billing
accounts are commonly used for scenarios like grouping based on organizational constructs, invoice
reconciliation and cost allocation strategies.
The BillingAccountId column MUST be present in the billing data. This column must be of type String and
MUST NOT contain null values. BillingAccountId MUST be a globally unique identifier within a provider.
See Appendix: Grouping constructs for resources and/or services for details and examples of the different
grouping constructs supported by FOCUS.
2.2.1. Column ID
BillingAccountId
Billing Account ID
2.2.3. Description
Constraint Value
0.5
8 of 33
A Billing Account Name is a display name assigned to a billing account.
The BillingAccountName column MUST be present in the billing data. This column MUST be of type String.
The BillingAccountName MUST NOT be null if a display name can be assigned to a billing account.
BillingAccountName MUST be unique within a customer when a customer has more than one billing account.
See Appendix: Grouping constructs for resources and/or services for details and examples of the different
grouping constructs supported by FOCUS.
2.3.1. Column ID
BillingAccountName
2.3.3. Description
Constraint Value
0.5
The BillingCurrency column MUST be present in the billing data. BillingCurrency MUST match the currency
used in the invoice generated by the invoice issuer. This column must be of type String and MUST NOT
contain null values. BillingCurrency MUST conform to FOCUS Currency Code Format requirements.
9 of 33
2.4.1. Column ID
BillingCurrency
Billing Currency
2.4.3. Description
Constraint Value
0.5
Billing period represents the time window for which an organization has or will receive an invoice for. The
time window is inclusive of the start date and exclusive of the end date.
Billing Period End represents the end date and time of the billing period.
The BillingPeriodEnd column MUST be present in the billing data. This column MUST be of type Date/Time
and MUST NOT contain null values. BillingPeriodEnd column MUST conform to FOCUS Date/Time Format. The
sum of the Billed Cost metric for line items in a given billing period MUST match the sum of the invoices
received for that billing period for a billing account.
2.5.1. Column ID
BillingPeriodEnd
10 of 33
2.5.2. Display Name
2.5.3. Description
Constraint Value
0.5
Billing Period Start represents the start date and time of the billing period.
The BillingPeriodStart column MUST be present in the billing data. This column MUST be of type Date/Time
and MUST NOT contain null values. BillingPeriodStart column MUST conform to FOCUS Date/Time Format.
The sum of the Billed Cost metric for line items in a given billing period MUST match the sum of the invoices
received for that billing period for a billing account.
2.6.1. Column ID
BillingPeriodStart
11 of 33
2.6.3. Description
Constraint Value
0.5
Charge Period End represents the end date and time of the charge period.
The ChargePeriodEnd column MUST be present in the billing data. This column MUST be of type Date/Time
and MUST NOT contain null values. ChargePeriodEnd column MUST conform to FOCUS Date/Time Format.
2.7.1. Column ID
ChargePeriodEnd
2.7.3. Description
12 of 33
2.7.4. Content constraints
Constraint Value
0.5
Charge Period Start represents the starting date and time of the charge period.
The ChargePeriodStart column MUST be present in the billing data. This column MUST be of type Date/Time
and MUST NOT contain null values. ChargePeriodStart column MUST conform to FOCUS Date/Time Format.
2.8.1. Column ID
ChargePeriodStart
2.8.3. Description
Constraint Value
13 of 33
Constraint Value
0.5
The ChargeType column MUST be present and MUST NOT be null or empty. This column is of type String and
MUST be one of the allowed values.
See Appendix: Charge Type for details about allowed values and governance criteria for this dimension.
2.9.1. Column ID
ChargeType
Charge Type
2.9.3. Description
Indicates whether the record represents an upfront or recurring fee, cost of usage that already occurred, an
after-the-fact adjustment (e.g., credits), or taxes.
Constraint Value
14 of 33
Constraint Value
Allowed values:
Value Description
Adjustment Any adjustments that are applied after the original usage or purchase record.
Adjustments may be related to multiple charges.
Purchase Charges for the acquisition of a service or resource bought upfront or on a recurring
basis.
Tax Applicable taxes that are levied by the relevant authorities. Tax charges may vary
depending on factors such as the location, jurisdiction, and local or federal regulations.
Usage Charges based on the quantity of a service or resource that was consumed over a given
period of time.
0.5
An Invoice Issuer is an entity responsible for invoicing for the resources and/or services consumed. It is
commonly used for cost analysis and reporting scenarios.
The InvoiceIssuer column MUST be present in the billing data. This column MUST be of type String and MUST
NOT contain null values.
See Appendix: Origination of cost data section for examples of Provider, Publisher and Invoice Issuer values
that can be used for various purchasing scenarios.
2.10.1. Column ID
InvoiceIssuerName
Invoice Issuer
2.10.3. Description
The name of the entity responsible for invoicing for the resources and/or services consumed.
0.5
2.11. Provider
A Provider is an entity that made the resources and/or services available for purchase. It is commonly used
for cost analysis and reporting scenarios.
The Provider column MUST be present in the billing data. This column MUST be of type String and MUST NOT
contain null values.
See Appendix: Origination of cost data section for examples of Provider, Publisher and Invoice Issuer values
that can be used for various purchasing scenarios.
2.11.1. Column ID
ProviderName
Provider
2.11.3. Description
The name of the entity that made the resources and/or services available for purchase.
Constraint Value
16 of 33
2.11.5. Introduced (version)
0.5
2.12. Publisher
A Publisher is an entity that produced the resources and/or services that were purchased. It is commonly
used for cost analysis and reporting scenarios.
The Publisher column MUST be present in the billing data. This column MUST be of type String and MUST
NOT contain null values.
See Appendix: Origination of cost data section for examples of Provider, Publisher and Invoice Issuer values
that can be used for various purchasing scenarios.
2.12.1. Column ID
PublisherName
Publisher
2.12.3. Description
The name of the entity that produced the resources and/or services that were purchased.
Constraint Value
0.5
2.13. Region
17 of 33
A Region is a provider assigned identifier for an isolated geographic area where a resource is provisioned in
and/or a service is provided from. Region is commonly used for scenarios like analyzing cost and prices
based on where resources are deployed.
The Region column MUST be present in the billing data. This column MUST be of type String and MUST NOT
contain null values. Region values MUST be consistent within the provider and MUST be the same values
used to indicate the region when provisioning or purchasing the resource or service.
2.13.1. Column ID
Region
Region
2.13.3. Description
Isolated geographic area where a resource is provisioned in and/or a service is provided from.
Constraint Value
0.5
2.14. Resource ID
A Resource ID is an identifier assigned to a resource by the provider. The Resource ID is commonly used for
cost reporting, analysis, and allocation scenarios.
The ResourceId column MUST be present in the billing data. This column MUST be of type String. The
ResourceId value MAY be a nullable column as some cost data rows may not be associated with a resource.
ResourceId MUST appear in the cost data if an identifier is assigned to a resource by the provider.
ResourceId SHOULD be a fully-qualified identifier that ensures global uniqueness within the provider.
18 of 33
2.14.1. Column ID
ResourceId
Resource ID
2.14.3. Description
Constraint Value
0.5
The ResourceName column MUST be present in the billing data. This column MUST be of type String. The
ResourceName value MAY be a nullable column as some cost data rows may not be associated with a
resource or because a display name cannot be assigned to a resource. ResourceName MUST NOT be null if a
display name can be assigned to a resource. Resources not provisioned interactively or only have a system
generated ResourceId MUST NOT duplicate the same value as the ResourceName.
2.15.1. Column ID
ResourceName
19 of 33
Resource Name
2.15.3. Description
Constraint Value
0.5
The ServiceCategory column MUST be present and MUST NOT be null or empty. This column is of type String
and MUST be one of the allowed values.
2.16.1. Column ID
ServiceCategory
Service Category
2.16.3. Description
20 of 33
2.16.4. Content Constraints
Constraint Value
Allowed values:
Databases Database platforms and services that allow for storage and querying of
data.
Other New or emerging services that do not align with an existing category.
0.5
The ServiceName column MUST be present in the cost data. This column MUST be of type String and MUST
NOT contain null values.
2.17.1. Column ID
ServiceName
Service Name
2.17.3. Description
An offering that can be purchased from a provider (e.g., cloud virtual machine, SaaS database, professional
services from a systems integrator).
Constraint Value
0.5
The SubAccountId column MUST be present in the billing data. This column MUST be of type String. If a
provider supports a sub account construct, that value MUST appear in this column. If a provider does not
support a sub account construct (only has a billing account) or does support a sub account construct, but the
22 of 33
charge does not apply to a sub account, the SubAccountId column MUST be null.
See Appendix: Grouping constructs for resources and/or services for details and examples of the different
grouping constructs supported by FOCUS.
2.18.1. Column ID
SubAccountId
Sub Account ID
2.18.3. Description
An ID assigned to a grouping of resources and/or services, often used to manage access and/or cost.
Constraint Value
0.5
The SubAccountName column MUST be present in the billing data. This column MUST be of type String. If a
provider supports setting a display name for sub accounts, that value MUST appear in this column. If a
provider does not support a sub account construct (only has a billing account) or does support a sub account
construct, but the charge does not apply to a sub account, the SubAccountName column MUST be null.
See Appendix: Grouping constructs for resources and/or services for details and examples of the different
23 of 33
grouping constructs supported by FOCUS.
2.19.1. Column ID
SubAccountName
2.19.3. Description
A name assigned to a grouping of resources and/or services, often used to manage access and/or cost.
Constraint Value
0.5
3. Metrics
The FOCUS specification defines a group of columns that provide numeric values. These columns are
categorized to as 'metrics' within the dataset and are needed to serve many FinOps capabilities. Metric
columns in the dataset allow for aggregation operations such as arithmetic operations (sum, multiplication,
averaging etc.) and statistical operations. When combined with dimensions (which are qualitative value
columns), metrics reveal details in your data.
Amortized cost represents the sum of the amortized upfront fees, amortized recurring fees, and the usage
cost of the line item. This column is often used to show spending trends that include on demand rates,
24 of 33
effective commitment-based discount rates, recurring commitments, as well as amortization of upfront fees.
The fee and upfront amortization portion of this column's value should be proportional to the number of
units for the line item and the time granularity of the data. The currency for the value specified in Amortized
Cost can be found in the Billing Currency column. The aggregated Amortized Cost for a billing period may
not match the charge received on the invoice for the same billing period.
Practitioners are faced with two main challenges with respect to this metric:
1. Practitioners need to amortize upfront fees over the duration of the commitment and distribute those
fees to the appropriate reporting groups (e.g. tags, resources).
2. Many commitment based discount constructs include a recurring expense for the commitment for
every billing period and must distribute this cost to the resources using the commitment. This forces
reconciliation between the initial commitment line item per period and the actual usage line items.
The AmortizedCost column MUST be present in the billing data. This column MUST be a numeric value of
type Decimal and MUST NOT contain null values.
3.1.1. Column ID
AmortizedCost
Amortized Cost
3.1.3. Description
The cost inclusive of amortized upfront fees, amortized recurring fees, and the usage cost of the line item.
Providers should distribute the commitment purchase amount instead of including a line item at the
beginning of a period so practitioners do not need to manually distribute the fee themselves.
The amortization of the upfront charge should be amortized using a methodology determined by the
provider that reflects the needs of their customer base and is proportional with usage quantity and the time
granularity of the line item. Should a practitioner desire to amortize upfront fees using a different approach,
the practitioner can do so using the Billed Cost for the line item representing the initial purchase.
Constraint Value
25 of 33
Constraint Value
0.5
The BilledCost column MUST be present in the billing data. This column MUST be a numeric value of type
Decimal and MUST NOT contain null values. The aggregated BilledCost for a billing period MUST match the
charge received on the invoice for the same billing period.
3.2.1. Column ID
BilledCost
Billed Cost
3.2.3. Description
A charge inclusive of negotiated discounts that a consumer would be charged for each billing period.
Constraint Value
26 of 33
Constraint Value
0.5
4. Attributes
Attributes are requirements that apply to the billing datasets. Requirements on data content can include
naming conventions, data types, formatting standardizations, etc. Attributes may introduce high-level
requirements for data granularity, recency, frequency, etc. Requirements defined in attributes are necessary
for servicing FinOps capabilities accurately using a standard set of instructions regardless of the origin of the
data.
All columns defined in FOCUS MUST follow the naming requirements listed below. Provider generated
columns SHOULD adopt these same naming requirements over time.
4.1.1. Attribute ID
ColumnNamingConvention
4.1.3. Description
4.1.4. Requirements
27 of 33
Column IDs MUST use Pascal case.
Column IDs MUST NOT use abbreviations.
Column IDs SHOULD NOT use acronyms.
Column IDs MUST be alphanumeric with no special characters.
Columns that have an ID and a Name MUST have the Id or Name suffix in the Column ID. Display
Name for a Column MAY avoid the Name suffix if it is considered superfluous
4.1.5. Exceptions
Identifiers will use the "Id" abbreviation since this is a standard pattern across the industry.
0.5
Columns that contain currency information in cost data following a consistent format reduces friction for
FinOps practitioners that consume the data for analysis, reporting, and other use cases.
All currency related columns defined in the FOCUS schema MUST follow the currency formatting
requirements listed below. Provider generated currency-related columns SHOULD adopt the same format
requirements over time.
4.2.1. Attribute ID
CurrencyCodeFormat
4.2.3. Description
4.2.4. Requirements
Currency related columns MUST be represented as a three-letter alphabetic code as dictated in the
governing document ISO 4217:2015.
28 of 33
4.2.5. Exceptions
None
0.5
Columns that provide date and time information conforming to specified rules and formatting requirements
ensure clarity, accuracy, and ease of interpretation for both humans and systems.
All date/time related columns, defined in the FOCUS specification, MUST be represented in UTC and follow
the ISO 8601 aligned formatting requirements listed below. Provider generated date/time related columns
SHOULD also be represented in UTC and conform to the ISO 8601 standard.
4.3.1. Attribute ID
DateTimeFormat
Date/Time Format
4.3.3. Description
Rules and formatting requirements for date/time related columns appearing in billing data.
4.3.4. Requirements
Date/time values MUST be in UTC (Coordinated Universal Time) to avoid ambiguity and ensure
consistency across different time zones.
Date/time values format MUST be aligned with ISO 8601 standard, which provides a globally
recognized format for representing dates and times (see ISO 8601-1:2019 governing document for
details).
Values providing information about a specific moment in time MUST be represented in the extended
ISO 8601 format with UTC offset ('YYYY-MM-DDTHH:mm:ssZ') and conform to the following guidelines:
Include the date and time components, separated with the letter 'T'
Use two-digit hours (HH), minutes (mm), and seconds (ss).
End with the 'Z' indicator to denote UTC (Coordinated Universal Time)
29 of 33
4.3.5. Exceptions
None
0.5
All columns defined in FOCUS MUST follow the null handling requirements listed below. Provider generated
columns SHOULD adopt these same null handling requirements over time.
4.4.1. Attribute ID
NullHandling
Null Handling
4.4.3. Description
4.4.4. Requirements
Columns MUST use NULL when there isn't a value that can be specified for a nullable column.
Columns MUST NOT use empty strings or placeholder values such as 'Not Set' or 'Not Applicable' in
columns, regardless of if the column allows nulls or not.
4.4.5. Exceptions
None
5. Glossary
This section is non-normative.
Resource:
Add definition
Service:
Add definition
6. Appendix
This section is non-normative.
Providers may support multiple levels of resource and/or service grouping mechanisms. FOCUS supports two
distinct levels of groupings that are commonly needed for FinOps capabilities like chargeback, invoice
reconciliation and cost allocation.
Billing account: A mandatory container for resources and/or services that are billed together in an
invoice. Billing accounts are commonly used for scenarios like grouping based on organizational
constructs, invoice reconciliation and cost allocation strategies.
Sub account: An optional provider-supported construct for organizing resources and services
connected to a billing account. Sub accounts are commonly used for scenarios like grouping based on
organizational constructs, access management needs and cost allocation strategies. Sub accounts
must be associated with a billing account as they do not receive invoices.
The table below highlights key properties of the two grouping constructs supported by FOCUS.
31 of 33
* For organizations that have multiple AWS Member Accounts within an AWS Organization, consolidated
billing is enabled by default and invoices are received at Management Account level. A Member Account can
be removed from AWS consolidated billing whereby the removed account receives independent invoices and
is responsible for payments.
Provider: The entity that made the resources and/or services available for purchase.
Publisher: The entity that produced the resources and/or services that were purchased.
Invoice Issuer: The entity responsible for invoicing for the resources and/or services consumed.
The value for each of these may be different depending on the various purchasing scenarios for resources
and/or services. Use cases for purchasing direct, via a Managed Service Provider (MSP), via a cloud
marketplace, and from internal service offerings were considered. The table below presents a few scenarios
to show how the value for each dimension may change based on the purchasing scenario.
Invoice
# Scenario Provider Publisher
Issuer
1.1 Purchasing cloud services directly Cloud Cloud service provider Cloud
from cloud provider service service
provider provider
1.2 Purchasing cloud services from the Cloud Cloud service provider Entity
cloud provider where the cloud service operating
region is operated by a 3rd party provider the region
for the
cloud
service
provider
2.1 Purchasing cloud services via MSP Managed Cloud service provider Managed
Service Service
Provider Provider
2.3 Purchasing labor services from Managed Managed Service Provider Managed
managed service provider Service Service
Provider Provider
32 of 33
Invoice
# Scenario Provider Publisher
Issuer
4.2 Purchasing SaaS software that Cloud Cloud service provider Cloud
additionally runs on your cloud service service
resources (in addition to #4.1) provider provider
5.3 Associated software license cost for Internal Company producing the Internal
use on an on-premise infrastructure product software product
platform (Where license cost is name name
presented separately in cost data)
33 of 33