Why does filtering by timestamp feel more precise?

event_timestamp is a microsecond-level field. It feels accurate, specific. When I first started querying GA4 data, I filtered by timestamp everywhere because it seemed like the right tool for the job.

What actually happens under the hood?

GA4 tables in BigQuery are partitioned by event_date. When you filter with WHERE event_date = '2024-01-15', BigQuery reads only that partition. When you filter with WHERE TIMESTAMP_MICROS(event_timestamp) >= '2024-01-15', partition pruning breaks. BigQuery scans everything.

On a large GA4 export, the difference is between scanning 1GB and scanning 500GB. That difference shows up on your invoice.

What's the correct approach?

Always filter by event_date first for range filtering. Use event_timestamp only when you need sub-day precision within an already date-filtered dataset:

  • WHERE event_date BETWEEN '2024-01-01' AND '2024-01-31'
  • AND TIMESTAMP_MICROS(event_timestamp) > some_specific_time

Two filters. One cheap, one precise.

Why does this matter beyond individual queries?

In teams where multiple analysts query GA4 daily, bad filtering habits compound fast. I've seen monthly BigQuery bills 10x higher than necessary — entirely due to timestamp filtering instead of date filtering. One team convention fixed it permanently.

Want all my best GA4-BQ queries in one place? I turned them into a Chrome extension — top SQL queries you can search and copy in seconds.

Go here to install it for FREE.

Prefer the web version? It’s here.