CostMonStart free

Calculator

What is your data warehouse actually costing you?

Snowflake bills compute time in credits. BigQuery bills bytes scanned. Price both against your own numbers, see where the on-demand-vs-reservation crossover sits, and find out which config change actually moves the number.

Rates verified Snowflake's credit table is region- and cloud-agnostic; BigQuery rates are us-central1, see the sources below

Why Snowflake and BigQuery bill so differently

Snowflake and BigQuery bill on opposite meters

Snowflake charges for compute TIME: a virtual warehouse burns credits every second it's running, whatever size you picked, whether or not it's actually processing a query at that instant. BigQuery's default pricing charges for BYTES: a query costs the same whether it takes one second or one minute, and everything comes down to how much data it scanned. Two data warehouses, two completely different ways to overspend.

That split matters for where the waste actually hides. On Snowflake, the number to watch is how much of a warehouse's billed time was spent idling or resuming rather than running a query. On BigQuery's on-demand model, the number to watch is how many bytes a query scanned that it didn't need to. Neither platform's own console makes that number obvious at a glance, which is exactly why the config change is easy to miss until the bill has already grown.

How the calculator works

The Snowflake panel prices two warehouses (a primary one and a smaller dev/test one) by their size, active hours, resumes, and auto-suspend timeout, splitting the result into query-active compute, idle-before-suspend waste, and resume-minimum makeup, since tightening auto-suspend trades one against the other. Cloud services credits and storage (with Time Travel and the fixed 7-day Fail-safe window both retaining extra bytes) round out the total. Because Snowflake doesn't publish a $/credit or $/TB list price, both are required inputs, priced at your own rate rather than a guess.

The BigQuery panel prices on-demand scanning against an Editions reservation at your own slot shape, and shows the crossover: the scan volume where the two cost the same. Storage is priced at both the logical (uncompressed) and physical (compressed) billing option, since switching only pays off above a certain compression ratio.

Below both panels, a ranked set of levers computes what each concrete fix is worth at your own numbers. They don't all stack: requiring a partition filter and pruning columns both cut the same underlying scanned-byte total, so applying both saves less than adding them suggests.

Free calculator

Price your own data warehouse

Two independent panels, Snowflake and BigQuery, plus a ranked list of what each fix is worth at your own numbers. Everything computes in your browser; nothing you type here is sent anywhere.

Snowflake

$/credit

Snowflake doesn't publish a $/credit list price — it varies by edition, cloud, and contract. Use the rate on your own bill.

Primary warehouse

Each step up doubles the credits/hour rate.

hrs/day

Time actually spent running queries, not counting idle time before auto-suspend.

resumes/day

How many times it wakes from auto-suspend. Each one bills at least the 60-second minimum.

sec

How long it idles after its last query before suspending.

Dev/test warehouse

Usually smaller, but not always small enough to make frequent resumes cheap.

hrs/day

Time actually spent running queries on the smaller, less-watched warehouse.

resumes/day

A dashboard or a CI job polling this warehouse counts here — often the chattiest one in an account.

sec

A short timeout here is exactly what turns frequent polling into repeated resume-minimum charges.

Cloud services & storage

%

From Snowsight or ACCOUNT_USAGE.METERING_DAILY_HISTORY. Only the amount above 10% is ever billed.

TB

Live table size, before Time Travel or Fail-safe are added.

days

Standard Edition is fixed at 1 day. Enterprise Edition can go up to 90.

$/TB/mo

Also unpublished by Snowflake — use the $/TB/month rate on your own bill.

Snowflake, by meterMonthly
Live
Query-active compute
$7,380
Idle-before-suspend
$1,275
Resume-minimum makeup
$195.00
Cloud services (above 10%)
$354.00
Storage (+ Time Travel & Fail-safe)
$1,467
Total, monthly$10,671

Priced at your own credit and storage rates — Snowflake doesn't publish either as a list price. See the FAQ below.

BigQuery

TiB

Total bytes processed by every query, on-demand billing's only meter.

%

Queries that read an entire partitioned table because nothing narrowed the date range.

%

If your data spans a year but a typical query only needs a day, this is close to 100%.

%

The share of scanned columns a query never actually reads.

Storage

GiB

Total table storage across the project, before the long-term split.

