Shopify to BigQuery: GA4 Export vs Native Pipelines

|Dan Giura
Shopify to BigQuery: GA4 Export vs Native Pipelines

TL;DR

Most guides that promise a Shopify to BigQuery pipeline are describing one of two Google products, and the two answer completely different questions. The GA4 export sends you event rows: sessions, page views, add to carts, purchases, one row per event with every parameter attached. Google's Shopify connector, part of BigQuery Data Transfer Service, sends you the store's own records: orders, transactions, refunds, returns, customers, products. Pick based on the question you are trying to answer, not on which one is easier to turn on, because turning on the wrong one produces a warehouse full of data that cannot answer what you asked.

Key Takeaways

  • Shopify itself ships no BigQuery export. The connector merchants call "the Shopify connector" is Google's, and it runs inside BigQuery Data Transfer Service [3].
  • The GA4 export has three modes: Daily, Fresh Daily on Analytics 360, and Streaming. The 1 million events per day export limit applies to the Daily export on standard properties. Streaming has no such cap [1].
  • Streaming costs $0.05 per GB, roughly 600,000 events per GB, and it excludes new-user and new-session traffic source data [1].
  • The GA4 export does not backfill. It exports nothing from before the link was created, so the day you turn it on is day one of your history [1].
  • The BigQuery sandbox gives you 10 GB of storage and 1 TB of queries a month at no cost, but tables auto-expire after 60 days and streaming is unavailable, which makes it the wrong home for a retention archive [2].
  • Google's Shopify connector needs a custom Shopify app, and it pulls 46 GraphQL resources including Orders, OrderTransactions, Customers, Products, Refunds and Returns [3].
  • The transfer itself carries no cost while the connector is in Preview [3]. Free-while-in-Preview is a status, not a price, and Preview products change.

Shopify Does Not Export to BigQuery. Google Does.

This is the fact that reorders every other decision, and it is the one most merchants arrive with backwards. There is no toggle in the Shopify admin that ships your orders into a BigQuery dataset. What exists is a Google product, BigQuery Data Transfer Service, which added a Shopify source that authenticates into your store and pulls its data on a schedule [3]. Google documents it, Google versions it, Google decides when it leaves Preview.

That matters practically. Support for it comes from Google, not from Shopify. The configuration lives in the BigQuery console under BigQuery → Data transfers → Create transfer, not anywhere in your store admin. And its Preview status means the resource list, the schema and the price can all move before general availability, which is a reasonable thing to build a monthly report on and a poor thing to build a billing reconciliation on.

The GA4 export is the older and better documented of the two. It is also, confusingly, the one people mean when they say "I connected Shopify to BigQuery," because for years it was the only route. It never carried Shopify's own records. It carried what the tag saw.

What the GA4 Export Actually Gives You

Event rows. One per event, with the full parameter payload attached, including parameters you never registered as custom dimensions in the GA4 interface. That last part is the reason analysts turn it on and the reason we keep recommending it as a hedge: the interface only shows you what you thought to register in advance, and the export shows you everything that arrived.

Three export types exist [1]:

Export type Availability Freshness Notable limit
Daily Standard and 360 Once daily, tables updated for up to 2 calendar days plus today after the date 1 million events per day on standard properties
Fresh Daily Analytics 360 only More frequent daily refresh Normal and Large 360 properties; GCP billing required
Streaming Standard and 360 Continuous, best effort Excludes new-user and new-session traffic source data

The 1 million events per day figure gets misquoted constantly. It applies to the Daily export on a standard property. Streaming is not subject to it [1]. Exceeding it consistently pauses the daily export, and the skipped days are not reprocessed [1]. A store doing a few tens of thousands of sessions a month, to take an illustrative case, is nowhere near either boundary, so if you are reading this because someone told you your traffic is too big for the free export, check the number before you buy anything.

Streaming has a real trade-off that the freshness pitch tends to skip. It bills at $0.05 per GB, which Google describes as roughly 600,000 events per GB, and the streaming rows exclude new-user and new-session traffic source data [1]. So the fastest pipeline is also the one that arrives with the least attribution context. If your reason for wanting BigQuery is attribution analysis, Daily is the export you want, and you will wait a day for it.

Which Limits Bite First?

The one that catches people is not a volume cap. It is the absence of a backfill. Google documents no re-export of history collected before the link was created [1], so the warehouse starts on the day you link it and last year is not recoverable. That is the whole case for linking early, and we make it in full in GA4 data retention on Shopify.

The second trap is the sandbox. BigQuery's free sandbox gives you 10 GB of active storage and 1 TB of query processing a month with no credit card, which sounds like the obvious starting point [2]. Two constraints make it the wrong home for a long-horizon archive: tables and partitions auto-expire after 60 days, and the sandbox supports neither streaming nor BigQuery Data Transfer Service, which is what the Shopify connector runs on [2][3]. A sandbox set up to escape a 14-month retention window will quietly delete your data at 60 days. Attach billing to the project if the point of the exercise is keeping history.

You can see the wider cost picture, including what queries and storage run on a billed project, in our piece on when raw data beats dashboards.

What Does Google's Shopify Connector Move?

Store records, via the Shopify GraphQL Admin API. Google's documentation lists 46 resources, and the ones that matter for revenue work are the obvious ones: Orders, OrderTransactions, Customers, Products, Refunds, Returns [3]. A few objects carry prerequisites: gift cards need Shopify Plus, app-subscription objects need a sales-channel app, and two of the discount objects need an app built with the Shopify CLI [3]. The connector supports manual backfill runs [3].

