It sounds logical: want to count new users in GA4 BigQuery? Just filter by the first_visit event, count distinct user_pseudo_id, and done.
Clean. Simple. Elegant.
But... not quite.
That’s a trap. A gentle, well-lit trap with a sign that says “You’re doing great!”
But it’s still a trap.
Here’s why relying on first_visit can be misleading:
• first_visit ≠ new user. This event is triggered per device. If the same person visits from their phone and later from their laptop, you’ll see two first_visit events — but it’s still one user (assuming you’re lucky and have User-ID properly configured).
• first_visit can arrive late. It may show up retroactively, especially if the user was offline or the data comes from a mobile SDK. So you might miss them initially, only to have them “resurface” later.
• first_visit is an event, not a status. You’re capturing a moment, not a user’s real “newness.” It’s like counting everyone who says “hi” as a new employee — fun, until HR has a breakdown.
So what’s the right way to count new users?
• use user_id with proper deduplication.
• use event_timestamp WHEN ga_session_number=1 for each user_pseudo_id - if there is no chance to make cross-device deduplication.
• Filter for users whose first-ever event occurred during your target period
Alternatively, you can rely on user_first_touch_timestamp if it’s available — it tends to be more reliable and less surprising.
Takeaway:
GA4 gives you first_visit as a hint. BigQuery gives you the tools to verify it — and maybe even challenge how you think about your metrics.
Because what looks like a first visit… might not be the first. Or a visit. You got it.
Want to get all my top Linkedin content? I regularly upload it to one Notion doc.
Go here to download it for FREE.


