Attribution Window Conflicts Between Klaviyo Flow Revenue And Shopify Orders

Metricuno
July 12, 2026
7 min read
Attribution Window Conflicts Between Klaviyo Flow Revenue And Shopify Orders — Why Klaviyo attributed revenue never matches Shopify orders — the 5-day window, last-click vs assist, cross-device gaps, and how to reconcile the two numbers.
Quick answer

Klaviyo's flow revenue rarely matches Shopify's order report — and the gap is usually 20-40%. Here's why the two numbers diverge and how to reconcile them cleanly.

Quick answer

Klaviyo credits any order placed within 5 days of an email click or open to that flow, while Shopify credits the last referring source at checkout. The two numbers will never match — expect Klaviyo to report 20-40% more revenue than Shopify's Email channel. Report both: Klaviyo's attributed revenue as a flow health signal, Shopify's channel revenue as the finance-of-record number, and a holdout test for true incrementality.

Definition
Attribution & Measurement

Attribution Window Conflicts Between Klaviyo Flow Revenue and Shopify Orders

The reporting gap caused by Klaviyo's 5-day open/click attribution window versus Shopify's last-click order attribution.

Klaviyo attributes revenue to a flow when a recipient opens or clicks an email and then places any order within a configurable window — 5 days by default for clicks, 1 day for opens. Shopify, in contrast, attributes each order to the last non-direct referrer captured at checkout via the landing_site and referring_site fields. The two models answer different questions: Klaviyo measures whether a flow touched the buyer, Shopify measures which channel closed the sale. On a healthy Shopify store the gap is typically 20-40%, driven by cross-device shoppers, Shop Pay one-tap checkouts, and last-click overwrites from paid ads or direct traffic.

Also known as
Klaviyo vs Shopify revenue gap
flow attribution mismatch
email attribution discrepancy

If you run a Shopify store on Klaviyo, this gap shows up the first time your Head of E-commerce cross-checks the abandoned cart flow's reported revenue against the Shopify Orders export. The flow says €42,000 last month. Shopify's Email channel says €28,000. Both numbers are correct — they measure different things.

Why the two numbers diverge

Three mechanisms account for almost the entire gap. First, Klaviyo's default 5-day click window and 1-day open window sweep in orders that Shopify assigns to a later paid ad click or direct visit. A shopper clicks your abandoned cart email on Tuesday, browses, then returns via a Google Ads retargeting click on Thursday and buys — Klaviyo credits the flow, Shopify credits Paid Search.

Second, cross-device behaviour. Klaviyo identifies the buyer by email cookie or hashed email on checkout, so a mobile-open-to-desktop-purchase journey stays attributed to the flow. Shopify's landing_site captures the desktop session's referrer, which is usually direct or organic — see cross-device cart recovery for the full breakdown. This alone typically explains 10-15 points of the gap.

Third, Shop Pay's one-tap checkout skips the storefront entirely on repeat purchases, breaking the landing_site chain Shopify uses for channel attribution. The order lands as direct, even though the buyer arrived from a Klaviyo email — the Shop Pay attribution issue is worth its own read if a large share of your buyers are repeat customers.

Last-click vs assist is a separate axis

Even within Klaviyo, you can toggle whether flows report last-click only or include assisted revenue. A shopper who clicked the Welcome flow on day 1 and the Abandoned Cart flow on day 3 could be credited to either — or both — depending on your attribution settings. This compounds the Shopify gap and is the single most common source of double-counting inside Klaviyo itself.

How to detect the exact size of the gap

Pull two reports for the same 30-day window. From Klaviyo: Flows → Abandoned Cart → Attributed revenue. From Shopify: Analytics → Sales by traffic referrer, filtered to Email. Subtract. A gap under 15% is unusually tight and probably means your window is set too short or your Shopify UTM tagging is unusually clean. A gap over 50% suggests either double-counting across flows or a large cross-device population.

For a fabric-of-truth reconciliation, use a discount code match-back: give every abandoned cart email a unique code (e.g. CART10) and count Shopify orders that redeemed it. This gives you a lower-bound number that both systems agree on, and it's the technique documented in the discount code match-back guide.

How to fix the reporting — not the attribution

You cannot make Klaviyo and Shopify agree, and you shouldn't try. The correct move is to report both numbers side-by-side with clear labels. Klaviyo's attributed revenue answers 'did the flow touch buyers who converted?'. Shopify's channel revenue answers 'which channel gets financial credit?'. The two-number reporting template gives you a template your Head of E-commerce can sign off on.

