How to Track Shopify Email Campaign Sales in GA4 and Your Ad Platforms Before Black Friday

|Dan Giura
How to Track Shopify Email Campaign Sales in GA4 and Your Ad Platforms Before Black Friday

TL;DR

Shopify Email campaigns carry three UTM parameters by default, which puts a click that keeps them in GA4's Email channel through the medium and counts it as marketing in Shopify through the campaign value [2][3][4]. A Black Friday email drafted in October keeps the October settings. The app sends the purchase to GA4 under the shopper's own session, so the order lands with the visit that carried the UTMs when the shopper pays in that browser during the same visit. The app adds no attribution claim, and Meta and Google Ads may still claim the same order by their own rules.

Key Takeaways

  • Read the scheduled email's link, not the settings page: Shopify says a UTM change "isn't applied to any existing campaigns or draft emails" [2].
  • Keep utm_medium=email; GA4's Email rule needs it [4].
  • Shopify counts visits with utm_campaign in the landing URL as marketing [3], and the default has one.
  • A shopper who clicks on a phone and pays on a laptop, or buys days later, reaches GA4 without the email's UTMs.
  • Shopify's campaign report uses last non-direct click and Shopify's own store data, and Shopify says it might not match a click-based tool like GA4 [2].
  • Google Ads credits clicks inside a 30-day default window [5]; Meta applies its own click and view windows. An older ad click can claim an email order.
  • Test the first send in the browser you'd pay in, then read GA4.

What does Shopify Email put on your links, and what is Shopify Messaging?

Shopify renamed the product. Its changelog post of December 10, 2025 says "We've added SMS marketing capabilities to Shopify Messaging, formerly known as Shopify Email" [1].

Shopify tags email links on its own. The shop-level default is utm_source=shopify_email, utm_medium=email, and a utm_campaign built from the email's name plus an activity ID [2]. You can edit the shop-level values under Apps → Messaging → Settings → UTM tracking, or per campaign when you create it, with each value at 100 characters or less [2].

Two systems read those values, each for a different key. GA4's default channel group puts a session in Email when the source or the medium is email, e-mail, e_mail or e mail [4], and Shopify's source value, shopify_email, isn't equal to any of those, so the medium does the work. Shopify's marketing attribution keys on something else: traffic "with utm_campaign parameters in the URL is attributed to marketing" [3]. The default campaign value covers that. If you change any of the three, the UTM tagging rules show which conventions keep GA4 and Shopify agreeing, and why the medium should stay email.

Why does an October draft keep the old UTM settings?

Shopify says a changed setting "applies to new email campaigns that you create, and isn't applied to any existing campaigns or draft emails" [2]. A Black Friday email written in October keeps whatever the settings said that day. You've probably drafted it in October and assumed it would pick up anything you changed since.

The settings page shows today's defaults and says nothing about the email already queued. Shopify's page doesn't say whether a draft's own UTM fields can be edited, so check the link. The evidence is the link inside the email. Open the scheduled email's preview, copy a product link and read it:

https://<your-domain>/products/<handle>?utm_source=shopify_email&utm_medium=email&utm_campaign=<email name and activity ID>

With no UTMs and no referrer, the click becomes Direct, and when no channel rule matches at all GA4 reports Unassigned [4].

How the click reaches GA4's Email channel

The app captures the UTMs on the landing URL for the shopper's session. It sends the server-side GA4 purchase under that shopper's own client ID and session ID, with source, medium, campaign, term and content attached. When the shopper buys in the same browser and session as the email click, the order lands in the visit that carried shopify_email / email.

The app adds no attribution claim of its own. It doesn't read Shopify Messaging or add a channel; the only campaign values on the purchase are the UTMs the landing URL carried. That's why the links have to be right before the send.

Four ordinary situations break the chain:

  • The shopper reads the email on Monday and comes back to buy on Thursday. That's a new visit, so the purchase carries no email values and GA4 credits the order by its own settings.
  • The email opens on a phone and the order is paid on a laptop. That order has no email visit behind it, and Shopify files cross-device orders as Direct.
  • A redirect or landing page that drops the query string loses the parameters.
  • The email links to a cart or checkout URL that skips your storefront, which orders from cart links and checkout links covers.

What Shopify's own campaign report counts

Shopify Messaging's email performance report "is generated using data from your Shopify store" [2], and Shopify says that because "third-party analytics platforms track conversions using link clicks and Shopify Messaging uses direct store data, the analytics between both services might not match" [2]. The report shows recipients, sent, open rate, click rate and sessions, plus delivery, bounce, unsubscribe and spam rates. Its Orders section reports total orders, total sales and average order value, and an "Email conversion funnel" runs from opens to unique visitors, added to cart and orders [2].

Its Orders section "uses the Last non-direct click attribution model by default" [2], and the page names no window length. The report's own numbers are soft: previews and security tools can register opens that didn't happen, blocked images can hide real ones, and the funnel figures are estimates [2].