%

Any table unmodified for 90 straight days — modifying it resets the clock.

x

How much smaller your data gets once compressed. 4:1 is a reasonable starting guess for typical tables.

Editions reservation

slots

The floor of dedicated capacity you'd always hold under Editions autoscaling.

slots

The autoscaler's ceiling. Extra slots above your baseline, up to this cap, bill pay-as-you-go per second.

Pay-as-you-go, or a 1- or 3-year commitment at a lower slot-hour rate.

BigQuery, by pricing modelMonthly, us-central1
Live
On-demand scanning
$4,994
Editions, Enterprise, at your slot baseline
$4,380
Storage, logical billing
$940
Total, cheaper query model + storage$5,320Crossover: 702 TiB/mo

Estimate only, based on us-central1 list prices verified against Google's own pricing pages, not a bill.

Ranked savingsWhat each fix is worth at your numbers
Live
  1. Trim idle-before-suspend time on your busiest warehouse−$1,275.00/mo

    Every resume idles for the full auto-suspend timeout before suspending. Shortening that timeout on a warehouse with steady, predictable query gaps cuts this directly — check the resume-minimum trade-off below first if it's a chatty workload instead.

  2. Drop your primary warehouse one size, if query time barely changes−$4,050.00/mo

    Each size step doubles the credit rate. Test the workload one size down; if runtime is close to unchanged, the extra size was never buying anything.

  3. Turn on require_partition_filter on your biggest partitioned tables−$800.00/mo

    Makes a missing WHERE clause on the partition column a query error instead of a full-table scan. Existing dashboards and jobs need a one-time filter added, but nothing can accidentally skip it afterward.

  4. Replace SELECT * with the columns actually used downstream−$750.00/mo

    Columnar storage means unreferenced columns cost nothing to skip. A five-minute query rewrite, with no change to what the query returns.

  5. Switch storage billing to physical bytes, if your compression ratio supports it−$589.88/mo

    A one-time, reversible per-dataset setting. Worth it once your data compresses well enough that the physical byte count comes in below the logical one by more than the physical rate's premium.

  6. Move to an Editions reservation once you're past the crossover volume−$613.75/mo

    On-demand and a slot reservation cost the same at a specific TiB/month figure, computed above from your slot baseline. Past that point, a reservation is cheaper for the same query volume.

  7. Shorten Time Travel retention on your highest-churn tables−$233.33/mo

    A staging table that's truncated and reloaded nightly rarely needs a week of recoverability. Fail-safe's fixed 7 days is untouchable, but the configurable Time Travel window on top of it isn't.

Ranked by typical impact, not re-sorted as you type. Don't add these up: requiring a partition filter and pruning columns both cut the same underlying scanned-byte total, so applying both saves less than their sum.

Rate card

Every Snowflake and BigQuery warehouse rate, priced

Verified against each vendor's own docs and pricing pages, not blog hearsay. Full citations are in the sources section below. Databricks DBUs, Redshift Serverless, Microsoft Fabric, and ClickHouse Cloud are deliberately out of scope for this page.

Snowflake

Snowflake rates, their billing unit, and notes
RatePriceBilling unitNote
Virtual warehouse compute, X-Small to 6X-Large1 to 512 credits/hour, doubling at every sizeCredits/hour, by warehouse sizeX-Small=1, Small=2, Medium=4, Large=8, X-Large=16, 2X-Large=32, 3X-Large=64, 4X-Large=128, 5X-Large=256, 6X-Large=512. The $/credit price isn't published — see the FAQ.
Compute billing granularityPer second, after the resume minimumWarehouse compute
Resume minimum60 secondsBilled once per warehouse resumeEvery resume from auto-suspend bills at least 60 seconds of compute, even if the query that woke it finishes in a few seconds.
Auto-suspend / auto-resumeBoth enabled by defaultPer-warehouse settingSnowflake suspends a warehouse after its configured idle timeout, and resumes it automatically when a new query needs it.
Cloud services creditsBilled only above 10% of daily compute creditsAccount-level daily threshold
Time Travel retention, Standard Edition1 day, fixedPer table/schema/database
Time Travel retention, Enterprise Edition0 to 90 days, configurablePer table/schema/database
Fail-safe7 days, non-configurablePermanent tables only, after Time Travel ends