If you must pick one, tighten Klaviyo's click window from 5 days to 3 for cart flows specifically — this trims the most egregious overlap with paid ads without gutting the report. Do it carefully: changing the window mid-quarter breaks historical comparisons, so follow the process in the 5-day window change guide before touching production settings.

The only number that answers 'was it worth it?'

Attributed revenue — from either system — tells you correlation, not causation. Running a 10% holdout group on the abandoned cart flow for four weeks gives you incremental revenue: what the flow actually caused. Expect the incremental figure to land at 40-70% of Klaviyo's attributed number. That's the ROI figure to defend in a board meeting.

Experiment ideas to close the loop

Run a four-week holdout: exclude a random 10% of triggered profiles from the abandoned cart flow and compare purchase rates. The delta is your true incremental revenue. Full setup is in the holdout group playbook. This is the only measurement that survives the Klaviyo vs Shopify debate — because it doesn't rely on either system's attribution.

In parallel, A/B test Klaviyo's attribution window on a non-critical flow (post-purchase or browse abandonment) at 3 days vs 5 days. This isolates the window's effect on reported revenue without disturbing your headline cart flow numbers. Pair with the last-click vs assist explainer if your team is still debating which internal setting to standardise on.

Frequently asked

Frequently asked questions

Klaviyo credits any order within its 5-day click / 1-day open window, while Shopify credits only the last referrer at checkout. Cross-device journeys, Shop Pay one-tap orders, and retargeting ad clicks that overwrite the Email referrer all fall into Klaviyo's window but out of Shopify's Email bucket. The 20-40% range is the typical gap on a healthy Shopify store.

Report both, labelled clearly. Klaviyo's attributed revenue is the flow health signal — it tells you whether the flow is engaging buyers. Shopify's channel revenue is the finance-of-record number. Add a third: incremental revenue from a holdout group, which is the only figure that proves causation.

Yes, in Account → Settings → Email attribution. But you can't fully match Shopify because the two systems use fundamentally different models — last-touch-with-window vs last-non-direct-referrer. Changing the window also breaks historical comparisons, so read the historical reports guide before adjusting.

Not usually — Klaviyo identifies the buyer via email cookie or hashed email at checkout, which Shop Pay preserves. Shop Pay breaks Shopify's channel attribution instead, because the one-tap flow skips the storefront and drops the landing_site referrer. The result is Shop Pay orders often show as Direct in Shopify but stay correctly attributed to the flow in Klaviyo.

Check whether your attribution setting is 'last-click' or includes 'assisted' revenue. Under assisted attribution, a Welcome flow click on Monday and a Cart flow click on Wednesday can both claim the same order. Sum the attributed revenue across all flows for a month and compare to Klaviyo's total email revenue — if flows exceed the total, you're double-counting.

Use unique discount codes per flow (CART10, WELCOME15) and count Shopify orders that redeemed each. Redeemed-code revenue is a lower bound both systems agree on. Combine that with Klaviyo's attributed revenue as an upper bound, and report both as a range.

Neither, in isolation. Both are correlation-based. For actual ROI, run a holdout: exclude a random 10% of triggered profiles for four weeks and measure the purchase-rate delta. Expect the incremental figure to be 40-70% of Klaviyo's attributed revenue — that's the number to divide by flow cost for real ROI.

GA4 gives a fourth number, not a more accurate one. It uses data-driven attribution over a configurable lookback (default 30 days) and will typically sit between Klaviyo and Shopify. Useful as a tiebreaker for channel-level reporting, but don't use it to reconcile flow-level revenue — the models are too different.

Typically 10-15 percentage points on a Shopify store with a mobile-heavy audience. Klaviyo maintains identity across devices via the email cookie, so a mobile-click-to-desktop-purchase journey stays attributed. Shopify's landing_site captures only the desktop session's direct referrer, so the same order lands in Direct or Organic.

It usually indicates either aggressive assisted attribution inside Klaviyo (double-counting across flows) or heavy overlap between email sends and paid retargeting. Audit for both: sum attributed revenue across all flows, and check whether cart abandoners are also being targeted by Meta or Google Ads within the 5-day window. Tightening the click window to 3 days often closes half the excess gap.

Get an AI expert review of your site

Paste your URL — Metricuno's AI runs the same heuristic checks a senior CRO consultant would, scoring your page and prioritising the fixes that'll move conversion fastest.