Why Your Shopify Store Shows Different Revenue in GA4 and Klaviyo
by Jaz Field

GA4 and Klaviyo show different revenue for the same Shopify store because they answer different questions. Klaviyo credits every order placed within days of an email open or click. GA4 credits email only when an email link brought the shopper to the purchase. The attributed numbers will never match. The totals should, and if they don't, something in the tracking needs fixing.
A common version of this: Klaviyo says flows and campaigns drove 35% of last month's revenue. GA4 credits the Email channel with 8%. Finance asks which one is real.
Both are, by their own rules. The useful work is separating the part of the gap that comes from those rules from the part that comes from tracking problems.
Compare totals before attribution
Before looking at email revenue, check that both tools see the same store.
- Take Shopify's online sales for the last full week, gross, before refunds, with POS and draft orders excluded.
- Compare it with GA4's total purchase revenue for the same week.
- Compare it with the total value of Klaviyo's Placed Order metric for the same week.
If all three are close, the tracking is sound and the email revenue gap is attribution. If GA4 or Klaviyo is far from Shopify, fix that first. Comparing attributed revenue between two tools that see different totals tells you nothing.
Why Klaviyo and GA4 attribute revenue differently
1. Klaviyo credits opens, GA4 only credits visits
By default, Klaviyo credits an order to an email if the shopper opened or clicked it in the 5 days before buying. Opening is enough. The shopper might have opened a campaign on Monday, ignored it, then searched your brand on Wednesday and bought. Klaviyo credits the email. GA4 credits the search.
Apple Mail Privacy Protection makes this larger. Apple Mail loads emails automatically, which registers as an open whether or not anyone read it. Klaviyo has settings to exclude these opens, so check how yours is set.
2. The attribution windows are different
Klaviyo's window is days after an email or SMS interaction. GA4's lookback window is 30 days for acquisition reports and 90 days for other key events, but it only counts visits, so a longer window does not mean more credit for email. The two windows measure different things and cannot be lined up exactly.
3. GA4 shares credit, Klaviyo takes all of it
Klaviyo credits the whole order to the most recent email or SMS the shopper interacted with inside the window. GA4's default data-driven model splits the credit across the channels that brought the shopper to the site. An order that came from a Meta ad, a Google search and an email click gets a fraction of its value as email revenue in GA4, and all of it in Klaviyo.
4. Email visits lose their source on the way to GA4
GA4 can only recognize a visit as email if the link carries UTM parameters, for example utm_source=klaviyo&utm_medium=email. Klaviyo can add them automatically, but the setting has to be on, and it has to cover flows as well as campaigns.
Even with UTMs, the source gets lost when shoppers switch browsers. Many people tap an email link in the Gmail or Outlook app, browse in the app's built-in browser, then buy later in Safari or Chrome. That later visit has no campaign information, so GA4 records the purchase as Direct or Unassigned.
5. GA4 misses purchases the browser tag never sees
Klaviyo gets orders from its Shopify integration, so it sees every order regardless of what happened in the browser. GA4's purchase event usually comes from a browser tag. Ad blockers, declined cookies and checkout tracking that was never moved to Shopify's current checkout all stop that tag firing. The order exists in Shopify and Klaviyo but not in GA4.
6. Revenue is defined differently
Check what each tool counts as revenue:
- Tax and shipping: Klaviyo's Placed Order value, GA4's purchase revenue and Shopify's sales report can each include or exclude tax and shipping.
- Discounts: applied before or after the revenue figure is recorded.
- Refunds: Klaviyo records them as a separate Refunded Order metric, so attributed revenue does not drop when an order is refunded. GA4 only reflects refunds if a refund event is sent. Shopify net sales subtract them.
- Currency: with Shopify Markets, an order in euros may be converted at a different rate, or not at all, in each tool.
7. Time zones shift orders between days
Klaviyo accounts, GA4 properties and Shopify stores each have their own time zone setting. If they differ, orders near midnight land on different days, and weekly or monthly totals move between periods.
How to reconcile GA4 and Klaviyo revenue
- Reconcile totals with Shopify first, as above.
- Turn on UTM tracking in Klaviyo for campaigns and flows, with a consistent source and medium, and check that GA4's channel group maps them to Email.
- Check Klaviyo's attribution settings: the window length, and whether opens, including Apple Privacy opens, count.
- Align time zones across Klaviyo, GA4 and Shopify.
- Compare over a full week or more, never a single day.
- Use the right number for the job. Klaviyo's attributed revenue is useful for comparing one flow or campaign with another. GA4's channel revenue is the better number for comparing email with paid and organic channels.
If the gap between the two stays stable from week to week, it is attribution. If it jumps, something changed in the tracking.
Fixing the tracking side of the gap
Three of the seven causes are tracking, not attribution: lost email sessions, GA4 missing purchases, and revenue defined differently in each tool. They come from GA4 and Klaviyo being fed separately, one from a browser tag and one from an integration.
The data layer for Shopify fixes this by recording each order once, server-side, and sending the same record to both. The purchase reaches GA4 with the shopper's original session attached, so email visits keep their source through checkout, and Klaviyo receives events for more of the shoppers it would otherwise miss. That is what Littledata does for Klaviyo and Google Analytics.
The attribution rules will still differ. But once both tools see the same orders, defined the same way, the remaining gap is one you can explain.
To see how many shoppers your Klaviyo flows are missing, read How many shoppers are your Klaviyo abandonment flows missing? For the same problem with ads, see why GA4 and Meta Ads conversions differ.
Frequently asked questions
Why does Klaviyo show more revenue than GA4?
Klaviyo credits an order to an email or SMS if the shopper opened or clicked it within the attribution window, 5 days for email by default, even if they came back through another channel. GA4 only credits email when the visit that led to the purchase came from an email link, and by default shares credit with the other channels in the path. Opens, including automatic opens from Apple Mail Privacy Protection, make the gap wider.
Why does GA4 show less email revenue than Klaviyo?
GA4 needs UTM parameters on email links to recognize the visit as email. Without them, or when a shopper reads the email in one app and buys later in another browser, GA4 records the sale as Direct or Unassigned. GA4 also loses purchases its browser tag never sees, because of ad blockers or declined cookies.
Should GA4 and Klaviyo revenue match?
Their attributed email revenue should not, because they use different rules. Their total revenue should be close to each other and to Shopify. If Klaviyo's Placed Order total or GA4's purchase revenue is far from Shopify's online sales for the same week, that is a tracking or definition problem worth fixing.
How do I make Klaviyo and GA4 revenue easier to compare?
Turn on UTM tracking in Klaviyo for every campaign and flow, align the time zone in Klaviyo, GA4 and Shopify, compare totals with Shopify first, and compare attributed revenue over a full week or more. In Klaviyo, check whether opens count towards attribution and how long the window is.
Does Klaviyo count refunds?
Klaviyo records refunds as a separate Refunded Order metric, so attributed revenue built on Placed Order does not go down when an order is refunded. GA4 only reflects refunds if a refund event is sent to it. Shopify's net sales subtract them. Compare like with like by checking gross sales in all three.
Why does GA4 put email revenue under Direct?
Usually because the email link had no UTM parameters, or because the shopper clicked in an email app's built-in browser and returned later in Safari or Chrome. That later visit has no campaign information, so GA4 records it as Direct.
The short version
Klaviyo credits opens within days; GA4 credits visits and shares the credit. Their email revenue will not match, and should not. Their totals should match Shopify. Fix those first, add UTMs, align settings, and the gap that remains is attribution, not missing data.



