If you only do one Snowflake cost exercise this quarter, do this one. It takes 60 seconds, you don't need a Cost Insights tool, and you'll find ~30% of waste before lunch.
Step 1 — Export your Usage CSV
In Snowflake:
- Admin → Usage
- Set the date range to Last 30 days
- Group by: Warehouse (this is the key)
- Download CSV (top right of the table)
You can also run this SQL and download the result:
SELECT warehouse_name,
SUM(credits_used) AS credits,
SUM(credits_used) * 3 AS approx_usd -- adjust to your $/credit
FROM snowflake.account_usage.warehouse_metering_history
WHERE start_time >= DATEADD(day, -30, CURRENT_TIMESTAMP())
GROUP BY warehouse_name
ORDER BY credits DESC;
Step 2 — The patterns we find in every CSV
1. The "always-on X-Large that runs 2-second queries"
The single most common Snowflake waste pattern. You'll see one warehouse using 30%+ of all credits, but the queries on it are sub-second. The fix: drop to Medium or Small. p95 latency goes up ~300ms, credits drop 4–8×.
2. Idle warehouses (the AUTO_SUSPEND problem)
In your CSV, sort warehouses by credit-hours / query-count. Anything > 0.5 credit-hours per query is suspicious. The cause: AUTO_SUSPEND set to 600 seconds (10 minutes) instead of 60. Drop to 60s — same UX, far fewer idle credits.
3. 30-day time travel on dev databases
Not in the CSV directly — run:
SELECT database_name, retention_time
FROM information_schema.databases
ORDER BY retention_time DESC;
Anything >7 days on a dev/staging schema is paying for storage you'll never use. Drop to 1 day on dev; 0 on temp/scratch DBs.
4. Materialized views nobody queries
SELECT name, schema_name,
last_referenced_time,
DATEDIFF('day', last_referenced_time, CURRENT_TIMESTAMP()) AS days_idle
FROM information_schema.materialized_views
ORDER BY days_idle DESC;
Anything with >30 days idle is paying maintenance cost for nothing. Drop it.
5. Snowpipe or auto-ingest mis-sized
If you see a warehouse like INGEST_WH consuming significant credits but your data volume is small, you've probably got PIPE running on too-large compute. Drop to X-Small.
Step 3 — The 60-second math
Pull the top 5 warehouses from your CSV. Multiply credit usage × your $/credit rate. That's where 80% of your bill comes from. Anything in that top 5 you don't have a good reason for? That's the audit finding.
We've never run this on a >$30K/month Snowflake account and found <$8K/month of savings.
Step 4 — The follow-up SQL
Once you've identified the top 3 candidate warehouses, run:
SELECT warehouse_name,
AVG(execution_time) / 1000 AS avg_seconds,
PERCENTILE_CONT(0.95) WITHIN GROUP (ORDER BY execution_time) / 1000 AS p95_seconds,
AVG(bytes_scanned) / POWER(1024, 3) AS avg_gb_scanned
FROM snowflake.account_usage.query_history
WHERE start_time >= DATEADD(day, -7, CURRENT_TIMESTAMP())
AND warehouse_name = 'YOUR_TOP_WAREHOUSE'
GROUP BY warehouse_name;
If the average query is sub-5-seconds, you're over-sized.
Step 5 — Run it through the free auditor
CARTIE's free Snowflake bill audit takes your usage CSV and returns your top 5 credit-leak warehouses, the right-size recommendation for each, and the ALTER WAREHOUSE SQL to apply. No ACCOUNTADMIN access, no IAM, no retention. Drop the file, see the result.
If you want the deep playbook, see The Snowflake Cost Optimization Playbook: 7 Patterns That Cut Your Bill 40%.