Schema:

BILLING

FOCUS_COST_USAGE_V1_3 view

The FOCUS_COST_USAGE_V1_3 view in the BILLING schema exposes cost and usage data formatted to the FinOps Open Cost and Usage Specification (FOCUS) v1.3. It provides daily granular charge line items covering Snowflake credit consumption across all sub-accounts within a billing account.

This view is the primary source for FOCUS-compliant cost analytics, enabling practitioners to perform invoice reconciliation, cost allocation, rate optimization, and FinOps reporting using a standardized schema.

Access

RequirementDetails
DatabaseSNOWFLAKE
SchemaBILLING
Account requirementMust be an org-enabled account
Database roleSNOWFLAKE.ORGANIZATION_BILLING_VIEWER

Access is restricted to org-enabled accounts and requires the ORGANIZATION_BILLING_VIEWER database role on the SNOWFLAKE shared database.

-- Grant the database role to a user role
GRANT DATABASE ROLE SNOWFLAKE.ORGANIZATION_BILLING_VIEWER TO ROLE <role_name>;

-- Query the view
USE ROLE <role_name>;
SELECT * FROM SNOWFLAKE.BILLING.FOCUS_COST_USAGE_V1_3 LIMIT 10;

Grain

  • One row per daily charge line item per sub-account, service, and charge type.
  • ChargePeriodStart and ChargePeriodEnd represent inclusive start / exclusive end of a 24-hour period.
  • BillingPeriodStart and BillingPeriodEnd represent the calendar month billing period (inclusive start / exclusive end).

Columns

FOCUS standard columns

ColumnTypeDescription
BillingPeriodStartTIMESTAMP_TZInclusive start of the billing period (first day of month, UTC midnight).
BillingPeriodEndTIMESTAMP_TZExclusive end of the billing period (first day of next month, UTC midnight).
ChargePeriodStartTIMESTAMP_TZInclusive start of the charge period (daily granularity).
ChargePeriodEndTIMESTAMP_TZExclusive end of the charge period (daily granularity).
BillingAccountNameTEXTThe Organization responsible for paying for the line of usage. This will always refer to the Snowflake organization that owns the billing relationship.
BillingAccountIdTEXTUnique identifier of the Snowflake organization billing account.
SubAccountIdTEXTUnique identifier of the Snowflake account (sub-account within the org).
SubAccountNameTEXTDisplay name of the Snowflake account.
SubAccountTypeTEXTType of sub-account. Values: Regular, Reader.
ChargeCategoryTEXTHighest-level charge classification. Values: Usage, Purchase, Adjustment.
ChargeClassTEXTIndicates correction rows. Value: Correction when applicable; otherwise null.
ChargeFrequencyTEXTHow often the charge recurs. Value: Usage-Based.
ServiceCategoryTEXTHigh-level category of the Snowflake service (e.g., Compute, Storage, AI and Machine Learning).
ServiceNameTEXTSpecific Snowflake service type. See Service Types for the full list of possible values.
ChargeDescriptionTEXTHuman-readable description of the charge (e.g., OVERAGE-COMPUTE).
ConsumedQuantityNUMBER(38,9)How the underlying resource was metered (up to 9 decimal places). May differ in unit from PricingQuantity (e.g., storage is metered in TiB-Days but priced in TiB-Months).
ConsumedUnitTEXTUnit of metered consumption (e.g., Credits, TiB-Days, TiB-Months).
PricingQuantityNUMBER(38,9)How Snowflake prices the consumption for billing (rounded to 3 decimal places). This is the quantity used in cost calculations.
PricingUnitTEXTUnit corresponding to PricingQuantity (e.g., Credits, TiB-Months).
ListUnitPriceNUMBER(38,9)Published list price per unit before any discounts.
ListCostNUMBER(38,9)Cost at list price: ListUnitPrice × PricingQuantity.
ContractedUnitPriceNUMBER(38,9)Negotiated/contracted price per unit, inclusive of discounts if applicable. Rounded to 2 decimal places.
ContractedCostNUMBER(38,9)Precise calculated cost: ContractedUnitPrice × PricingQuantity (up to 9 decimal places). This is not the amount actually billed to the customer.
EffectiveCostNUMBER(38,9)Amortized cost accounting for commitment drawdowns. Rounded to 2 decimal places. This is the amount actually drawn from the customer balance.
BilledCostNUMBER(38,9)Actual cost drawn from the customer’s capacity balance. Rounded to 2 decimal places. Matches the usage statement.
BillingCurrencyTEXTCurrency of all cost columns. Value: USD.
PricingCategoryTEXTPricing model applied. Value: Standard.
CapacityReservationIdNUMBERIdentifier of the capacity reservation associated with this charge.
CapacityReservationStatusTEXTStatus of the capacity reservation. Value: Unused when capacity is not fully utilized.
RegionIdTEXTCloud provider region identifier (e.g., AWS_US_WEST_2).
RegionNameTEXTCloud provider region display name (e.g., AWS_US_WEST_2).
HostProviderNameTEXTName of the underlying cloud infrastructure provider (e.g., Aws, Azure, Gcp).
InvoiceIssuerNameTEXTEntity issuing the invoice. Value: Snowflake.
InvoiceIdTEXTInvoice identifier. See Known limitations.
ContractAppliedJSON ObjectJSON object containing contract metadata applied to this charge.

