Starting January 21, 2026, Google Cloud will make changes to the Billing section of the Google Cloud console, Cloud Billing export to BigQuery schema, and Cloud Marketplace API. These changes prepare for expanding the spend-based committed use discounts (CUD)s program and provide customers the following benefits:
- Simplified billing: Google Cloud will move away from using credits to offset costs. It will use discounted prices to represent savings from spend-based CUDs, which makes it easier for you to calculate the total cost of your CUDs and savings.
- Greater flexibility: This change will expand the scope for some spend-based CUDs. As a result, a larger portion of your usage might be eligible for discounts.
This change doesn't increase the total cost. For more information about this change, see Billing user interface.
What action is required?
Review these upcoming changes. Prepare to update any systems that rely on Cloud Billing export to BigQuery . For example, update any FinOps cost management reporting dashboards to ensure compatibility with the new schema before the mandatory change. You can also opt in early.
When do these changes take effect?
The changes will take effect on the following dates, depending on which scenario applies.
New customers
- If you create a Billing Account on or after July 15, 2025, the new billing model applies to you for spend-based CUDs in this list.
Customers without active spend-based CUDs in this list since July 15, 2024
- For Billing Accounts with no active spend-based CUDs in this list since July 15, 2024, the new model applies on July 15, 2025, at midnight US and Canadian Pacific Time (UTC-8).
Customers with active spend-based CUDs in this list since July 15, 2024
- For Billing Accounts with any active spend-based CUDs in this list on or after July 15, 2024, the new model applies on January 21, 2026 at midnight US and Canadian Pacific Time (UTC-8). You can opt in earlier, starting July 15, 2025. In that case, the new model applies when you click opt-in. Learn more about how to opt in
Resellers and customers with billing account hierarchies can find more details in the Do other CUDs change? section.
What is changing?
To support the new spend-based CUDs billing data model, the following changes will apply to affected spend-based CUDs. For details on how this impacts your bills, see the What is changing? section.
- Some existing CUDs cover more products.
- Simplify CUD fees: New CUD fee SKUs replace existing CUD fee SKUs. The price for these new SKUs is $1.
- Improve the billing UI: The Billing section of the Google Cloud console changes to better enable accurate cost management and optimization experiences for CUDs.
- The UI that you use to purchase CUDs today changes. You used to input an hourly commitment amount in terms of equivalent on-demand spend.
- Update the Marketplace Procurement API: The Marketplace Procurement API is updated to enable purchasing of CUDs in this new model.
- Expand Billing data export: The Billing export data columns change to reflect the new pricing metadata and monetization of spend-based CUDs.
- Track consumption mode prices more easily: A new metadata field, Consumption Model, represents the price of usage for a given SKU. Discounted prices at the appropriate Consumption Model represent the savings from spend-based CUDs. This new model replaces the use of "credits" that offset your list price usage rates.
- Purchasing new spend-based commitments will be unavailable for a few hours for customers during their migration. For customers who opt in early, Google Cloud displays a warning about this outage in the Billing section of the Google Cloud console. For customers who don't opt in early, this outage occurs when they are automatically migrated to the new model in January 2026.
- From 11 PM PST on July 14, 2025 to 12 AM PST on July 15, 2025, all customers will be unable to purchase new CUDs for one hour.
What is not changing?
Your applicable discount rate for SKUs already eligible for spend-based CUDs will remain the same. Your total costs won't increase if your usage behavior remains the same. However, your bill might decrease if you aren't fully utilizing your commitments but are using any of the newly added SKUs. Your contractual discounts are honored for the duration of your contract. Certain spend-based CUDs are not affected by this change at this time. Resource-based CUDs are also not affected by this change.
Change details
This section explains the changes that will occur with this CUDs expansion.
New SKUs added
After you opt in to the new model, SKUs for the following products are added to the scope of your Compute flexible CUDs, for example:
- Compute optimized H3 VMs for HPC workloads
- Compute Optimized H4D for HPC workloads
- Cloud Run (request-based billing during billed instance time), including Cloud Run functions
For more information, see Billing data and SKU updates for spend-based CUDs (April 2025 update).
New CUD fee SKUs
The existing CUD fee SKUs (example) are replaced with new SKUs. These SKUs are priced at $1/hr unlike the existing SKUs which are priced at a lower rate to indicate the CUD benefit. The CUD benefit is now reflected using the Consumption Model prices described in New consumption model metadata. This doesn't affect your costs.
For more information about new CUD SKUs, see New SKUs added to CUDs.
New consumption model metadata
For each SKU, a new metadata field, "Consumption Model", represents the price of usage for that SKU. This price applies when the system monetizes usage for this SKU under this particular consumption model. For example, if a 1-Year Flex CUD covers VM usage, then the "Consumption Model" of the usage has a value of "1 Year Flex CUD".
For more information, see Offers and consumption model IDs.
Cloud Billing export to BigQuery
In the Cloud Billing export to BigQuery standard, detailed and rebilling (reseller only) data export, we will add or change the following fields:
Field | Type | New or updated | Description |
---|---|---|---|
price |
Struct | Existing (no change in detailed or rebilling export, adding to standard export.) | Fields that describe the structure and value related to the prices charged for usage. |
price.list_price |
Numeric | New field | SKU list price per the default consumption model. |
price.effective_price_default |
Numeric | New field | SKU price per the default consumption model per the custom pricing in the contract linked to your Cloud Billing account. |
price.list_price_consumption_model |
Numeric | New field | SKU list price per the applicable consumption model. |
price.effective_price |
Numeric | Existing (description updated in detailed and rebilling export; adding to standard export.) | SKU price per the applicable consumption model per the custom pricing in the contract linked to your Cloud Billing account. |
price.tier_start_amount |
Numeric | Existing in detailed export, adding to standard export. | The lower bound number of units for a SKU's pricing tier. |
price.unit |
String | Existing in detailed export, adding to standard export. | The unit of usage in which the pricing is specified and resource usage is measured. |
price.pricing_unit_quantity |
Numeric | Existing in detailed export, adding to standard export. | The SKU's pricing tier unit quantity. |
cost_at_list |
Numeric | Existing field, description updated to reflect changes. | Cost at list price. |
cost |
Numeric | Existing field, description updated to reflect changes. | Cost per the applicable consumption model per the custom pricing in the contract linked to your Cloud Billing account. |
cost_at_effective_price_default |
Numeric | New | Cost per the default consumption model per the custom pricing in the contract linked to your Cloud Billing account. |
cost_at_list_consumption_model |
Numeric | New | Cost per the applicable consumption model. |
consumption_model |
Struct | New | Fields that describe the applicable consumption model. |
consumption_model.id |
String | New | The ID of the consumption model. |
consumption_model.description |
String | New | The description of the consumption model. |
Price export changes
Cloud Billing export to BigQuery will add or change these fields for pricing information:
Field | Type | New/Updated | Description (draft) |
---|---|---|---|
List_price |
Struct |
Updated | The list price of the Google Cloud or Google Maps Platform SKUs and SKU pricing tiers, in effect as of the pricing_as_of_time , with the default consumption model price. |
List_price.tieredrates.start_usage_amount |
Float |
Existing | Lower bound amount for a given list pricing tier, in pricing units. |
List_price.tieredrates.usd_amount |
Numeric |
Existing | The list price for the SKU, in US dollars. |
List_price.consumption_model_display_name |
String |
New | Display name for the consumption model. |
List_price.consumption_model_id |
String |
New | ID of the consumption model. |
Billing_account_price |
Struct |
Updated | If you have contract pricing, this is your custom SKU price from the contract that's linked to your Cloud Billing account, with the default consumption model price. |
Billing_account_price.tiered_rates.start_usage_amount |
Float |
Existing | Lower bound amount for a given billing account pricing tier, in pricing units. |
Billing_account_price.tiered_rates.usd_amount |
Numeric |
Existing | The billing account price for the SKU, in US dollars. |
Billing_account_price.tiered_rates.consumption_model_display_name |
String |
New | Display name for the consumption model. |
Billing_account_price.tiered_rates.consumption_model_id |
String |
New | ID of the consumption model. |
Consumption_Models |
List of structs | New | Both list price and billing account prices for the SKU, for all consumption models. |
Consumption_models.consumption_model_id |
String |
New | ID of the consumption model. |
Consumption_models.consumption_model_display_name |
String |
New | Display name for the consumption model. |
Consumption_models.list_price.tiered_rates.start_usage_amount |
Float |
New | Lower bound amount for a given list pricing tier, in pricing units. |
Consumption_models.list_price.tiered_rates.usd_amount |
Numeric |
New | The list price for the SKU, in US dollars. |
Consumption_models.billing_account_price.tiered_rates.start_usage_amount |
Float |
New | Lower bound amount for a given billing account pricing tier, in pricing units. |
Consumption_models.billing_account_price.tiered_rates.usd_amount |
Numeric |
New | The billing account price for the SKU, in US dollars. |
Billing user interface
The Billing section of the Google Cloud console will include updates to most pages to support the new data model. The updates include the Overview page, and the Cost Management and Cost Optimization sections of the Billing navigation menu.
Changes to budgets
You might need to adjust thresholds for budgets that you originally created that excluded "Committed use discounts (spend based)" credits. The total costs tracked by these budgets will decrease as the uncredited costs will now include savings when the new model applies. Visit the budgets dashboard at launch to review the affected budgets and make necessary changes.
Cloud Commerce Consumer Procurement API changes
The Cloud Commerce Consumer Procurement API enables programmatic purchases of spend-based CUDs with Marketplace offers. This API will change:
- The offer name for existing spend-based CUDs will change.
- The commitment amount for CUDs you purchase will change. Refer to CUD purchase flow changes for more details.
You must update any code that automates purchases of spend-based CUDs. Use the updated offer name and commitment amounts after you transition to the new billing model.
For more information, see Billing data and SKU updates for spend-based CUDs (April 2025 update).
CUD purchase flow changes
The UI that you use to purchase CUDs today will change. This change doesn't impact CUDs that you already purchased. The system converts existing CUDs to the new model seamlessly. For more details, refer to CUD purchase flow changes.
Example data export before and after the new CUD model
The new spend-based CUD model requires you to plan and adjust your internal systems that might consume Cloud Billing data. As a result, we provide the following scenarios to show how the data export schema and data will change, before and after the new CUD model. We further divide these scenarios into situations where you overutilize and underutilize your CUDs to show the affect on the data export.
For both scenarios, consider that you've purchased an E2-Standard-8
VM in US Central 1
, consisting of two SKUs for RAM and Core. These SKUs use the fictional ID of RAM SKU
and Core SKU
, respectively.
Then, you purchase a 1 Year GCE Flex CUD
for $0.1/hr for the overutilized scenario and $.3/hr for the underutilized scenario. These are represented in the data as the fictional ID Fee SKU
.
Overutilized CUD scenario
In the overutilized scenario, you made the previously mentioned purchases and overutilized the CUDs.
Data before
Before the new CUD model, your Cloud Billing export schema and data values will look like the following table.
SKU | cost | usage.amount_in_pricing_units | usage.pricing_unit | price.effective_price | originating_sku_id | subscription.instance_id | credits |
---|---|---|---|---|---|---|---|
Fee SKU | 0.046868 | 6.509490 | hour | 0.0072 | RAM SKU | subscriptions/e52fd279-0851-4f53-a533-093119e27bad | [] |
Fee SKU | 0.025132 | 3.490510 | hour | 0.0072 | Core SKU | subscriptions/e52fd279-0851-4f53-a533-093119e27bad | [] |
RAM SKU | 0.174496 | 8 | hour | 0.02181159 | null | null | [{"amount":-0.065095,"full_name":"Committed use discount - dollar based: GCE Commitments", "type":"COMMITTED_USAGE_DISCOUNT_DOLLAR_BASE"}] |
Core SKU | 0.093568 | 32 | gibibyte hour | 0.00292353 | null | null | [{"amount":-0.034905,"full_name":"Committed use discount - dollar based: GCE Commitments", "type":"COMMITTED_USAGE_DISCOUNT_DOLLAR_BASE"}] |
Data After
After the new CUD model, your Cloud Billing export schema and data values will look like the following table.
SKU | cost | usage.amount_in_pricing_units | usage.pricing_unit | consumption_model.description | price.effective_price | originating_sku_id | subscription.instance_id | credits |
---|---|---|---|---|---|---|---|---|
Fee SKU | 0.046868 | 0.046868330 | hour | Default | 1 | RAM SKU | subscriptions/1fd3b130-40f8-4a79-ac6f-5753aaa0ceeb | [{"amount":"-0.046868",""type":"COMMITMENT_FEE_OFFSET"}] |
Fee SKU | 0.025132 | 0.025131670 | hour | Default | 1 | Core SKU | subscriptions/1fd3b130-40f8-4a79-ac6f-5753aaa0ceeb | [{"amount":"-0.025132",""type":"COMMITMENT_FEE_OFFSET"}] |
RAM SKU | 0.109398 | 5.015577498 | hour | Default | 0.02181159 | null | null | [] |
Core SKU | 0.058648 | 20.06066639 | gibibyte hour | Default | 0.00292353 | null | null | [] |
RAM SKU | 0.046868 | 2.984422502 | hour | Compute Flexible CUDs 1 Year | 0.01570434 | null | subscriptions/1fd3b130-40f8-4a79-ac6f-5753aaa0ceeb | [] |
Core SKU | 0.025132 | 11.93933361 | gibibyte hour | Compute Flexible CUDs 1 Year | 0.00210494 | null | subscriptions/1fd3b130-40f8-4a79-ac6f-5753aaa0ceeb | [] |
Note the following in this new CUD model:
- There are two rows for each CUD, instead of one for each.
- There is a new
consumption_model.description
column that separates the additional CUD entries, where:- the
Compute Flexible CUDs 1 Year
value indicates that you received the expected CUD discount. - the
Default
value indicates that you overutilized the CUD, and your cost reverted to the default pricing for the overage amount. This is also indicated by thesubscription.instance_id
having no value. - the CUD fee rows also have the
Default
value, because discounts don't apply to them. Instead, thecredits
field indicates that a negative offset was applied to negate the fee.
- the
Underutilized CUD scenario
For this underutilized scenario, we assume you made the previously mentioned purchases and underutilized the CUDs.
Data before
Before the new CUD model, your Cloud Billing export schema and data values will look like the following table.
SKU | cost | usage.amount_in_pricing_units | usage.pricing_unit | price.effective_price | originating_sku_id | subscription.instance_id | credits |
Fee SKU | 0.022994 | 3.194 | hour | 0.0072 | null | subscriptions/e52fd279-0851-4f53-a533-093119e27bad | [] |
Fee SKU | 0.125637 | 17.450 | hour | 0.0072 | RAM SKU | subscriptions/e52fd279-0851-4f53-a533-093119e27bad | [] |
Fee SKU | 0.067369 | 9.357 | hour | 0.0072 | Core SKU | subscriptions/e52fd279-0851-4f53-a533-093119e27bad | [] |
RAM SKU | 0.174496 | 8 | hour | 0.02181159 | null | null | [{"amount":-0.174496,"full_name":"Committed use discount - dollar based: GCE Commitments", "type":"COMMITTED_USAGE_DISCOUNT_DOLLAR_BASE"}] |
Core SKU | 0.093568 | 32 | gibibyte hour | 0.00292353 | null | null | [{"amount":-0.093568,"full_name":"Committed use discount - dollar based: GCE Commitments", "type":"COMMITTED_USAGE_DISCOUNT_DOLLAR_BASE"}] |
Data After
Before the new CUD model, your Cloud Billing export schema and data values will look like the following table.
SKU | cost | usage.amount_in_pricing_units | usage.pricing_unit | price.effective_price | consumption_model.description | originating_sku_id | subscription.instance_id | credits |
Fee SKU | 0.022994 | 0.0230 | hour | 1 | Default | null | subscriptions/1fd3b130-40f8-4a79-ac6f-5753aaa0ceeb | [] |
Fee SKU | 0.125637 | 0.1256371 | hour | 1 | Default | RAM SKU | subscriptions/1fd3b130-40f8-4a79-ac6f-5753aaa0ceeb | [{"amount":"-0.1256348",""type":"COMMITMENT_FEE_OFFSET"}] |
Fee SKU | 0.067369 | 0.0673690 | hour | 1 | Default | Core SKU | subscriptions/1fd3b130-40f8-4a79-ac6f-5753aaa0ceeb | [{"amount":"-0.0673581",""type":"COMMITMENT_FEE_OFFSET"}] |
RAM SKU | 0.125637 | 8 | hour | 0.0157043448 | Compute Flexible CUDs 1 Year | null | subscriptions/1fd3b130-40f8-4a79-ac6f-5753aaa0ceeb | [] |
Core SKU | 0.067369 | 32 | gibibyte hour | 0.0021049416 | Compute Flexible CUDs 1 Year | null | subscriptions/1fd3b130-40f8-4a79-ac6f-5753aaa0ceeb | [] |
Note the following in this new CUD model:
- There are two rows for each CUD, instead of one for each.
- There is a new
consumption_model.description
column that separates the additional CUD entries, where:- the
Compute Flexible CUDs 1 Year
value indicates that you received the expected CUD discount. - the
Default
value indicates the CUD fee rows, because discounts don't apply to them. Instead, thecredits
field indicates that a negative offset was applied to negate the fees, which were rolled up into the first row.
- the
- The first row shows a sum of the CUD fees.
Sample Queries for key CUD KPIs
You can use these important KPI metrics to validate that your systems are functioning well with the new data model:
- Commitment savings ($): Describes the savings that resulted from
your commitments. The metric uses the formula
(Cost of resources at on-demand rates - cost of resources with commitment discounts)
. - Commitment savings (%): Describes the savings percentage that
resulted from your commitments. The metric uses the formula
(Commitment savings / costs of resources at on-demand rates)*100
. - Commitment utilization (%): Measures how effectively you use your
commitments, expressed as a percentage. The metric uses the formula
(Commitment applied to eligible spend / total commitment)
. Effective savings rate (%): Explains the return on investment (ROI) for commitment discounts. The metric uses the formula
(Commitment Savings / On-Demand Equivalent Spend)
.To gain better insight into your cost data, the following BigQuery sample queries show how to retrieve useful information for the following KPIs.
Choose the correct sample query
To help you update your queries for the changes to the data model, we provide two versions of the KPI sample queries. Choose one of the following:
Sample KPI queries using the current data model
Use these sample queries if you aren't using the new data model.
These queries are only for Compute flexible CUDs. To query for other spend-based CUD products, you must change the following values:
cud_product
sku.description
credit.type
CUD cost plus CUD savings
WITH cost_data AS ( SELECT * FROM project.dataset.gcp_billing_export_resource_v1_XXXXXX_XXXXXX_XXXXXX WHERE invoice.month = 'month' ), cud_product_data AS ( SELECT * FROM UNNEST( [ STRUCT( 'Compute Engine Flexible CUDs' AS cud_product, 'Commitment - dollar based v1: GCE' AS cud_fee_regex, 'GCE Commitments' AS cud_credit_regex)]) ), cud_costs AS ( SELECT invoice.month AS invoice_month, cud_product_data.cud_product, IFNULL( ( SELECT l.value FROM UNNEST(labels) l WHERE l.key = 'goog-originating-service-id' ), service.id) AS service, SUM(cost) AS cost FROM cost_data JOIN cud_product_data ON REGEXP_CONTAINS( sku.description, cud_fee_regex) GROUP BY 1, 2, 3 ), cud_credits AS ( SELECT invoice.month AS invoice_month, cud_product, service.id AS service, SUM(credit.amount) AS spend_cud_credits FROM cost_data, UNNEST(credits) AS credit JOIN cud_product_data ON REGEXP_CONTAINS( credit.full_name, cud_credit_regex) WHERE credit.type = 'COMMITTED_USAGE_DISCOUNT_DOLLAR_BASE' GROUP BY 1, 2, 3 ) SELECT invoice_month, cud_product, cost As commitment_cost, -1 * (cost + IFNULL(spend_cud_credits, 0)) AS commitment_savings FROM cud_costs LEFT JOIN cud_credits USING (invoice_month, cud_product, service);
month
is the current year and month inYYYYMM
format, for example '202504'.
Commitment utilization
WITH cost_data AS ( SELECT * FROM project.dataset.gcp_billing_export_resource_v1_XXXXXX_XXXXXX_XXXXXX WHERE invoice.month = 'month' ), cud_product_data AS ( SELECT * FROM UNNEST( [ STRUCT( 'Compute Engine Flexible CUDs' AS cud_product, 'Commitment - dollar based v1: GCE' AS cud_fee_regex, 'GCE Commitments' AS cud_credit_regex)]) ), cud_commitment_amount AS ( SELECT invoice.month AS invoice_month, cud_product_data.cud_product, SUM(usage.amount_in_pricing_units / 100) AS commitment_amount, FROM cost_data JOIN cud_product_data ON REGEXP_CONTAINS( sku.description, cud_fee_regex) GROUP BY 1, 2 ), cud_utilized_commitment_amount AS ( SELECT invoice.month AS invoice_month, cud_product, ABS(SUM(credit.amount / currency_conversion_rate)) AS utilized_commitment_amount FROM cost_data, UNNEST(credits) AS credit JOIN cud_product_data ON REGEXP_CONTAINS( credit.full_name, cud_credit_regex) WHERE credit.type = 'COMMITTED_USAGE_DISCOUNT_DOLLAR_BASE' GROUP BY 1, 2 ) SELECT invoice_month, cud_product, utilized_commitment_amount / commitment_amount *100 AS commitment_utilization FROM cud_commitment_amount LEFT JOIN cud_utilized_commitment_amount USING (invoice_month, cud_product);
month
is the current year and month inYYYYMM
format, for example '202504'.
Effective savings rate
WITH cost_data AS ( SELECT * FROM project.dataset.gcp_billing_export_resource_v1_XXXXXX_XXXXXX_XXXXXX WHERE invoice.month = 'month' ), cud_product_data AS ( SELECT * FROM UNNEST( [ STRUCT( 'Compute Engine Flexible CUDs' AS cud_product, 'Commitment - dollar based v1: GCE' AS cud_fee_regex, 'GCE Commitments' AS cud_credit_regex)]) ), eligible_cud_skus AS ( SELECT sku_id FROM example_project.dataset.flex_cud_skus ), eligible_cud_spend AS ( SELECT invoice.month AS invoice_month, SUM(cost) AS cost, SUM( IFNULL( ( SELECT SUM(credit.amount) FROM UNNEST(credits) AS credit WHERE credit.type IN ( 'COMMITTED_USAGE_DISCOUNT', 'COMMITTED_USAGE_DISCOUNT_DOLLAR_BASE', 'DISCOUNT', 'FREE_TIER') ), 0)) AS costs_ineligible_for_cud, FROM cost_data JOIN eligible_cud_skus ON sku.id = sku_id GROUP BY 1 ), cud_costs AS ( SELECT invoice.month AS invoice_month, cud_product_data.cud_product, IFNULL( ( SELECT l.value FROM UNNEST(labels) l WHERE l.key = 'goog-originating-service-id' ), service.id) AS service, SUM(cost) AS cost FROM cost_data JOIN cud_product_data ON REGEXP_CONTAINS( sku.description, cud_fee_regex) GROUP BY 1, 2, 3 ), cud_credits AS ( SELECT invoice.month AS invoice_month, SUM(credit.amount) AS spend_cud_credits FROM cost_data, UNNEST(credits) AS credit WHERE credit.type = 'COMMITTED_USAGE_DISCOUNT_DOLLAR_BASE' AND REGEXP_CONTAINS(credit.full_name, 'GCE Commitments') GROUP BY 1 ), cud_savings AS ( SELECT invoice_month, Cud_product, spend_cud_credits as spend_cud_credits, -1 * (cost + IFNULL(spend_cud_credits, 0)) AS commitment_savings FROM cud_costs LEFT JOIN cud_credits USING (invoice_month) ) SELECT Invoice_month, commitment_savings * 100 / (cost + costs_ineligible_for_cud - IFNULL(spend_cud_credits, 0)) AS effective_savings_rate FROM eligible_cud_spend LEFT JOIN cud_savings USING (invoice_month);
month
is the current year and month inYYYYMM
format, for example '202504'.
Sample KPI queries using the new data model
Use this sample query if you have adopted the new data model.
These queries are only for Compute flexible CUDs. To query for other spend-based CUD products, you must change the following values:
cud_fee_skus
consumption_model.id
SET bigquery_billing_project = billing-project-id; WITH cost_data AS ( SELECT * FROM project.dataset.gcp_billing_export_resource_v1_XXXXXX_XXXXXX_XXXXXX WHERE invoice.month = 'month' ), cud_fee_skus AS ( SELECT * FROM UNNEST( [ '5515-81A8-03A2', 'B22F-51BE-D599']) fee_sku_id ), cud_costs AS ( SELECT invoice.month AS invoice_month, subscription.instance_id AS subscription_instance_id, IFNULL( ( SELECT l.value FROM UNNEST(labels) l WHERE l.key = 'goog-originating-service-id' ), service.id) AS service, SUM(cost) AS commitment_cost, SUM( ( SELECT SUM(credit.amount) FROM UNNEST(credits) credit WHERE credit.type = 'COMMITMENT_FEE_OFFSET' )) AS commitment_fee_offset FROM cost_data JOIN cud_fee_skus ON fee_sku_id = sku.id GROUP BY 1, 2, 3 ), cud_savings AS ( SELECT invoice.month AS invoice_month, subscription.instance_id, service.id AS service, SUM(cost - cost_at_effective_price_default) AS cud_savings_amount, SUM(cost_at_effective_price_default) AS on_demand_costs FROM cost_data WHERE consumption_model.id IS NOT NULL AND consumption_model.id IN ('D97B-0795-975B','70D7-D1AB-12A4') GROUP BY 1, 2, 3 ) SELECT invoice_month, subscription_instance_id, service, commitment_cost, commitment_cost + commitment_fee_offset + IFNULL(cud_savings_amount, 0) AS commitment_savings, ABS(commitment_fee_offset) / commitment_cost * 100 AS cud_utilization_percent, (commitment_cost + commitment_fee_offset + IFNULL(cud_savings_amount, 0)) / IFNULL(on_demand_costs, 1) * 100 AS effective_savings_rate FROM cud_costs LEFT JOIN cud_savings USING (invoice_month, subscription_instance_id, service);
month
is the current year and month inYYYYMM
format, for example '202504'.
What CUDs will this affect?
The following spend-based CUDs will be affected by this change.
- Compute Flex CUDs
- GKE
- Cloud Run
- AlloyDB for PostgreSQL
- Bigtable
- Dataflow
- Spanner
- Cloud SQL
- Memorystore
- Managed Service for Apache Kafka
- BigQuery
- Backup and DR (for Oracle)
What CUDs aren't affected by this change?
The following CUDs won't be affected by this change:
- Backup for GKE
- Backup and DR (for VMware Engine)
- All VMware Engine CUDs
- NetApp Volumes
- All resource-based CUDs
As new CUDs launch, check this section to understand their eligibility for these changes.
How can you opt in?
You can opt in to your billing account starting July 15, 2025 using the Billing section of the Google Cloud console. You can't purchase new spend-based commitments for a few hours during your migration. Google Cloud displays a warning about this outage in the Billing UI. For more details about resellers and customers with billing account hierarchies, see Do other CUDs change?.
Frequently Asked Questions (FAQ)s
This section answers many of the frequently asked questions about this CUDs expansion.
Will your costs change?
No. The change in the billing model doesn't increase your total costs. Your contractual discounts are honored for the duration of your contract. Your total costs won't increase. However, you will notice changes in the way that Google Cloud represents your CUD savings. You will also notice changes in the data structure in the BigQuery export. You will also notice changes in the presentation of information in the Billing section of the Google Cloud console. The goal of the change is to simplify billing, make CUDs easier to understand, and expand their scope over time.
Additionally, the cost of your commitments won't change. However you will notice that your total commitment amount will change from commitment amount in on-demand spend to comment amount in CUD discounted spend and will equal your hourly commitment costs at the time of conversion.
Does this change previous bills?
No. This change doesn't affect previous bills. This change in how spend-based CUDs are billed only affects future bills.
Do resource-based CUDs change?
No. Resource-based CUDs aren't affected by this change.
Will this change affect CUD purchasing?
You used to purchase an hourly commitment in terms of equivalent on-demand spend. This amount represented the equivalent of on-demand costs that you would have incurred without the CUD. You now purchase an hourly commitment amount in terms of equivalent CUD discounted spend. This amount represents the total amount of CUD discounted spend that you commit to each hour.
Determine when other spend-based CUDs change
Google Cloud moves all CUDs to this new model. Timelines for other spend-based CUDs are unavailable.
When changes take effect for resellers
- Resellers that don't have active spend-based CUDs in this list on or after July 15, 2024: For reseller parent billing accounts that have no active spend-based CUDs in this list since July 15, 2024, the new model applies on July 15, 2025, at 12 AM US and Canadian Pacific Time (UTC-8). This applies to all billing accounts in the hierarchy.
- Resellers with active spend-based CUDs in this list since July 15, 2024: For reseller parent billing accounts with any active spend-based CUDs in this list since July 15, 2024, the new model applies on January 21, 2026, at 12 AM US and Canadian Pacific Time (UTC-8). Resellers can opt in their parent billing account earlier, starting July 15, 2025. In that case, the new model applies when you click opt-in to all billing accounts in the hierarchy that don't have spend-based CUDs in this list since July 15, 2024. For the remaining billing accounts, billing account administrators can then opt in their billing accounts. Learn more about how to opt in.
When changes take effect for direct customers with a two-tier billing account hierarchy
- Customers that don't have active spend-based CUDs in this list on or after July 15, 2024: For billing account hierarchies with no active spend-based CUDs in this list since July 15, 2024, the new model applies on July 15, 2025, at 12 AM US and Canadian Pacific Time (UTC-8) to all billing accounts in the hierarchy.
- Customers with active spend-based CUDs in this list since July 15, 2024: For billing account hierarchies with any active spend-based CUDs in this list on or after July 15, 2024, the new model applies on January 21, 2026, at 12 AM US and Canadian Pacific Time (UTC-8). You can opt in your entire hierarchy (at the parent billing account) earlier, starting July 15, 2025. In that case, the new model applies when you click opt-in to all billing accounts in the hierarchy. Learn more about how to opt in
Additional information
See Billing data and SKU updates for spend-based CUDs (April 2025 update) for a sample data export that helps you preview your monthly bill in the new format. It also includes information on new SKUs added to CUDs and pricing adjustments. You can use this export to validate that your queries function correctly in the new data model.
Related topics
- Billing data and SKU updates for spend-based CUDs (April 2025 update)
- Manage access to Cloud Billing accounts
- Create custom roles for Cloud Billing