A client recently came to us with a problem. Their CRO agency was charging $15,000 a month, mostly to manage Klaviyo. After three months, the agency's Klaviyo dashboard proudly showed that the welcome flow alone was generating 33% of total revenue.
The catch? Total Shopify revenue hadn't moved. Not a percentage point.
Both numbers can be true at the same time. That's the problem with Klaviyo's default attribution, and it's how email agencies and CRO retainers quietly inflate their own ROI.
Klaviyo's default attribution credits a sale to email if a customer clicked within 5 days OR opened within 1 day of the order. Layer subscription rebills on top, and you get headline numbers that look great but don't reflect incremental revenue. The inflation is structural, not accidental. Once you understand what Klaviyo is counting, you can decide what to do about it.
This post walks through how the inflation happens, the $15K case study, and 5 fixes, all of them inside Klaviyo or your Shopify backend, no third-party attribution tools required.
The $15K CRO Welcome Flow Case Study
The setup: scaling DTC ecom brand, $15K/month CRO retainer to run Klaviyo, welcome flow rebuilt three months prior. The agency report claimed the welcome flow alone was now responsible for 33% of total revenue.
The reality check. We pulled Shopify topline for the same three months. Total revenue had moved less than 2% across the rebuild window, within normal seasonal noise. If the welcome flow had really been generating a third of revenue, that number would have shown up somewhere in topline. It didn't.
The diagnosis. We ran the same fixes you'll see below, in order:
- Turned off opened-email attribution (Fix #1). Claimed welcome-flow revenue dropped 38% overnight.
- Excluded active subscribers (Fix #2). Another 12% drop in claimed revenue.
- Ran a 10-day pause test (Fix #5). Total Shopify revenue dropped 4%.
The translation. The welcome flow's real incremental contribution was roughly 4% of revenue, not 33%. The agency had been paid $45,000 over three months for about one eighth of what they were claiming.
The outcome: client fired the CRO agency and brought email in-house with a $2K/month specialist plus the 5 fixes from this post. Topline didn't move, because it was never moving in the first place.
If you suspect the same is happening on your account but don't have the operator bandwidth to run the diagnosis, our agency team has done this for clients on $50K-500K monthly email programs. The diagnosis takes about a week and the fixes take another two.
Quick Fix Reference
| # | Fix | What it changes | Expected impact | Effort |
|---|---|---|---|---|
| 1 | Disable "Opened Email" attribution | Strip the easiest credit Klaviyo gives itself | 5-40% drop in claimed email revenue | 2 minutes |
| 2 | Exclude active subscribers from campaigns & flows | Stop crediting your subscription rebills to email | 10-25% drop in claimed campaign and flow revenue | 15 minutes (one-time segment setup, then add to exclusions on each flow and campaign) |
| 3 | UTM-tag every email and measure backend revenue | Trust Shopify, not Klaviyo's self-report | Reveals the true overlap and overcount between Klaviyo and Shopify | 5 minutes to set up UTM template, then 30 minutes per week to reconcile |
| 4 | Build a quarantine landing | A landing page only your email list can reach | Hard floor on email-only revenue for the test campaign, typically 15-30% of what Klaviyo claimed | 1 hour to set up (hidden page + redirect logic + an offer that requires landing on this URL) |
| 5 | The honest pause test | Pause Klaviyo for 2 weeks. Watch what happens. | Real incremental email revenue, typically a fraction of what Klaviyo claimed | 2 weeks of patience plus a willing CMO |
The 5 Fixes (Step-by-Step)
Run them in order. Fix #1 alone usually accounts for the largest single drop in claimed revenue, and the rest stack from there.
Disable "Opened Email" attribution
Strip the easiest credit Klaviyo gives itself
Filters out Apple MPP false opens, the largest source of phantom creditYour reported flow ROI will drop overnight, be ready for the agency conversation
Best for: Any brand where Klaviyo claims more than 20% of total Shopify revenue
Klaviyo's default attribution credits a sale if a customer OPENED an email within 1 day before the order. Opens are not intent. Apple Mail Privacy Protection (MPP) auto-opens emails before they ever reach the inbox, meaning Klaviyo can credit a sale to a campaign the customer never even saw.
Disabling Opened Email attribution and keeping only Clicked Email as a conversion trigger is the single biggest cut. This one toggle aligns Klaviyo with how every other marketing channel measures itself: a click is intent, an open is noise.
Operators report the drop ranges from 5% on light flows to 40%+ on heavy welcome-flow accounts, depending on how Apple MPP-saturated your list is and how aggressive the agency or consultant was in tuning the attribution to make themselves look good.
What you'll see clearly
- Filters out Apple MPP false opens, the largest source of phantom credit
- Aligns reported revenue with actual customer action, not inbox auto-pixels
- Click-only attribution is the standard every other paid channel uses
- Immediately exposes which flows were riding on opens vs real engagement
- Two-minute change with no downstream system impact
Caveats
- Your reported flow ROI will drop overnight, be ready for the agency conversation
How to do it
- 1Klaviyo → Settings → Attribution
- 2Open Conversion Tracking
- 3Uncheck "Opened Email"
- 4Leave "Clicked Email" enabled
- 5Save
Exclude active subscribers from campaigns & flows
Stop crediting your subscription rebills to email
Eliminates one of the largest inflation sources for any subscription brandOperators report 10-25% drop in claimed campaign revenue depending on subscription mix
Best for: Any brand with more than 10% subscription revenue and a CRO agency showing big flow numbers
If a customer is on a Shopify or Recharge subscription and they open or click an email within Klaviyo's attribution window, their next auto-rebill gets credited to that email touch. This is one of the most cynical credit-theft mechanisms in the stack because the revenue would have happened anyway, that's literally what a subscription is.
The fix is simple: build a Klaviyo segment of all active subscribers and exclude that segment from every campaign and flow. Subscribers still get their transactional and subscription-management emails (those run through different flow types and are not the inflation source).
Your reported revenue will drop. Your actual revenue won't. That gap is exactly the credit your email program was stealing from your subscription program.
What you'll see clearly
- Eliminates one of the largest inflation sources for any subscription brand
- Clean separation between acquisition email and subscription revenue
- Subscribers still receive transactional and subscription-management emails normally
- Forces your email program to earn its number on new customer revenue, not rebills
Caveats
- Operators report 10-25% drop in claimed campaign revenue depending on subscription mix
- Requires touching every campaign and flow exclusion list once
How to do it
- 1Klaviyo → Lists & Segments → Create Segment
- 2Use "Properties about someone" → e.g., "Recharge Active Subscriber = true" (or your Shopify subscription tag)
- 3Save the segment as 'Active Subscribers'
- 4For each campaign: Recipients → Excluded Segments → add 'Active Subscribers'
- 5For each flow: Settings → Recipient Settings → Excluded Segments → add 'Active Subscribers'
UTM-tag every email and measure backend revenue
Trust Shopify, not Klaviyo's self-report
Two independent data sources: Klaviyo's claim vs Shopify's session dataDoes not catch view-through buyers who clicked another channel for the final order, still better than Klaviyo's number
Best for: Anyone willing to do 30 minutes of weekly reconciliation
Klaviyo's dashboard reports email revenue using Klaviyo's own attribution logic. Shopify reports revenue by the actual session that placed the order, using UTM tags. When you UTM-tag every Klaviyo email link, you can pull a Shopify report filtered to those UTMs and compare it directly against Klaviyo's claimed revenue for the same period.
The gap between the two numbers is your overcount. We routinely see a 2-3x gap on flows in mature accounts. Klaviyo claims $30K, Shopify's UTM-attributed revenue says $10-12K. That delta is the inflation made visible.
This is the cleanest cross-check you can run without a third-party attribution tool. It also gives you a number you can show a stakeholder or an agency without needing them to take your word for it.
What you'll see clearly
- Two independent data sources: Klaviyo's claim vs Shopify's session data
- Shopify's UTM-attributed revenue is far closer to actual incremental
- Gives you a number you can show your agency, CMO, or CFO with hard data
- One-time setup, then automatic on every send going forward
Caveats
- Does not catch view-through buyers who clicked another channel for the final order, still better than Klaviyo's number
- Requires consistent weekly review to be useful
How to do it
- 1Klaviyo → Account → Settings → UTM Tracking → enable
- 2Set defaults: utm_source=klaviyo, utm_medium=email, utm_campaign={{flow_name|safe}}, utm_content={{message_name|safe}}
- 3Shopify → Analytics → Reports → Sales by traffic source
- 4Filter by utm_source=klaviyo
- 5Compare against Klaviyo's claimed revenue for the same period, the gap is your overcount
Build a quarantine landing
A landing page only your email list can reach
Provides a hard, undeniable floor on email-only conversions for one campaignOnly works campaign-by-campaign, you can't quarantine the entire email program
Best for: When you want to prove the inflation to a stakeholder, or fire an agency with evidence in hand
Create a dedicated landing page on your store that is ONLY linked from email, never indexed, never on the nav, never sent paid traffic, never picked up by organic. All email links for a specific test campaign or flow point to this URL.
Now watch the revenue from that page directly in Shopify. If Klaviyo claims $20K from the campaign but the page only generated $3K in tracked orders, you have proof of overcounting. This is the cleanest test possible without running a proper holdout, and it is free.
The point isn't to run your whole email program through a quarantine. The point is to prove the inflation to yourself, your CFO, or the agency standing in the room. Run it once on the highest-claimed campaign and the argument is over.
What you'll see clearly
- Provides a hard, undeniable floor on email-only conversions for one campaign
- Removes traffic-source contamination, only email can reach this URL
- Takes the argument out of the abstract and into a Shopify report anyone can read
- Repeat it on any flow or campaign you want to stress-test
Caveats
- Only works campaign-by-campaign, you can't quarantine the entire email program
- Requires a unique offer or asset that is only available via that landing
How to do it
- 1Shopify → Pages → Add page → mark "Hidden from search engines"
- 2Add <meta name="robots" content="noindex,nofollow"> in the theme for that template
- 3Build a unique offer (e.g., bundle, gift, exclusive SKU) only available on this URL
- 4In Klaviyo, link all CTAs in the test campaign to this URL, and only this URL
- 5Run for 2 weeks; compare Shopify orders that hit the landing vs Klaviyo's claimed revenue
The honest pause test
Pause Klaviyo for 2 weeks. Watch what happens.
The closest you'll get to true incremental measurement without a formal holdout testPolitically hard. CROs and CMOs hate it and you will get pushback
Best for: Brands where Klaviyo claims a huge share of revenue but topline feels flat
The ultimate test of whether email is incremental: turn it all off. Pause every campaign and flow for 1-2 weeks. Hold Meta and Google ad spend constant. Watch total Shopify revenue.
If Klaviyo claimed 33% of revenue and total revenue drops by 30%, the channel really is incremental and the agency was right. If it drops 5%, you just learned that 25% of your 'email revenue' was always going to happen. Klaviyo was just standing in the way and taking credit.
This is the harshest test, but it gives the most honest answer. Operators we've seen run this end up cutting their email programs by 50% and reinvesting in the flows that actually move topline. Don't run it during peak season (Q4 or Prime Day equivalents), you want a clean baseline, not a distorted one.
What you'll see clearly
- The closest you'll get to true incremental measurement without a formal holdout test
- Gives a clean number for the CFO and ends the agency conversation forever
- Reveals whether email is genuinely driving demand or just capturing it
- Costs nothing, just discipline and a quiet two weeks
Caveats
- Politically hard. CROs and CMOs hate it and you will get pushback
- Don't run during peak season. Q4, BFCM, or major launches will distort the read
How to do it
- 1Schedule the pause window outside peak season
- 2Klaviyo → All Flows → Disable each
- 3Klaviyo → All Campaigns → don't schedule new sends
- 4Keep transactional emails on (order confirmations, shipping, subscription management)
- 5Pull Shopify daily revenue for the pause weeks vs the same period in the prior month
- 6Compare the drop against Klaviyo's claimed contribution, the gap is your overcount
What to Expect After Fixing
The fixes don't change customer behavior. They change the scoreboard. Here's what that looks like in practice:
Your dashboard ROI will drop
That doesn't mean revenue dropped, only the inflation went away. Your business is the same size today as it was yesterday. The number on the Klaviyo dashboard is just more honest now.
Agencies and consultants will push back
Anyone who built their case on Klaviyo's headline numbers will resist a more accurate attribution model. The cleanest counter is Fix #3: show them the gap between Klaviyo's claim and Shopify's UTM-attributed revenue. Hard data ends the debate.
Welcome flows still work
Email is a real channel. Welcome flows still convert. They are just not single-handedly responsible for a third of your business. Right-sizing the credit lets you right-size the budget, and reallocate to channels that actually move topline.
Decisions get cleaner
Once the inflation is gone, every email decision gets easier: which flows to keep, which to cut, what to test, what to retire. You stop optimizing for a number that wasn't real and start optimizing for incremental revenue.
The same pattern lives in your paid attribution
Klaviyo is not the only platform that grades its own homework. Performance Max claims branded search conversions, Meta claims view-throughs days after the click, GA4 attributes by its own model. Running this kind of cross-check on your Google Ads spend every week is exactly what the Shopiator audit engine does, link in the closing CTA below.
Frequently Asked Questions
Why does Apple Mail Privacy Protection inflate Klaviyo numbers?
If I disable opened-email attribution, will my actual revenue drop?
How is Klaviyo's default attribution window set?
My agency says these fixes will "hurt my email program." Are they right?
Should I switch to a different ESP?
Can I just trust GA4 instead?
What about post-purchase and order-confirmation emails?
How long should the pause test run?
What if I have a small list (under 5K subscribers)?
Should I tell my agency I'm doing this?
Check attribution settings, fire the agency, and take it in-house.
Want the same attribution honesty for your paid spend?
Most ecom brands have the same inflation problem in Google Ads that Klaviyo has in email, credit assigned to channels that weren't actually incremental. We'll audit your full ecom paid stack and show you where the real growth lives.