Snowflake custom columns

Custom columns are Snowflake-specific extensions to the FOCUS schema. Per FOCUS spec, custom columns use the x_ prefix to distinguish them from standard FOCUS columns.

ColumnTypeDescription
x_UpdatedAtTIMESTAMP_TZTimestamp when this row was last updated in the billing system.
x_OrganizationNameTEXTThe Organization responsible for the line of usage. This will always refer to the Snowflake organization that owns the sub-account generating the usage.
x_ServiceLevelTEXTSnowflake edition/service level of the sub-account (e.g., Enterprise, Business Critical, Standard).
ContractApplied.x_BalanceSourceTEXTThe balance source where usage is drawn down from (e.g., capacity, rollover, free usage, overage).
ContractApplied.x_ContractCommitCostBalanceNUMBERThe resultant balance left for the corresponding bucket of usage after draw down.

Cost and quantity relationships

Quantity columns

ConsumedQuantity and PricingQuantity may differ in both value and unit:

  • ConsumedQuantity (up to 9 decimals): How the underlying resource was metered.
  • PricingQuantity (rounded to 3 decimals): How Snowflake prices the consumption for billing.

For example, storage is metered in TiB-Days (ConsumedQuantity) but priced in TiB-Months (PricingQuantity = TiB-Days ÷ days in month). For compute, both are in Credits and typically equal.

Cost columns

ListCost           = ListUnitPrice × PricingQuantity              (rack rate, up to 9 decimals)
ContractedCost     = ContractedUnitPrice (2dp) × PricingQuantity  (precise mathematical product, up to 9 decimals)
BilledCost         = rounded to 2 decimals — what is actually billed after rounding
EffectiveCost      = rounded to 2 decimals — same as BilledCost

Savings analysis: ListCost - ContractedCost shows savings from negotiated discounts.

Sample queries

For additional use cases and sample queries, see the FOCUS Use Cases library.

Total monthly spend by service

SELECT
    DATE_TRUNC('month', "ChargePeriodStart")::DATE AS month,
    "ServiceName",
    SUM("BilledCost") AS total_billed_cost
FROM SNOWFLAKE.BILLING.FOCUS_COST_USAGE_V1_3
GROUP BY 1, 2
ORDER BY 1 DESC, 3 DESC;

Daily spend by sub-account

SELECT
    "ChargePeriodStart"::DATE AS charge_date,
    "SubAccountName",
    "x_ServiceLevel",
    SUM("BilledCost") AS daily_cost
FROM SNOWFLAKE.BILLING.FOCUS_COST_USAGE_V1_3
GROUP BY 1, 2, 3
ORDER BY 1 DESC, 4 DESC;

Spend by cloud provider region

SELECT
    "HostProviderName",
    "RegionName",
    SUM("BilledCost") AS total_cost
FROM SNOWFLAKE.BILLING.FOCUS_COST_USAGE_V1_3
GROUP BY 1, 2
ORDER BY 3 DESC;

Current billing period summary

SELECT
    "BillingPeriodStart"::DATE AS billing_period,
    COUNT(*) AS line_items,
    SUM("BilledCost") AS total_billed,
    SUM("EffectiveCost") AS total_effective,
    SUM("ListCost") AS total_list
FROM SNOWFLAKE.BILLING.FOCUS_COST_USAGE_V1_3
WHERE "BillingPeriodStart"::DATE = DATE_TRUNC('month', CURRENT_DATE)
GROUP BY 1;

Known limitations

LimitationDetail
InvoiceId may be emptyFor Contract (capacity) customers, InvoiceId may be empty as usage is not tied directly to the invoice for capacity purchases. For On-Demand customers, InvoiceId will only be populated after month end.
Missing conditional columnsCommitmentDiscount*, Sku*, PricingCurrency*, ResourceId/Name/Type, AllocatedTags, AllocatedMethodDetails columns are not populated.

Usage notes

  • The view refreshes hourly, but latent usage activity may take up to 72 hours before it is reflected in the data.
  • Until month close, data for a given day in a month can change to account for any end-of-month adjustments, mid-month contract amendments, latent usage, or Snowflake account transfers from one organization to another.
  • Historical data is available from January 1, 2026 onwards.
ViewDescription
USAGE_IN_CURRENCY_DAILYOrg-level daily spend in billing currency. Requires ORGADMIN role.
RATE_SHEET_DAILYDaily rate sheet with contracted pricing per service. Requires ORGADMIN role.
REMAINING_BALANCE_DAILYDaily capacity balance remaining. Requires ORGADMIN role.