Connecting to Snowflake

Connect your Snowflake account to CloudZero to bring your Snowflake cost and usage data, including Cortex AI spend, into a unified view of all your cloud and AI spend. CloudZero organizes your Snowflake costs, along with your other costs, into categories (called Dimensions) that matter most to your business. For example: business unit, team, product, feature, environment, customer, or virtually anything else. Once connected and organized, you can quickly answer questions about your spend that matter to your stakeholders.

This guide covers configuring a Snowflake connection and running the CloudZero SQL script in your Snowflake account. CloudZero connects through Snowflake's Secure Data Sharing, establishing a share from your account to CloudZero's Snowflake account in the same region. All access is read-only.

ℹ️

CloudZero supports all Snowflake regions except government cloud regions (SnowGov).

What you need

  • CloudZero user with admin permissions
  • Snowflake account with permissions to create roles, databases, procedures, and shares (the SQL script creates read-only resources)
  • Snowflake's ORGADMIN role to include organization-level data. Without ORGADMIN, organization-level views are skipped. See How your Snowflake rates are determined for how this affects your cost data.
  • Your Snowflake contract pricing:
ValueHow to find it
Cost Per Credit (Capacity Credit Price)Query the Rate_Sheet_Daily view, or find it on your Snowflake bill
Cost Per TB Month (Capacity Storage Price)Same source as Cost Per Credit
Cost Effective DateThe date your current pricing took effect
⚠️

Do not connect Snowflake reader accounts. Reader accounts do not have their own billing data. All costs are billed to the provider account, so CloudZero cannot collect cost data from a reader account.

Step 1: Configure the connection in CloudZero

  1. In CloudZero, go to Settings > Cloud Connections.
  2. Select Create Connection + and select the Snowflake tile.
  3. Enter the connection details:
FieldValue
Connection NameA name to identify this Snowflake account in CloudZero (for example, Production or Analytics)
Cost Per CreditYour Snowflake Capacity Credit Price
Cost Per TB MonthYour Snowflake Capacity Storage Price
Cost Effective DateThe date your pricing took effect. If your pricing has not changed since the account was created, use the account creation date.
Snowflake Account IDYour Snowflake account identifier in lowercase. Run SELECT LOWER(CURRENT_ACCOUNT()); in Snowflake to find it.
Snowflake Account RegionThe display name of your Snowflake region. Run SHOW REGIONS; SELECT display_name FROM TABLE(RESULT_SCAN(LAST_QUERY_ID())) WHERE snowflake_region = CURRENT_REGION(); in Snowflake to find it.
  1. Select Save. A SQL script appears on the next screen.

Step 2: Run the CloudZero SQL script in Snowflake

  1. Copy the SQL script that appeared after saving the connection in Step 1.
  2. Paste the script into a Snowflake worksheet in your account.
  3. Select the All Queries checkbox.
  4. Select Run.
ℹ️

The first run can take 3+ hours while Snowflake prepares the billing data. Subsequent runs take only a few minutes.

Step 3: Verify the connection

Return to Settings > Cloud Connections in CloudZero and refresh. Your Snowflake connection appears in the Billing Connections table.

What to expect

After CloudZero discovers the data share created by the SQL script, the connection status changes from Pending Data to Healthy:

  • Discovery: Up to an hour after the SQL script completes.
  • Cost data: Up to 24 hours for the initial sync. Once available, your Snowflake costs appear across the platform.
  • Additional accounts: Each additional Snowflake billing account requires a separate connection. Follow the same process for each.
ℹ️

You can also query your CloudZero cost data directly from your own Snowflake account. See Query CloudZero Data in Snowflake for setup instructions.

Connection details

Tags

Snowflake tags are available in CloudZero for serverless features but not for standard warehouse queries:

Usage typeExamplesTags in CloudZero
Serverless featuresSnowpipe, search optimization, automatic clusteringYes. Tags on the associated table, schema, or database are available throughout CloudZero, including for cost allocation with CostFormation.
Warehouse queriesStandard user-driven queriesNo. Usage is tracked at the warehouse level only.
ℹ️

If tags are not appearing for a serverless feature, verify the tag is applied to the object, schema, or database in your Snowflake account using the TAG_REFERENCES view.

Cortex AI

CloudZero captures Cortex AI spend through dedicated usage history views (listed in the Permissions table below). No additional configuration is required.

Cortex AI spend is grouped under the Service element SnowflakeCompute. To see individual Cortex costs, group by Resource Summary. Cortex services such as AI_SERVICES, CORTEX_CODE_CLI, and CORTEX_AGENTS are listed as their own rows in the results, just like your warehouse names.

Permissions