Setup is more involved than the GA4 link because it authenticates as an app rather than through an account connection. You create a custom app in your store, grant it the Admin API scopes covering the resources you want, and supply the app's client ID and secret to the transfer configuration in the console; the bq CLI path takes an Admin API access token instead [3]. In the Shopify admin that path runs through Settings → Apps and sales channels → Develop apps. Those credentials give read access to order and customer data, so treat them the way you would treat any other Admin API credential: one app per purpose, the access scopes Google's list requires and nothing beyond them, and rotated if they ever land somewhere they should not.

Two things to hold in mind. Google's docs page for the connector was last updated on August 12, 2026, and it still carries Preview status. The transfer itself carries no cost while the connector is in Preview [3]. Preview means the feature is usable and Google is not promising the surface will not change. If the connector becomes load-bearing for your accounting, put a note in your own runbook to re-read that docs page each quarter, because the free-while-in-Preview line is the part most likely to move first.

Two Truths, and the Join Between Them

Here is the framing that makes the choice easy. The GA4 export tells you what people did. The Shopify connector tells you what the store recorded. Those are different datasets about the same customers, and they disagree in ways that are structural rather than broken, which we covered in why Shopify and GA4 revenue numbers never match.

Route the question to the dataset that owns it:

Question Dataset that answers it
Which landing pages start sessions that convert GA4 export
Net revenue after refunds and returns Shopify connector
Where a specific order's traffic came from GA4 export
Discount code usage across a quarter Shopify connector
How many product views precede a first purchase GA4 export
Payment method and transaction status per order Shopify connector

The join key is transaction_id on the GA4 purchase event against the order identifier on the Shopify side, which lines up only when the purchase event was sent with the same identifier the store records. Get that right and you can attribute a refunded order back to the campaign that acquired it. That query is the whole reason to run both pipelines rather than one. It is also the query that fails silently when the purchase event never reached GA4 in the first place, because an order with no matching event row simply drops out of the join and takes its revenue with it. If a meaningful share of your orders are unattributed, fix the collection layer before building the warehouse on top of it. We wrote about that failure mode in GA4 (not set) and unattributed orders on Shopify.

You have probably already met this problem in a smaller form, in a GA4 report where the purchase count sat below the Shopify order count and nobody could say why.

Where Third-Party ETL Still Fits

There is a third category: managed ETL connectors that read the Shopify Admin API and write to BigQuery on your behalf, usually priced per row or per connector.

What they sell is coverage of everything else you want in the same warehouse. Your email platform, your ad platforms, your helpdesk, all landing in one project on one schedule with one support contract. If Shopify is the only source you need in BigQuery, a paid connector buys you convenience over a free Preview product. If Shopify is one of eight sources, the cost spreads across all of them and the maths changes.

Evaluate them on how they handle edits and deletions to historical orders, because a refund issued in September against a July order is where naive pipelines get their numbers wrong. Ask the vendor directly.

Do You Actually Need Either One?

Short answer for most stores: not yet, and yes to the free link anyway.

Turn on the GA4 export today if your store has any real traffic. It costs nothing to link, it starts accumulating an archive that no retention setting can erase, and the absence of a backfill means the decision is one-way. That is the closest thing to a free option in this whole area.

Add the Shopify connector when you have a specific question the GA4 export cannot answer, and you will know it when you hit it. Usually it is a finance question: net revenue after returns, cohort value by acquisition month, discount margin.

Skip both if your reporting need ends at "which channel drove revenue last month." The GA4 interface answers that, and a warehouse you query twice a year is more upkeep than it is worth.

One prerequisite sits underneath all of it. Both pipelines are only as good as the events that reach them, and on Shopify the purchase event is the fragile one because browser-side tracking has to survive consent declines, ad blockers and the checkout sandbox. Server-side collection is what keeps the purchase row present for the join.

FAQ

Does Shopify have a native BigQuery export?

No. Shopify does not ship a BigQuery export. The connector commonly described that way is Google's, delivered through BigQuery Data Transfer Service, which authenticates into your store with a custom app and pulls 46 GraphQL resources on a schedule [3].

How much does the GA4 BigQuery export cost?

The Daily export itself is not separately billed, and standard properties are limited to 1 million events per day on it. The Streaming export bills at $0.05 per GB, which Google puts at roughly 600,000 events per GB [1]. BigQuery storage and query charges apply on a billed project regardless of which export type you choose.

Can I export my past GA4 data to BigQuery?

No. The export begins when the link is created and Google documents no re-export of history collected before that point [1]. This is the strongest argument for linking early, before you have a use case.

Is the BigQuery sandbox enough for a Shopify store?

For learning, yes. For an archive, no. The sandbox includes 10 GB of storage and 1 TB of queries a month at no cost, but tables auto-expire after 60 days and streaming is not available [2]. If the goal is keeping data past GA4's retention window, enable billing on the project.

Do I need both pipelines?

Only if you need to connect behavior to finance. Running both lets you join a GA4 purchase event to the store's order record on transaction_id and see net revenue by acquisition channel after refunds. If your questions live entirely on one side of that line, one pipeline is enough.

If purchase events are missing from your GA4 rows before they ever reach BigQuery, the pipeline is not the problem. Install WeltPixel Conversion Tracking to send purchases server-side from the order webhook, so the row exists to join against.

Sources

  1. [GA4] BigQuery Export, support.google.com/analytics/answer/9358801, and [GA4] Set up BigQuery Export, support.google.com/analytics/answer/9823238, both accessed August 24, 2026
  2. Enable the BigQuery sandbox, cloud.google.com/bigquery/docs/sandbox, accessed August 24, 2026
  3. Shopify transfers, BigQuery Data Transfer Service, cloud.google.com/bigquery/docs/shopify-transfer, updated August 12, 2026, accessed August 24, 2026

Ready to upgrade your tracking?

Server-side tracking for Magento and Shopify — accurate data, better attribution, full privacy compliance.