Every "BigQuery vs Snowflake cost" article you find is a year old and already wrong. This one re-checks itself daily: rates read from vendor pricing APIs, published rate cards where none exists, every figure carrying its source and date.
I kept rebuilding the same spreadsheet. Every time someone asked "is Snowflake cheaper than BigQuery for this," I'd go find a comparison article, notice it was from last year, and start over in a spreadsheet I'd then lose.
So the site is built so that no human ever types a price. A scheduled job reads each vendor's pricing API daily and writes the numbers into a committed JSON file that is the entire database. Where a vendor publishes no pricing API — Snowflake and BigQuery, which is inconvenient, since they're the two people ask about most — it carries the published rate card instead, badged differently so you can see which is which. Every figure on the site links to where it came from and the date it was last confirmed.
Two things I care about more than the feature list:
- If a vendor's API starts failing, the site keeps the last confirmed value with its original date and flags the refresh as failing. It never carries a stale number forward as if it were fresh, and it never guesses.
- Rankings are computed before rendering, so there is no step between the arithmetic and the HTML where a commercial relationship could reach a number. There are no affiliate links.
It's static — Astro on Cloudflare Pages, no backend. The dataset is public here:
The cost model is where I'd most like to be wrong. It assumes a workload shape (BI dashboards, nightly ELT, always-on analytics) and doesn't model caching, concurrency or compression. If you run one of these in production and the number looks off, tell me how and I'll fix the model.
I kept rebuilding the same spreadsheet. Every time someone asked "is Snowflake cheaper than BigQuery for this," I'd go find a comparison article, notice it was from last year, and start over in a spreadsheet I'd then lose.
So the site is built so that no human ever types a price. A scheduled job reads each vendor's pricing API daily and writes the numbers into a committed JSON file that is the entire database. Where a vendor publishes no pricing API — Snowflake and BigQuery, which is inconvenient, since they're the two people ask about most — it carries the published rate card instead, badged differently so you can see which is which. Every figure on the site links to where it came from and the date it was last confirmed.
Two things I care about more than the feature list:
- If a vendor's API starts failing, the site keeps the last confirmed value with its original date and flags the refresh as failing. It never carries a stale number forward as if it were fresh, and it never guesses.
- Rankings are computed before rendering, so there is no step between the arithmetic and the HTML where a commercial relationship could reach a number. There are no affiliate links.
It's static — Astro on Cloudflare Pages, no backend. The dataset is public here:
https://bigdataexplained.com/api/pricing.json
and the full price history here:
https://bigdataexplained.com/api/history.jsonl
Check my math, or just take the data.
The cost model is where I'd most like to be wrong. It assumes a workload shape (BI dashboards, nightly ELT, always-on analytics) and doesn't model caching, concurrency or compression. If you run one of these in production and the number looks off, tell me how and I'll fix the model.