Google BigQuery (us-central1)

BigQuery rates, their billing unit, and notes
RatePriceBilling unitNote
On-demand analysis$6.25/TiB scannedBytes processed per queryThe first 1 TiB scanned per month is free.
Minimum billed size per query10 MiBPer query, per referenced table
Editions, Standard$0.04/slot-hour PAYG · $0.036 1-yr · $0.032 3-yrPer slot, per hour
Editions, Enterprise$0.06/slot-hour PAYG · $0.054 1-yr · $0.048 3-yrPer slot, per hour
Editions, Enterprise Plus$0.10/slot-hour PAYG · $0.09 1-yr · $0.08 3-yrPer slot, per hour
Storage, active, logical billing$0.023/GiB/moUncompressed bytes
Storage, long-term, logical billing$0.016/GiB/moUncompressed bytes, unmodified 90+ days
Storage, active, physical billing$0.04/GiB/moCompressed bytes
Storage, long-term, physical billing$0.02/GiB/moCompressed bytes, unmodified 90+ days
Storage free tierFirst 10 GiB/monthAll storage billing modes
Storage Read API$1.10/TiBData readFirst 300 TiB/month free.
Storage Write API$0.025/GiBData writtenFirst 2 TiB/month free.

The traps

The non-obvious mistakes that cost real money

Auto-suspend has a cost in both directions, not just one

A long auto-suspend timeout bills idle compute while a warehouse waits to suspend. A short one does the opposite: a warehouse polled every couple of minutes against a 60-second timeout suspends and resumes constantly, and every resume bills at least 60 seconds regardless of how brief the query was. Lowering auto-suspend to fix the first problem can make the second one worse for a chatty workload.

The fix isn't a single "right" timeout. It's matching the timeout to the query pattern: infrequent, bursty queries want a short timeout; steady, frequent polling wants either a longer one or a switch away from polling altogether.

Each warehouse size step doubles the credit rate, not the value delivered

Going from Small to Medium to Large doubles the credits/hour rate at every step. That's a fair trade when a workload is genuinely compute-bound and finishes proportionally faster on the bigger warehouse. It's a bad one when the warehouse was sized for a peak that rarely happens, or for a query that's bottlenecked on something a bigger warehouse can't fix, like a missing partition or waiting on a slow upstream source.

Cloud services credits are free, right up until they're not

Cloud services usage only bills once it exceeds 10% of that day's warehouse compute credits. Under that line, it's invisible on the bill. A single metadata-heavy workload, like a burst of DESCRIBE or SHOW commands, or heavy result-set caching misses, can push a normally-quiet account over the threshold for a day, and the whole excess bills at once rather than gradually.

Time Travel and Fail-safe both keep billing after data is gone

Deleting a row, dropping a table, or overwriting data doesn't free the storage it used. Time Travel keeps the prior version recoverable for the configured retention window, and once that ends, Fail-safe holds it for a further, non-configurable 7 days. A table with a lot of daily churn, like one truncated and reloaded nightly, can carry meaningfully more retained-version storage than its live size suggests, for no reason visible in a normal row count.

SELECT * bills every column, even the ones the query throws away

BigQuery's columnar storage means a query that references three columns out of thirty only scans those three. SELECT * scans all thirty, every time, on every table it touches. That's a straight cost with nothing to show for it whenever the code downstream only reads a handful of those columns, which is most of the time.

An Editions autoscale max isn't just a performance ceiling

Autoscaling slots above your committed baseline bill at the pay-as-you-go rate, per second, up to whatever max you configured. That ceiling protects query performance during a burst, but it's also the cap on how much a single bad query, or a runaway scheduled job, can spend before it's throttled. A max set far above typical usage "just in case" is a real, uncapped-in-practice exposure, not a free safety margin.

BigQuery's long-term storage discount resets the moment a table is touched

A table gets the 50%-off long-term storage rate only after 90 straight days with no modification, and modifying it, even a single row update or a metadata change, resets that counter to zero. A table that's appended to nightly, however small the append, never reaches the discount no matter how old most of its data actually is. Partitioning old data into a separate, untouched table is what actually earns the discount.

The levers

Eight fixes, ranked by typical impact