All CloudZero access is read-only. The SQL script in Step 2 creates the following resources in your Snowflake account and establishes a share to CloudZero:

ResourceNamePurpose
RoleCLOUDZERO_COPY_BILLING_DATA_ROLEReads data and executes the sync procedure
DatabaseCLOUDZERO_SHARED_DATAIntermediate database between your billing views and the share
ProcedureCLOUDZERO_COPY_BILLING_DATASyncs data periodically from billing tables and views
ShareCLOUDZERO_SHAREShares data from CLOUDZERO_SHARED_DATA to CloudZero

The script grants read access to the following tables and views:

SchemaTable / ViewPurpose
ACCOUNT_USAGEMETERING_HISTORYCredit usage by warehouse
ACCOUNT_USAGEMETERING_DAILY_HISTORYDaily credit usage by warehouse
ACCOUNT_USAGEDATABASE_STORAGE_USAGE_HISTORYStorage usage by database
ACCOUNT_USAGESTAGE_STORAGE_USAGE_HISTORYStorage usage by stage
ACCOUNT_USAGEWAREHOUSE_EVENTS_HISTORYWarehouse lifecycle events
ACCOUNT_USAGETAGSTag definitions
ACCOUNT_USAGETAG_REFERENCESTag assignments to objects
ORGANIZATION_USAGEUSAGE_IN_CURRENCY_DAILYOrganization-level spend (requires ORGADMIN role)
ORGANIZATION_USAGEREMAINING_BALANCE_DAILYContract balance tracking (requires ORGADMIN role)
ORGANIZATION_USAGERATE_SHEET_DAILYContract pricing rates (requires ORGADMIN role)

The script also collects Cortex AI usage data to surface AI-driven spend alongside the rest of your Snowflake costs:

SchemaTable / ViewPurpose
ACCOUNT_USAGECORTEX_AGENT_USAGE_HISTORYAgent workflows
ACCOUNT_USAGECORTEX_AI_FUNCTIONS_USAGE_HISTORYAI function invocations
ACCOUNT_USAGECORTEX_ANALYST_USAGE_HISTORYNatural language queries
ACCOUNT_USAGECORTEX_CODE_CLI_USAGE_HISTORYCode generation (CLI)
ACCOUNT_USAGECORTEX_CODE_SNOWSIGHT_USAGE_HISTORYCode generation (Snowsight)
ACCOUNT_USAGECORTEX_DOCUMENT_PROCESSING_USAGE_HISTORYDocument processing
ACCOUNT_USAGECORTEX_REST_API_USAGE_HISTORYREST API calls
ACCOUNT_USAGECORTEX_SEARCH_BATCH_QUERY_USAGE_HISTORYSearch batch queries
ACCOUNT_USAGECORTEX_SEARCH_DAILY_USAGE_HISTORYSearch daily totals
ACCOUNT_USAGECORTEX_SEARCH_SERVING_USAGE_HISTORYSearch serving
ℹ️

Run SHOW TABLES IN DATABASE CLOUDZERO_SHARED_DATA; in Snowflake to check which views are currently in your share.

How your Snowflake rates are determined

CloudZero calculates your Snowflake costs using the best rate source available, in the following order:

  1. Your contract rates. If RATE_SHEET_DAILY is available in your share (requires ORGADMIN), CloudZero uses your negotiated rates per service per day. If a rate is missing for a given day, CloudZero uses the most recent available rate for that service.
  2. Your organization-level spend. If contract rates are not available, CloudZero calculates an effective rate by dividing your total spend by total usage units from USAGE_IN_CURRENCY_DAILY (requires ORGADMIN). This rate can vary from day to day based on actual usage.
  3. The values you entered during setup. If neither source is available, CloudZero applies Cost Per Credit to all services except storage, which uses Cost Per TB Month, from Step 1.

Maintenance and configuration

Deleting a connection

Snowflake connections cannot be deleted through the CloudZero UI. Contact your account manager to remove a Snowflake connection.

Updating a manual connection

If your Snowflake account is outside the us-east-1 region and uses the legacy S3-based ingestion method, update the IAM trust relationship. See Update a Legacy Snowflake Connection for details.

Script versioning

CloudZero periodically updates the SQL script generated in Step 1. The version number is shown in the script header when CloudZero generates it.

If you connected your Snowflake account previously, regenerate and re-run the script to pick up the latest changes. The updated script replaces the previous setup automatically. No additional configuration is required.

VersionWhat changed
1.6Removed a deprecated Cortex AI view (CORTEX_AISQL_USAGE_HISTORY)
1.5Updated connection identifier format; added contract rate detection (RATE_SHEET_DAILY) and Cortex Code cost tracking
1.4Base version
ℹ️

Have questions or feedback? Reach out to your account manager.