Shopify Server-Side Tracking: What GA4 Gets Now and What It Still Misses Showcase Image

Back to articles

Shopify Server-Side Tracking: What GA4 Gets Now and What It Still Misses

Shopify Server-Side Tracking: What GA4 Gets Now and What It Still Misses Portfolio Feature 2
Ollie Ody

Since July, Shopify has been posting the purchase event straight from its own servers into GA4, with no browser involved. From 17 August the Google & YouTube app widens the feed again, adding four more ecommerce events. For a brand with no tracking build behind it, both changes are worth having. For anyone running paid media at scale, selling on subscription, or trading across several markets, the harder half of measurement still has to be built by hand.

What changed in the Shopify GA4 integration

The purchase event now leaves Shopify's servers

When an order lands in Shopify's database, Shopify sends the purchase event directly to GA4 through Google's Data Manager API. The customer's browser never touches it. Stores with the Google & YouTube app installed were switched on by default in July, with no merchant action required.

Shopify Server-Side Tracking: What GA4 Gets Now and What It Still Misses Project Visual 3

That matters because browser-side tracking quietly loses orders. Industry estimates put the shortfall at somewhere between 10 and 20 per cent of actual Shopify revenue, thanks to ad blockers, Safari's tracking prevention, and shoppers closing the tab before the thank-you page renders. Every one of those lost purchases also breaks the CRO work sitting on top of it, because you cannot call an A/B test on numbers that undercount conversions unevenly.

Deduplication is handled for you. If the browser and the server both report the same order, GA4 matches on transaction ID and counts it once.

Four more events join the feed on 17 August

Google emailed merchants at the start of August to say the app would start sending four additional events: view_item_list when someone opens a collection, view_cart when they look at the basket, remove_from_cart when they take something out of it, and add_shipping_info at the address step of checkout.

Before this, the default mapping covered page_view, view_item, add_to_cart, begin_checkout and purchase. Collection browsing, cart behaviour and the shipping step all sat outside it, which left three holes in the middle of the funnel for any brand relying on the native app.

Five existing events also gain parameters, including sku, variant_id, coupon, payment_type and market_id. Every event the app sends now carries a shopify_event_name parameter naming the original Shopify event that triggered it, which is the one reliable way to tell app-sent events apart from anything your own container is firing.

What the native setup does well

Credit where it is due. A store with no analytics engineer now gets collection and cart tracking it never configured, plus a purchase event that survives an ad blocker, at no cost and with no work. Three years after the app was rebuilt for GA4, the basic event set is close to complete.

If you are early stage, spending modestly on paid, and your reporting question is roughly "where do people drop off", this is enough. Switch it on and get on with trading.

Where the native setup runs out of road

The announcement has been read in some quarters as the end of custom tracking work. It is not. Google's own wording expands the range of events captured; it says nothing about how they travel.

Only the purchase is server-side

Every event on the new list still depends on the browser. A blocked script or a declined cookie banner severs the thread long before an order completes, so you keep the transaction and lose the path that produced it. Partners who published the merchant email, Littledata's Edward Upton among them, made the same point within hours: the funnel got wider, not sturdier.

The new browser events also lean on your front end. Heavily customised themes, headless builds and third-party checkout apps are all capable of breaking them, and you will not find out from a report that simply looks a bit thin.

Shopify Markets reporting stays coarse

There is no way to route different markets into separate Analytics properties. The new market_id parameter helps, but it reports an internal identifier rather than the market's own handle, so anyone running a genuine multi-market operation still needs a mapping layer to make the data readable. Brands trading across borders will recognise this from every other part of a Shopify Markets setup.

Subscription and post-purchase orders need checking

Recurring charges and post-purchase upsells have never had a browser session to fire from, so they were absent from the old feed entirely. Whether the server channel now picks them up is worth testing on your own store rather than assuming, because both answers create work: absent, and your GA4 revenue understates the business; present, and you have conversions arriving with no session attached to them.

Either way the figure in GA4 will not match what Recharge or Skio reports. For brands where Shopify subscriptions carry most of the revenue, that gap is the whole picture rather than a rounding error.

You cannot shape what Shopify sends

Events can be hidden once they land in GA4. What Shopify pushes into the server-side feed in the first place is not yours to change. Splitting out a wholesale channel, reporting on margin instead of top-line revenue, getting custom product metafields into GA4: none of that lives in what Google ships by default, and none of it is on the roadmap.