The calculator above computes what each one is worth at your own numbers. This is the reasoning behind the ranking.

  1. Trim idle-before-suspend time on your busiest warehouse

    Every resume idles for the full auto-suspend timeout before suspending. Shortening that timeout on a warehouse with steady, predictable query gaps cuts this directly — check the resume-minimum trade-off below first if it's a chatty workload instead.

  2. Drop your primary warehouse one size, if query time barely changes

    Each size step doubles the credit rate. Test the workload one size down; if runtime is close to unchanged, the extra size was never buying anything.

  3. Turn on require_partition_filter on your biggest partitioned tables

    Makes a missing WHERE clause on the partition column a query error instead of a full-table scan. Existing dashboards and jobs need a one-time filter added, but nothing can accidentally skip it afterward.

  4. Replace SELECT * with the columns actually used downstream

    Columnar storage means unreferenced columns cost nothing to skip. A five-minute query rewrite, with no change to what the query returns.

  5. Give the dev/test warehouse a schedule instead of leaving it running

    A resource monitor or a scheduled task suspending it outside business hours turns always-on into on-when-needed, with no change to what it's available for during the day.

  6. Switch storage billing to physical bytes, if your compression ratio supports it

    A one-time, reversible per-dataset setting. Worth it once your data compresses well enough that the physical byte count comes in below the logical one by more than the physical rate's premium.

  7. Move to an Editions reservation once you're past the crossover volume

    On-demand and a slot reservation cost the same at a specific TiB/month figure, computed above from your slot baseline. Past that point, a reservation is cheaper for the same query volume.

  8. Shorten Time Travel retention on your highest-churn tables

    A staging table that's truncated and reloaded nightly rarely needs a week of recoverability. Fail-safe's fixed 7 days is untouchable, but the configurable Time Travel window on top of it isn't.

Sources

Where every rate on this page comes from

Every Snowflake and BigQuery rate above is pulled first-party from each vendor's own docs and pricing pages, re-verified as of 2026-08-11.

FAQ

Common questions about data warehouse costs

Why did our Snowflake bill jump without adding any warehouses?

Warehouse count is rarely the culprit. Look at resumes/day and the auto-suspend timeout on your busiest warehouses first: a workload that started polling more often, or a timeout that got shortened, can move the bill with the exact same warehouses running the exact same queries.

Is a shorter auto-suspend timeout always better?

No. It cuts idle-before-suspend waste but increases how often the 60-second resume minimum gets paid. For a warehouse queried in frequent, short bursts, a shorter timeout can cost more, not less. Match the timeout to the query pattern rather than defaulting to the shortest setting.

Why doesn't this page show a dollar price for Snowflake credits?

Because Snowflake doesn't publish one. Its list price varies by edition, cloud provider, and region, and snowflake.com/pricing defers to a Service Consumption Table PDF and a sales-gated calculator rather than a public number. This page prices Snowflake entirely in credits and asks for your own effective rate, which gives a more honest answer than a guessed list price would.

What's the real difference between BigQuery on-demand and Editions pricing?

On-demand bills by bytes scanned, with no fixed monthly floor: light usage costs little, heavy usage scales linearly. Editions bills by slot-time instead, for a reserved (or autoscaled) amount of compute capacity you pay for whether or not it's fully used. Below a certain scan volume, on-demand is cheaper; above it, a reservation is. The calculator's crossover figure is exactly that breakeven point.

Why does BigQuery storage sometimes cost less after 90 days?

A table that goes 90 consecutive days without a modification automatically bills at the long-term storage rate, roughly a 30% discount versus active storage. Any modification, including a small append or an update, resets that 90-day clock back to zero, which is why a table that's touched nightly never reaches it no matter how old most of its data is.

Does CostMon fix any of this automatically?

No. CostMon doesn't resize a warehouse, flip a storage billing mode, or buy an Editions reservation for you. What it does is pull your real Snowflake and BigQuery cost and usage data on a schedule, normalize it alongside every other provider you run, and flag a climbing warehouse or storage line before it turns into a surprise on the invoice. The fixes above are still yours to apply.

The meter you don't watch still grows.

Waste rarely hides in the service you check every week. CostMon watches every meter on your stack, including the ones you forgot were running.

Esc