The GA4 BigQuery export copies every raw event from your GA4 property into a BigQuery database: each page view, add to cart and purchase, with its parameters, device, source and consent state. For a Shopify store, linking it is free and takes ten minutes, and storage usually costs a few cents to a few euros a month. The real question is whether anyone will use it. This guide explains what the GA4 BigQuery export gives a Shopify store that the GA4 interface doesn’t, what it costs, how to set it up, and the first queries to run.
Short answer: link it today, even if you won’t use it for months, because it only starts collecting from the day you link it. Invest analysis time in it once you spend real money on ads or need numbers GA4’s reports can’t give you.
What the export gives you that GA4 reports don’t
| Problem in GA4’s interface | What BigQuery gives you |
|---|---|
| Data thresholds hide rows when Google signals is on | Every event, with no thresholds |
| Explorations are sampled on large date ranges | Raw, unsampled data |
| Explorations only go back 2 or 14 months, depending on your retention setting | History you keep as long as you want |
| You can’t list which orders GA4 missed | Every transaction_id, to compare with your Shopify orders |
| GA4’s attribution is a black box | The session and user sources, so you can build your own rules |
| Looker Studio hits GA4 API quotas | A data source with no quotas |
| GA4 can’t see margins, refunds or repeat orders | A place to join GA4 with your Shopify data |
Five uses that pay off for Shopify stores
1. Find out which orders GA4 misses
GA4 always shows fewer purchases than Shopify. In the interface, you can only see the gap. In BigQuery, you can list every transaction_id GA4 received, compare it with your Shopify order export, and see what the missing orders have in common: payment method, device, browser, country, customer type. That tells you whether you have a consent effect, a broken payment flow or a tracking bug. The reasons are explained in why GA4 shows fewer purchases than Shopify.
2. Find duplicates and broken purchases
Purchases with the same transaction ID sent twice, purchases with zero revenue, wrong currency or no items: one query finds them all, with the exact dates they started. See duplicate purchase events on Shopify.
3. Debug attribution
When purchases show up as Direct or Unassigned, BigQuery shows where the session started. If many purchase sessions start on the checkout, your client ID or session ID breaks between the store and the checkout. The query is in Shopify purchases attributed to Direct or Unassigned.
4. Customer value by first source
GA4 knows which channel first brought each user. Shopify knows what they spent afterwards, including repeat orders, refunds and margin. Joined in BigQuery, they answer the question ad platforms can’t: which channel brings customers who come back.
5. Reporting without API quotas
Looker Studio dashboards built on the GA4 connector show “quota exceeded” errors as soon as several people use them. Built on BigQuery tables, they don’t. See a Looker Studio dashboard for Shopify and GA4.
What the export doesn’t do
- No history. The export starts on the day you link it. You can’t backfill earlier data, and you can’t re-export a day that failed.
- No modeled data. Consent Mode modeling, Google signals and GA4’s data-driven attribution aren’t in the export. Numbers will be close to your reports, but not identical.
- Cookieless pings are included. With Consent Mode in advanced mode, events sent without consent are in the export, without a persistent user ID. Filter or count them separately.
- It doesn’t fix tracking. If GA4 receives bad data, BigQuery stores bad data. Fix the collection first.
- It needs SQL. The data is nested: event parameters and items are arrays. Without someone who writes SQL, or a tool on top, it stays unused.
What it costs
Google doesn’t charge for the export itself. You pay BigQuery for storage, for queries, and for streaming if you turn it on.
| Cost | How it’s billed | Typical Shopify store |
|---|---|---|
| Daily export | Free | 0€ |
| Storage | Per GB stored per month, with a free monthly allowance (10 GB at the time of writing) | Often free in year one, then a few euros a month |
| Queries | Per TB of data scanned, with a free monthly allowance (1 TB at the time of writing) | Free if queries filter on dates |
| Streaming export | $0.05 per GB, about 600,000 events per GB | Cents to a few euros a month |
As a rough guide, 1 GB holds about 600,000 GA4 events. A store with 100,000 sessions a month and around 30 events per session generates about 3 million events, or 5 GB, a month. Check Google Cloud’s current BigQuery pricing for your region before you start.
The one real cost risk is queries that scan everything. Always filter with _TABLE_SUFFIX on dates, select only the columns you need, and set a budget alert in Google Cloud billing.
The free sandbox
You can start without a credit card in the BigQuery sandbox. It has two limits that matter: tables expire after 60 days, and streaming isn’t supported. It’s fine to try queries, not to keep history. Add billing once you decide to keep the data.
The 1 million events limit
Standard GA4 properties can export up to 1 million events a day with the daily export. A store that regularly goes over it gets its daily export paused. Streaming export has no limit. If you get close, exclude events you don’t need from the export, such as scroll or user_engagement, or switch to streaming. Most Shopify stores are well under the limit.
When it’s worth it
| Your situation | Recommendation |
|---|---|
| Any store with GA4 | Link the daily export now. It’s free, and you’ll have history when you need it. |
| Small store, no ad spend, nobody writes SQL | Don’t spend time on analysis yet. GA4 reports and Shopify Analytics are enough. |
| Running paid ads, GA4 misses more orders than you can explain | Worth it: reconcile orders and find the cause. |
| Thresholds hide data in your reports | Worth it: BigQuery has no thresholds. |
| You want customer value by channel, or margin-based reporting | Worth it, with Shopify data loaded next to GA4. |
| Several stores or markets to report on together | Worth it: one dataset per property, one set of queries. |
| You need real-time data | Add streaming export, knowing it’s best-effort and can have gaps. |
How to set it up
- Create a Google Cloud project at console.cloud.google.com, or use an existing one. Enable the BigQuery API.
- Add billing to the project, or start in the sandbox. Without a valid payment method, exports beyond the sandbox can stop, and missed days can’t be re-exported.
- In GA4, go to Admin → Product links → BigQuery links and click Link. You need to be an Owner of the Cloud project and an Editor of the GA4 property.
- Choose the project and the data location. For European stores, choose an EU location. You can’t change it later without creating a new link.
- Choose the export frequency: Daily, and Streaming only if you need same-day data.
- Exclude events you never analyse, if you’re close to the limit.
- Submit. Data usually arrives within 24 hours in a dataset called
analytics_<property ID>, with oneevents_YYYYMMDDtable per day.
The daily table usually arrives during the afternoon of the next day, in your property’s time zone, and GA4 can update it for up to two more days with late events. Don’t report on yesterday’s table first thing in the morning.
Your first queries
Replace your-project.analytics_123456789 with your project and dataset.
Purchases and revenue by day
SELECT
event_date,
COUNT(DISTINCT ecommerce.transaction_id) AS purchases,
ROUND(SUM(ecommerce.purchase_revenue), 2) AS revenue
FROM `your-project.analytics_123456789.events_*`
WHERE _TABLE_SUFFIX BETWEEN '20261101' AND '20261130'
AND event_name = 'purchase'
GROUP BY event_date
ORDER BY event_date;
Put these numbers next to Shopify’s online store orders for the same days. The ratio is your capture rate.
Transaction IDs to compare with Shopify
SELECT
ecommerce.transaction_id,
MIN(TIMESTAMP_MICROS(event_timestamp)) AS first_seen,
ANY_VALUE(device.category) AS device,
ANY_VALUE(device.web_info.browser) AS browser,
ANY_VALUE(geo.country) AS country
FROM `your-project.analytics_123456789.events_*`
WHERE _TABLE_SUFFIX BETWEEN '20261101' AND '20261130'
AND event_name = 'purchase'
GROUP BY 1;
Export it and match it with your Shopify orders export. Check first which identifier your setup sends: the order ID, the order number, or the order name such as #1001. The orders with no match are the ones GA4 missed.
Duplicate purchases
SELECT
ecommerce.transaction_id,
COUNT(*) AS times_sent
FROM `your-project.analytics_123456789.events_*`
WHERE _TABLE_SUFFIX BETWEEN '20261101' AND '20261130'
AND event_name = 'purchase'
GROUP BY 1
HAVING COUNT(*) > 1
ORDER BY times_sent DESC;
Revenue by the channel that first brought the user
SELECT
traffic_source.source,
traffic_source.medium,
COUNT(DISTINCT user_pseudo_id) AS buyers,
ROUND(SUM(ecommerce.purchase_revenue), 2) AS revenue
FROM `your-project.analytics_123456789.events_*`
WHERE _TABLE_SUFFIX BETWEEN '20260101' AND '20261130'
AND event_name = 'purchase'
GROUP BY 1, 2
ORDER BY revenue DESC;
The traffic_source fields hold the user’s first acquisition source, not the session source. It’s the basis for customer value by channel.
Adding Shopify data
Shopify doesn’t export to BigQuery natively. To load orders, customers, refunds and products next to GA4, use a connector: Fivetran, Airbyte, Coupler.io, Supermetrics and others load Shopify data on a schedule. Then join on the transaction ID for order-level reconciliation, and on the customer for repeat purchases and lifetime value. That’s where BigQuery starts to answer questions no other tool can.
Frequently asked questions
Is the GA4 BigQuery export free?
The export is free. BigQuery charges for storage, queries and streaming above its free monthly allowances. Most Shopify stores pay nothing or a few euros a month.
Can I get my past GA4 data into BigQuery?
No. The export starts on the day you link it. That’s why it’s worth linking now, even if you won’t use it yet.
Why don’t BigQuery numbers match GA4 reports exactly?
Reports include modeled data, apply thresholds and use GA4’s attribution. The export has raw events only. Small differences are normal. Large ones usually come from how the query counts users or sessions.
Do I need GA4 360 for BigQuery?
No. Standard properties have the daily and streaming exports. 360 adds a higher daily limit and the fresh daily export.
Should I use the sandbox?
Only to try it. Tables expire after 60 days, so you lose history. Add billing to keep the data.
Get the data right first
BigQuery is only as useful as the events GA4 receives. If your purchases are duplicated, missing or attributed to Direct, fix that first: a Shopify tracking audit (from 800€) finds the problems, and a measurement plan (from 1,600€) defines the KPIs and the queries that answer them. Book a free 30-minute call to talk about your reporting.