RequirementNative Google & YouTube appServer-side build
Purchase event survives ad blockersYesYes
Upper-funnel events survive ad blockersNoYes
Feeds Meta, TikTok and PinterestNoYes
Identifiers persist past Safari's cutoffNoYes
Custom events and product metafieldsNoYes
Margin and wholesale channel reportingNoYes
Raw, unsampled data in BigQueryNoYes
Setup costNoneBuild and maintenance

The reporting trap in this quarter's numbers

Here is the part that will cause arguments in board packs this autumn. When the server-side purchase event starts recovering orders the browser used to lose, GA4 conversion volume climbs. Nothing has happened to demand.

Run August 2026 against August 2025 and organic conversion rate, paid ROAS and channel mix all shift on the same day, for reasons that have nothing to do with trading. Anyone comparing a period after July to a period before it is comparing two different measurement systems.

Annotate the property with the date the server-side connection went live, tell whoever reads the reports before the data lands, and keep Shopify as the source of truth for revenue and orders. That is the discipline behind every metric worth acting on, and we have written about the wider set in our guide to ecommerce metrics for DTC brands.

What a proper server-side setup adds

A dedicated server-side implementation, whether that is a hosted GTM container or a managed tracking platform, does several things the native app does not:

  • Sends data to every platform that needs it, Meta and Google Ads included, rather than Google's ecosystem alone
  • Covers the whole funnel server-side, not the final step on its own
  • Rebuilds attribution the browser throws away, keeping identifiers alive well past Safari's cutoff
  • Hashes personal data before anything leaves your own infrastructure
  • Lands raw, unsampled data in BigQuery, where the GA4 interface cannot reach
  • Runs on servers you control rather than a shared pipeline you cannot inspect

None of that removes the need to decide what you are measuring and why. Tooling choices come after that question, and we have compared the main options in our rundown of DTC attribution tools.

What to do this week

If you have no dedicated tracking build

Leave the app connected and check the four new events actually fire on your theme. Run a test order, watch the events land, and confirm your collection pages trigger view_item_list. Then annotate the property so the step change in conversions is documented before anyone spots it in a report.

If you run a custom GTM container

Check for collisions first. A hardcoded tag firing outside the app can still produce duplicates, and the new events may overlap with ones you already send. Use shopify_event_name to tell the two sources apart, and if you would rather the native integration stayed out of the way, disconnect the GA4 property in the Google & YouTube app settings.

If measurement is holding decisions up

Start with the reports you cannot currently produce, not the tools. Margin by channel, subscription revenue against one-time, wholesale split out from DTC, performance by market: work backwards from those and the shape of the build follows. Most of the tracking projects we pick up start as a reporting problem someone has stopped trying to solve.

Frequently asked questions

Does the Shopify Google & YouTube app send GA4 data server-side?

Only the purchase event. Since July 2026, Shopify posts completed orders straight to GA4 through Google's Data Manager API, bypassing the customer's browser. Every other event in the feed, including the four added in August, still relies on browser-side tagging and can be lost to ad blockers, privacy browsers or a declined cookie banner.

Which events does the Shopify GA4 integration track from 17 August 2026?

The app adds view_item_list for collection views, view_cart for cart page views, remove_from_cart for cart removals and add_shipping_info at the checkout address step. These sit alongside the existing page_view, view_item, add_to_cart, begin_checkout and purchase events. No merchant action or opt-in is required.

Will server-side tracking create duplicate purchases in GA4?

Not from the native integration. GA4 matches the transaction ID on events arriving from both the browser and Shopify's servers and counts the order once. Duplicates are still possible where a legacy hardcoded tag fires outside the Google & YouTube app, so any store with an older container should audit its tags before assuming deduplication is handling it.

Why have my GA4 conversions gone up without more sales?

Because the server-side purchase event recovers orders browser tracking used to lose, typically 10 to 20 per cent of actual Shopify revenue. Conversion volume rises without any change in demand. Year-on-year comparisons that straddle July 2026 compare two different measurement systems, so annotate the property with the switch-on date and brief stakeholders early.

Does the native integration cover Meta and TikTok?

No. The server-side connection feeds Google's ecosystem only. Meta's Conversions API, TikTok's Events API and any other platform you buy media on each need their own server-side implementation. For brands spending meaningfully across several channels, that is the point at which a dedicated tracking build stops being optional.

What Google shipped closes a real gap for stores that never had a tracking setup worth the name. The part that decides budgets, tied to margin, market structure and channel mix, still has to be built. If your reporting cannot answer a question your board is asking, that is a build problem rather than an app problem, and it is the work we do for DTC brands every week.

Talk to us about your measurement setup.