Skip to content

Pitfall #3: No Quota = No Safety Net

By Timo Dechau · Last updated March 25, 2026

You’ve enabled billing on your BigQuery project. Maybe you’ve even set up a budget alert or two. But you haven’t touched the query quota settings, because honestly, you didn’t know they existed. Then someone on your team runs a bad query — a full scan across two years of GA4 data, joined to itself, no date filter. Or a scheduled query breaks and starts retrying in a loop. Google’s default daily query limit for BigQuery is 200 TB. At on-demand pricing, that’s roughly $1,250 in a single day. And that’s per project, not per organization — so multiply it by however many projects have billing enabled.

Google sets generous defaults because they’re optimizing for “it just works” — not for “protect the customer’s wallet.” 200 TB per day is a limit most people will never hit through normal usage. But “normal usage” and “someone made a mistake” are very different things. A recursive CTE that blows up, a BI tool that generates cartesian joins behind the scenes, an intern exploring the data with SELECT * — these things happen. And without a quota, there’s nothing between that mistake and your credit card.

The other issue is that budget alerts in GCP are notifications, not enforcement. A budget alert at $100/month will send you an email when you cross the threshold. It will not stop the query. It will not prevent the next one. By the time you read that email, the damage may already be done.

Set two types of quotas immediately:

1. Project-level daily query quota:

Go to GCP Console > IAM & Admin > Quotas (or search for “BigQuery API” quotas). Find “Query usage per day” and set it to something reasonable. For most GA4 analytics workloads, 1 TB/day is a sensible starting point. That’s about $6.25/day at on-demand pricing. You can always increase it later — but you can’t un-scan terabytes.

2. Per-user daily query quota:

In the same quota settings, find “Query usage per day per user.” Set this lower than the project quota — maybe 500 GB or even 100 GB. This way, one person’s mistake can’t consume the entire project’s budget.

3. Set up budget alerts at multiple thresholds:

Go to Billing > Budgets & Alerts and create a budget for the project:

  • Alert at 50% of your monthly budget
  • Alert at 80%
  • Alert at 100%
  • Alert at 200% (yes, you can exceed your budget — alerts don’t stop spending)

Here’s the thing — these alerts are necessary but not sufficient. They tell you there’s a fire. The quotas are what actually prevent the fire from burning the house down.

4. Consider slot-based pricing for predictability:

If your team queries GA4 data heavily, BigQuery Editions (with committed slots) give you a flat-rate pricing model. You buy a fixed amount of compute capacity. Queries might queue or run slower if you exceed your slots, but your bill stays predictable. For teams running lots of scheduled queries and dashboards against GA4 data, this often ends up cheaper and safer than on-demand pricing.

Go to GCP Console and check your current settings:

  1. Check query quotas: Navigate to IAM & Admin > Quotas > filter for “BigQuery API” > look for “Query usage per day.” If it says 200 TB (or unlimited), you’re running without a safety net.

  2. Check budget alerts: Navigate to Billing > Budgets & Alerts. If you see nothing there, you have no alerts configured at all.

  3. Check what you’ve actually been spending:

SELECT
DATE(creation_time) AS query_date,
user_email,
COUNT(*) AS query_count,
ROUND(
SUM(total_bytes_processed) / POW(1024, 4), 3
) AS tb_scanned,
ROUND(
SUM(total_bytes_processed)
/ POW(1024, 4) * 6.25,
2
) AS estimated_cost_usd
FROM
`region-us`.INFORMATION_SCHEMA.JOBS_BY_PROJECT
WHERE
creation_time > TIMESTAMP_SUB(
CURRENT_TIMESTAMP(), INTERVAL 30 DAY
)
AND job_type = 'QUERY'
AND state = 'DONE'
GROUP BY query_date, user_email
ORDER BY tb_scanned DESC
LIMIT 30;

This shows your actual query volume by user over the last 30 days. Look at the estimated_cost_usd column. If any single day or user surprises you, that’s exactly why you need quotas.

I’ll admit, setting quotas feels like busywork when you’re excited to start analyzing data. But I’ve seen a single afternoon of careless queries cost more than a team’s entire monthly analytics budget. Five minutes in the GCP Console now can save you a very uncomfortable conversation with finance later.