Google Analytics 4 (GA4) promised modern event-driven tracking, but marketing teams quickly discover its painful operational compromises: severe UI data thresholding, aggressive exploration report sampling, and a strict 14-month historical data retention ceiling. In Universal Analytics, exporting raw hit-level data required a $150,000/year GA360 enterprise license. With GA4, Google unlocked a native, free direct pipeline to Google BigQuery. When configured properly, you can stream unsampled raw hit-level event data into BigQuery indefinitely without paying a single dollar in Google Cloud Platform (GCP) fees.
Executive Answer: How to Stream GA4 to BigQuery for Free
To export GA4 to BigQuery for free, create a Google Cloud Project, enable the BigQuery API, link your GA4 property via Product Links, and configure the Daily Batch Export (up to 1 million events/day). Avoid streaming export charges by relying on GCP’s permanent Always Free Tier (10 GB monthly storage and 1 TB query data processed).

1. Why the Native GA4 Interface Is Broken for High-Growth Brands
The GA4 standard web interface relies on aggressive heuristic sampling, data thresholding, and automated user grouping that obscures true marketing attribution. Exporting raw event rows into BigQuery bypasses UI constraints entirely, providing row-level customer journey data.
Every performance marketer running campaigns across Meta, Google Ads, and LinkedIn encounters three critical GA4 UI bottlenecks:
- 14-Month Data Retention Limit: In the standard GA4 UI, exploration reports delete user-level event data after 14 months. Without BigQuery, Year-over-Year (YoY) multi-year cohort analysis is technically impossible.
- Google Signals Data Thresholding: When Google Signals is enabled, GA4 hides event rows and displays warning icons if audience numbers fall below privacy thresholds, blinding you to niche campaign conversions.
- Exploration Sampling: When querying complex multi-step checkout funnels, GA4 samples data if event counts exceed 10 million events, resulting in estimated rather than factual numbers.
2. Google Cloud Always Free Tier Limits vs. GA4 Export Volume
Google Cloud provides an Always Free Tier that comfortably accommodates the data pipeline requirements of small-to-medium businesses. However, exceeding storage or query thresholds triggers automated billing.
| GCP Resource | Always Free Quota | Cost When Exceeded | How to Keep It 100% Free |
|---|---|---|---|
| Active Table Storage | 10 GB per month | ~$0.02 per GB / month | Set partition expiration to 365 days; compress old tables. |
| Query Data Scanned | 1 TB (1,000 GB) per month | $6.25 per TB scanned | Filter by _TABLE_SUFFIX; never run unpartitioned SELECT *. |
| Daily Batch Export | 1,000,000 events / day | Export drops or requires GA4 360 | Exclude noisy high-frequency events (e.g., scroll, user_engagement). |
| Real-Time Streaming Insert | Zero Free Tier | $0.05 per 200 MB inserted | Disable Streaming Export. Rely strictly on Daily Batch. |
3. Step-by-Step Setup Guide: Linking GA4 to Google BigQuery
Step 1: Create a Google Cloud Project & Enable BigQuery API
- Log into the Google Cloud Console using the same Google account that possesses Administrator permissions on your GA4 property.
- In the top project dropdown, click “NEW PROJECT”. Name it
analytics-warehouse-productionand click Create. - Navigate to APIs & Services > Library, search for “BigQuery API”, and click Enable.
Step 2: Link GA4 to Your Cloud Project
- Open your Google Analytics property.
- Click Admin (gear icon bottom left) > scroll down to Product Links > click BigQuery Links.
- Click the blue “Link” button in the upper right.
- Click “Choose a BigQuery project”, select your newly created GCP project, and click Confirm.
- Select Data Location: Choose a multi-region or regional location closest to your legal domicile (e.g.,
US (multiple regions)orEU (multiple regions)). Warning: Data location cannot be changed after creation.
Step 3: Configure Export Frequency & Exclude Bloat Events
- Check the box for Daily Export.
- Uncheck “Streaming Export” unless you require sub-minute real-time dashboards and are willing to pay BigQuery insert costs.
- Under “Exclude items”, optionally exclude redundant high-volume events like
scrollorsession_startif your property borders the 1,000,000 daily event limit. - Click Submit. Within 24 hours, Google Analytics will provision a dataset named
analytics_<property_id>inside BigQuery.
4. Writing Production SQL: How to Unnest GA4 Event Parameters
GA4 stores event parameters inside repeated nested record arrays (event_params). Extracting custom dimensions requires SQL unnesting rather than simple column selection.
Below is the production SQL boilerplate to extract transaction revenue, campaign UTM parameters, and custom dimensions without data sampling:
-- Production BigQuery SQL to extract unsampled conversions
SELECT
event_date,
TIMESTAMP_MICROS(event_timestamp) AS event_datetime,
event_name,
user_pseudo_id,
-- Unnest Campaign UTM
(SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'campaign') AS campaign,
(SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'source') AS source,
(SELECT value.string_value FROM UNNEST(event_params) WHERE key = 'medium') AS medium,
-- Unnest Transaction Value
event_value_in_usd,
(SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_id') AS session_id
FROM
`analytics_YOUR_PROPERTY_ID.events_*`
WHERE
-- Query partition filter: Scans only the last 7 days to preserve free 1TB quota
_TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 7 DAY))
AND FORMAT_DATE('%Y%m%d', CURRENT_DATE())
AND event_name = 'purchase'
ORDER BY
event_datetime DESC
LIMIT 500;
5. Frequently Asked Questions (FAQ)
Is BigQuery Sandbox completely free without a credit card?
Yes, but Sandbox tables auto-expire after 60 days. To preserve multi-year data retention, link a standard GCP billing account (with credit card) and set up automated $1 budget alerts. As long as your storage stays under 10 GB and queries stay under 1 TB/mo, your invoice remains $0.00.
What happens if I exceed 1,000,000 events in a single day?
The daily export will stop for that day. Standard GA4 properties enforce a hard daily limit of 1 million events. If your site experiences massive traffic spikes, consider filtering out minor interaction events or upgrading to GA4 360.
How do I calculate total annual savings from avoiding GA4 360 or third-party CDPs?
Estimate your marketing tech stack consolidation and ROI via our Interactive SaaS Cost Calculator.
Perform an Analytics & Infrastructure Teardown
Are your ad campaigns suffering from misattributed conversions, data sampling, or broken GTM pipelines? Consult with our performance engineering team or schedule a comprehensive diagnostic review through our Zelobiz Agency Infrastructure Audit.
Discover more technical workflow blueprints in the How-To Guides Hub or analyze media budgets via our Interactive ROAS Calculator.
To eliminate GA4 sampling and standard 14-month data retention limits, pair this BigQuery pipeline with our Server-Side Attribution Tracking Blueprint and calculate your cloud storage savings via our SaaS Cost Calculator.