BigQuery Slot vs On-Demand Advisor
Find out whether BigQuery Editions slots would cost less than on-demand pricing, using 30 days of your own job history.
Before you start: what to have readyShow
- Thirty days of hourly aggregates from INFORMATION_SCHEMA. The query to produce them is on this page. Thirty days matters: slot commitments are sized against your peaks, and a week does not contain enough of them.
- The right region qualifier. JOBS and JOBS_TIMELINE are region-scoped, so a query against the wrong region returns nothing rather than an error.
- All the projects that share the reservation. A commitment belongs to one administration project and region. Include every project assigned to its reservations.
Everything runs in your browser. Nothing you paste is transmitted. The extract below returns hourly totals only: no query text, no table names, no user identities.
Step 1: run this in BigQuery
-- Finitizer Slot Advisor extract: hourly aggregates only.
-- Returns no query text, no table names, and no user identities.
-- Slot time is booked to the hour it was used (JOBS_TIMELINE), so a job that
-- runs for three hours counts in each of them. Bytes and job counts come from
-- JOBS, by the hour each job was created. Script parents are left out, so a
-- script's statements are counted once.
WITH slot_time AS (
SELECT
TIMESTAMP_TRUNC(period_start, HOUR) AS hour,
SUM(period_slot_ms) AS slot_ms
FROM `region-us`.INFORMATION_SCHEMA.JOBS_TIMELINE_BY_PROJECT
WHERE job_creation_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 31 DAY)
AND period_start >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
AND job_type = 'QUERY'
AND (statement_type != 'SCRIPT' OR statement_type IS NULL)
GROUP BY hour
),
job_totals AS (
SELECT
TIMESTAMP_TRUNC(creation_time, HOUR) AS hour,
COUNT(*) AS jobs,
SUM(total_bytes_billed) AS bytes_billed,
APPROX_QUANTILES(
SAFE_DIVIDE(
total_slot_ms,
NULLIF(TIMESTAMP_DIFF(end_time, start_time, MILLISECOND), 0)
), 100
)[OFFSET(95)] AS p95_job_avg_slots
FROM `region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE creation_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)
AND job_type = 'QUERY'
AND (statement_type != 'SCRIPT' OR statement_type IS NULL)
AND total_slot_ms IS NOT NULL
GROUP BY hour
)
SELECT
COALESCE(j.hour, s.hour) AS hour,
IFNULL(j.jobs, 0) AS jobs,
IFNULL(j.bytes_billed, 0) AS bytes_billed,
IFNULL(s.slot_ms, 0) AS slot_ms,
j.p95_job_avg_slots AS p95_job_avg_slots
FROM job_totals j
FULL OUTER JOIN slot_time s ON s.hour = j.hour
ORDER BY 1;Needs BigQuery Job User (to run a query) and BigQuery Resource Viewer (bigquery.jobs.listAll) on the project, or Resource Viewer on the organization for the whole organization. It reads job metadata, not your tables. INFORMATION_SCHEMA queries are billed like any other query, with a 10 MB minimum, which for 30 days of jobs is usually a fraction of a cent.
Step 2: paste the results
Assumptions
Prices verified 23 Oct 2026. Public list prices in USD for US multi-region, before any discount you have negotiated.
Want this done on your real bill?
BigQuery Slot Management: We pick the right BigQuery pricing model for each project, then set it up and tune it. From $1,500, fixed. Nothing paid upfront.
How the model works
For every 50-slot baseline candidate, the model walks your hourly demand and charges the baseline continuously plus any autoscaled overflow, rounded up to the next 50 slots. It keeps the cheapest baseline per edition, then compares the winner against your on-demand cost for the same period. Four choices push the answer toward not moving:
- Idle hours are counted. The extraction query only returns hours that ran something, but baseline slots bill through the quiet ones, so missing hours are refilled as zero-demand before simulating. Skipping this is the easiest way to overstate savings.
- Demand is inflated by a slot-efficiency haircut. Autoscaling bills the slots it adds, not the slots your queries use. The saving is shown at 85% efficiency (you can change it) and at 65%, with the point where it breaks even.
- Hourly resolution understates bursts. Autoscaled slots bill for at least 60 seconds each time, which hourly averages cannot see. Short dashboard queries can cost several times the estimate unless fluid scaling is on, and every Editions verdict says so.
- List prices only. No committed-use or enterprise discount is applied to either side.
The verdict leads with pay-as-you-go autoscale, which you can undo; a commitment is listed as an optional extra. Before committing, run pay-as-you-go autoscale for two weeks and compare period_autoscale_slot_seconds in INFORMATION_SCHEMA.RESERVATIONS_TIMELINE with this estimate.
Questions
Should I use BigQuery on-demand or Editions slots?
On-demand bills scanned bytes; Editions bills slot-time. Editions usually wins for steady, high-utilization workloads where reserved capacity stays busy, and loses for intermittent ones where baseline slots bill through idle hours. The crossover depends on your workload shape, not just your spend, which is why this tool asks for hourly slot data rather than a single monthly number.
How many BigQuery slots do I need?
Divide your total slot-milliseconds in an hour by 3,600,000 to get average concurrent slots for that hour. The right baseline is not the peak; it is the level above which autoscaling is cheaper than paying for idle capacity, which this tool finds by testing every 50-slot increment against your actual hourly demand.
Is BigQuery flat-rate pricing still available?
No. Flat-rate and the legacy flex slots were replaced by Editions (Standard, Enterprise, and Enterprise Plus). Standard is autoscaling only. Enterprise and Enterprise Plus can add a baseline and capacity commitments, whose discounts apply to baseline slots only. Google also sells spend-based BigQuery CUDs, which this tool does not model.
How does BigQuery autoscaling billing work?
Slots are added above your baseline in increments of 50 and carry a one-minute minimum billing period by default. You pay for the slots autoscaling adds, not the slots your queries use. Baseline slots bill continuously whether or not any query runs. That is why a bursty workload can cost more under Editions than its average slot usage suggests. BigQuery fluid scaling, which you opt into per reservation, removes the one-minute minimum but keeps the 50-slot steps, so it shrinks that penalty. This tool has an option for it.
Does this include BigQuery storage costs?
No, and deliberately. Editions and on-demand differ only in how compute is billed; storage, streaming inserts, and BI Engine cost the same under both. Including them would add the same number to both sides and change no decision, so both figures here are compute only and will not reconcile to your total BigQuery bill.
Is it safe to paste my BigQuery data into this page?
The extraction query returns hourly aggregates only, job counts, bytes billed, and slot-milliseconds. It contains no query text, no table or dataset names, and no user identities. All computation happens in your browser and none of the pasted data is transmitted anywhere.
Related tools
BigQuery Query Cost Analyzer
What a query costs, and which part of it drives the price.
OpenBigQuery FinOps Query Pack
Copy-paste SQL for the BigQuery cost questions you need answered fast.
OpenGCP Sustained & Committed Use Discount Calculator
A commitment replaces your sustained-use discount. It does not add to it.
OpenMore tools for: Analytics and warehouses, Pricing and commitments
This is a 30-day snapshot. Your workload moves.
Finitizer re-evaluates the slot decision continuously, catches the drift that makes a good commitment go bad, and finds the specific queries driving your scan volume, including an AI rewriter that shows the cheaper version of each one. Read-only and keyless.
See how Finitizer works