GA4 counts something narrower: sessions whose UTMs survived, with a purchase attached. For slicing Shopify's own revenue by campaign, revenue by UTM campaign in ShopifyQL comes next.

Why can Meta and Google Ads claim the same order?

The order can travel with an older ad click. A shopper who clicked one of your Google or Meta ads last week and your email today arrives holding both. The email visit's UTMs go to GA4. A click ID from the earlier ad visit that the browser still holds can travel with the order to the ad platforms.

Google Ads then credits the order to that ad click inside its own window, which defaults to 30 days for clicks [5]. Google also documents view-through and engaged-view defaults of 1 day and 3 days [5]; don't assume an uploaded order earns either, and treat the click window as the one you can count on. Meta applies its own click and view windows, set on the ad set, and the attribution windows article has the numbers.

So the same order can be an Email sale in GA4, a Google Ads conversion and a Meta purchase at once. The app sent the order and the click IDs the browser held. If you also send through Klaviyo, its windows differ again, and reconciling Klaviyo revenue with GA4 and Shopify sets them out.

A reading table: which number answers which question

Tool The question it answers Window or model What it can't see
Email performance report How did this send perform in Shopify's data? Last non-direct click by default; no window named [2] Opens can be inflated by previews or hidden by blocked images; the funnel is estimated [2]
Shopify marketing reports Did the visit count as marketing? Counts visits with utm_campaign in the URL [3] Visits with no campaign value
GA4 Email channel Which session carried the purchase? Your property's attribution settings A different browser, a dropped query string, a purchase days later
Google Ads Did a Google ad click come first? 30-day click default [5] The email click itself
Meta Did an ad click or view come first? Click and view windows set on the ad set The email click itself

Nothing in that table adds up. Summing the rows counts one order once for every tool that claims it.

Read one scheduled email's link, then one test order

Run this on the scheduled email before it goes out. A fix applied later doesn't change the links already delivered, and the tracking freeze locks tracking configuration on November 16.

  1. Open the scheduled email and copy a product link. Confirm all three parameters, with utm_medium=email exactly.
  2. Send a test of the email to yourself from Shopify Messaging. Open the link in the browser you'd pay in and read the address bar again once the page has loaded. Are the parameters still there?
  3. Place a small order in that same browser session.
  4. In GA4, find the session in Realtime, or watch the purchase arrive in DebugView if you've switched on the app's GA4 debug mode (switch it off once the test order shows). Once the data has processed, Reports → Acquisition → Traffic acquisition, with the dimension set to Session source / medium, should list shopify_email / email under the Email channel.
  5. On the app's Home page, open the Server-side events card's live stream and look for the purchase going to GA4.

If step 2 loses the parameters, fix the landing page before you fix anything in the email.

FAQ

Does Shopify Email add UTM parameters automatically?

Yes. The default is utm_source=shopify_email, utm_medium=email and a campaign value built from the email name and activity ID, editable shop-wide or per campaign [2]. A change applies to new campaigns, not drafts.

Why don't GA4's email orders match Shopify's report?

They count different things. Shopify's report uses its own store data and last non-direct click by default [2]. GA4 needs the UTMs to survive in the session that made the purchase.

Does WeltPixel Conversion Tracking track campaigns sent from Shopify Messaging?

It doesn't read or tag email links. It captures the UTMs on whatever landing URL the shopper opens and sends them with the GA4 purchase for that session. It adds no attribution field of its own.

Can I change utm_medium?

You can, but Shopify's default already matches GA4's Email rule. Change the campaign name if you need to; leave the medium.

Send the test before the campaign

WeltPixel Conversion Tracking sends storefront purchases to GA4 from the server under the shopper's own session, so an email click that kept its UTMs lands in the Email channel. The free plan covers GA4 only, up to 100 storefront orders a month. Plus is $39/month with no order limit, adds Meta and the other ad destinations, and also sends admin, POS and draft orders (the app's plan, unrelated to Shopify Plus) [6]. Send your first Black Friday email to yourself and confirm the click in GA4 before the real send.

Sources

  1. Shopify Changelog, "Shopify Messaging now supports SMS marketing", December 10, 2025, changelog.shopify.com/posts/shopify-messaging-now-supports-sms-marketing, accessed October 20, 2026
  2. Shopify Help Center, "Shopify Messaging email analytics", help.shopify.com/en/manual/promoting-marketing/analyze-marketing/shopify-email-analytics, accessed October 20, 2026
  3. Shopify Help Center, "Measuring marketing performance", help.shopify.com/en/manual/promoting-marketing/analyze-marketing/marketing-performance, accessed October 20, 2026
  4. Google Analytics Help, "[GA4] Default channel group", support.google.com/analytics/answer/9756891, accessed October 20, 2026
  5. Google Ads Help, "About conversion windows", support.google.com/google-ads/answer/3123169, accessed October 20, 2026
  6. WeltPixel Conversion Tracking, Shopify App Store listing, apps.shopify.com/weltpixel-conversion-tracking, accessed October 20, 2026

Ready to upgrade your tracking?

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