An operator reviewing revenue spreadsheets and campaign metrics on a laptop at a desk.

Shopify Email Marketing ROI: How to Calculate What Klaviyo Actually Earns You

Email is the only channel where the vendor grades its own homework and everyone accepts the grade. Klaviyo tells you email drove 31% of revenue last quarter. You put it in the board deck. Nobody asks what the attribution window was, whether those customers would have bought anyway, or what the 15% welcome discount cost in gross margin.

The structural problem: email ROI is reported in attributed gross revenue, and attributed gross revenue is the one metric that is simultaneously inflated by attribution rules and blind to margin. Every other channel in your mix gets interrogated. Email gets a victory lap.

The real number is almost always still good — email is genuinely the highest-margin channel most 6-7 figure brands run. But it is usually 40-60% lower than the dashboard says, and knowing the real number changes what you do next: how often you send, how deep you discount, how big a list you pay to maintain, and whether that $4K/mo retention agency is earning its retainer.


What your ESP’s ROI number actually measures

Klaviyo’s default attribution is 5-day click, 5-day open. Omnisend and Mailchimp use similar logic. That means if a customer opens your Tuesday newsletter, ignores it, then clicks a Meta retargeting ad on Thursday and converts, email gets the credit — or at minimum shares it in your ESP’s view of the world while Meta claims it too.

Add these up across a list of 80,000 profiles and the double-counting is enormous. Brands we have audited routinely show attributed revenue across Klaviyo, Meta, and Google totalling 130-180% of actual Shopify revenue.

Three settings changes that get you closer to honest, before you do any modelling:

  • Turn off open-based attribution entirely. Apple Mail Privacy Protection has made opens close to fiction since 2021 — 40-65% of your “opens” are machine prefetches. Open-attributed revenue is noise.
  • Shorten the click window to 1-3 days for campaigns. If someone clicks a newsletter and converts eight days later, email influenced it, but calling it email revenue in a P&L context is a stretch.
  • Keep flows on a longer window than campaigns. An abandoned checkout flow genuinely drives conversion 3-5 days out. A Thursday product drop email does not.

On a typical 7-figure account, moving from 5-day click/5-day open to 3-day click-only drops reported email revenue share from roughly 30-34% down to 18-23%. Nothing about the business changed. You just stopped lying to yourself.


The four deductions between attributed revenue and profit

1. Attribution inflation

Covered above. Expect to haircut reported email revenue by 25-40% just by fixing the window.

2. Incrementality

This is the big one and the one nobody runs. Of the revenue email genuinely touches, some portion was going to happen regardless — the repeat buyer who reorders coffee every six weeks does not need your flow to do it, but your flow will happily take credit when she clicks the email she was already looking for.

Measured holdout tests across DTC brands typically find incrementality between 35% and 70%, depending heavily on flow type:

  • Abandoned checkout: 25-45% incremental. Lower than operators expect. A meaningful share of cart abandoners return on their own within 72 hours.
  • Browse abandonment: 15-35% incremental. Often the worst performer once you strip out people who were going to buy anyway.
  • Winback / lapsed customer: 60-85% incremental. The highest honest ROI flow in most accounts, and the most underbuilt.
  • Campaigns / newsletters: 50-75% incremental. Genuinely creating demand rather than intercepting it.
  • Post-purchase cross-sell: 55-80% incremental. Strong, and margin-friendly because it often runs without a discount.

3. Discount cost

Your welcome flow offers 15% off. That discount is already deducted from the revenue figure Klaviyo reports, so operators assume it is handled. It is not — because the discount also lands on orders that would have happened at full price. If 40% of welcome-flow redemptions are incremental and 60% are not, you are paying 15% margin on the 60% for nothing.

On a brand doing $300K/yr through welcome and abandoned-cart flows at a blended 14% discount, that is roughly $25K-$30K of pure margin given away to people who had their card out already.

4. Platform and labour cost

The line everyone forgets because it is small relative to ad spend. Typical annual fully-loaded cost for a 7-figure brand:

  • Klaviyo at 50K-100K active profiles: $8,600-$16,500/yr (email only; SMS adds usage fees on top)
  • Retention agency or freelancer: $2,500-$6,000/mo = $30K-$72K/yr
  • Or in-house: 0.4-0.6 FTE email marketer plus designer time, call it $35K-$55K/yr loaded
  • Review, UGC, and popup tooling that feeds the list: $1,200-$4,000/yr

A worked example: $4M brand, honest math

Direct-to-consumer apparel accessory brand. $4.0M net revenue trailing twelve months. 72,000 email profiles. Klaviyo on default attribution.

  • Klaviyo-attributed revenue: $1,280,000 (32% of total)
  • After switching to 3-day click-only: $864,000 (down 32%)
  • After a 90-day holdout test showing 58% incrementality: $501,000 incremental revenue
  • Gross margin at 61%: $305,600 gross profit
  • Less non-incremental discount leakage (estimated $22,000): $283,600
  • Less Klaviyo ($13,100) + agency ($48,000) + tooling ($2,400): $220,100 net contribution

Spend was $63,500. Net contribution was $220,100. True ROI: 4.5x on contribution margin.

The Klaviyo dashboard, meanwhile, reported $1.28M against $13.1K of platform cost — 97x. Both numbers are arithmetically defensible. Only one tells you whether to hire a second email person.

And 4.5x on contribution margin is excellent. For context, the same brand’s Meta prospecting was running at roughly 0.9x contribution after COGS, shipping, and payment fees. The point of the honest number is not to make email look bad. It is to make email comparable.


Running a holdout test that survives scrutiny

You cannot buy incrementality data. You have to generate it. The good news: it costs you almost nothing and takes 60-90 days.

The setup

  • Create a static holdout segment of 8-10% of your active list, assigned randomly (use a profile property with a random number, not signup date or location — those bias the sample).
  • Exclude that segment from every flow and every campaign for the test window. Partial suppression invalidates the test.
  • Run for a minimum of 90 days, or 2x your average repeat purchase interval, whichever is longer.
  • Measure revenue per profile in each group, not total revenue. Groups are different sizes.

The math

If your treated group generates $41.20 revenue per profile over 90 days and your holdout generates $17.30, your incremental lift is $23.90 per profile — 58% of treated revenue is incremental. That is your multiplier. Apply it to attributed revenue going forward and re-test every 2-3 quarters.

Sizing warning

Below roughly 15,000 active profiles, a 10% holdout is too noisy to read. Use 20% and run for 120 days, or run flow-level holdouts sequentially instead — abandoned checkout one quarter, winback the next.


Profit per recipient: the metric that should replace open rate

Open rate is dead. Click rate is directional. The number that belongs in your weekly operations review is profit per recipient (PPR).

PPR = (attributed revenue × incrementality % × gross margin % − discount leakage) ÷ recipients

Benchmarks we see on healthy 6-7 figure accounts:

  • Standard campaign to engaged 90-day segment: $0.14-$0.38 PPR
  • Campaign to full list including 180-day lapsed: $0.03-$0.11 PPR
  • Abandoned checkout flow: $1.80-$6.50 PPR
  • Welcome flow (non-buyer entry): $0.90-$2.40 PPR
  • Post-purchase cross-sell: $0.45-$1.60 PPR
  • Winback at 120-180 days: $0.30-$1.10 PPR

Track PPR per send and you immediately see which campaigns are genuinely profitable and which are deliverability tax you are paying for a vanity revenue line. A send with $0.02 PPR that burns 0.08% of your list in unsubscribes is net negative once you price the lost future value of those profiles.


Flow economics versus campaign economics

The standard benchmark — flows should drive 50-60% of email revenue on under 10% of sends — is directionally useful but hides the important part.

Flows are automated, which means their marginal cost is near zero and their PPR is 5-20x campaign PPR. But flows are also capacity-capped: you cannot send more abandoned-cart emails than you have abandoned carts. Flow revenue scales with traffic, not with effort.

Campaigns are the opposite: unlimited capacity, low PPR, and real marginal cost in design and copy time. A $4M brand sending 10 campaigns a month at 4 hours each is spending 480 hours/yr on campaign production. At a $55/hr loaded rate, that is $26,400 — often more than the Klaviyo bill.

The operational implication:

  • Audit flows for completeness first. Most 7-figure accounts have 6-9 flows live and need 14-18. Missing flows are the cheapest revenue in the business.
  • Cap campaign frequency where PPR crosses below your production cost per recipient. If a campaign costs $220 to produce and goes to 28,000 people, your break-even PPR is $0.008. Most clear it. But the 11th send of the month to a fatigued list often does not.
  • Measure campaign PPR net of unsubscribe cost. If your average profile is worth $34 in lifetime contribution and a send unsubscribes 0.11% of 28,000 recipients, that is 31 profiles and $1,054 of destroyed future value against maybe $3,800 of incremental contribution. Still positive, but the margin is thinner than it looks.

What a profile actually costs you

Klaviyo bills on active profiles, so every dead address on your list is a line item. At the 100K tier, you are paying roughly $0.0138 per profile per month, or $0.165/yr. That sounds trivial until you run the segment.

On a typical 72,000-profile list:

  • ~29,000 (40%) have not opened or clicked in 180 days
  • ~14,500 (20%) have never opened a single email
  • Together they cost $4,800-$7,200/yr in platform fees

The platform fee is the small part. The real cost is deliverability. Sending to a 40% dead segment drags your sender reputation, which suppresses inbox placement for the 60% who matter. Brands that implement a proper sunset policy typically see inbox placement improve 8-15 points and engaged-segment PPR rise 20-35% within 60 days.

A sunset policy that works

  • At 120 days no engagement: move to a reduced-frequency segment, 2 sends/mo max
  • At 180 days: run a 3-email winback sequence with your strongest offer
  • At 210 days no engagement post-winback: suppress from all campaigns, keep in flows only
  • At 365 days: delete or archive to a suppressed profile state so you stop paying for them

Keep your spam complaint rate under 0.10% (Gmail and Yahoo will throttle you above 0.30%) and hard bounces under 0.5% per send.


Discount architecture: where email ROI actually leaks

The default DTC welcome flow — 15% off for an email address — is the single largest unexamined margin leak in most retention programs.

Tests worth running, in order of typical payoff:

  • Dollar-off instead of percent-off. $10 off on a $68 AOV is 14.7%. Framing as a dollar amount usually converts within 2-4% of the percentage offer and caps your exposure on high-ticket orders. On a brand with a wide price range, this alone recovers 1.5-3 points of blended margin on flow revenue.
  • Delay the discount. Email 1 with no offer, email 2 at 24 hours with the offer. Typically 25-40% of welcome-flow conversions happen on email 1 — at full price.
  • Minimum spend threshold. $15 off $90+ instead of 15% off anything. Lifts AOV 9-18% and kills the single-unit discount order that nets you $3.
  • Exclude new-release and bestseller SKUs. If a product sells out at full price, it does not need a 15% subsidy.
  • No-discount abandoned checkout, variant one. Many brands discover the first abandoned-cart email converts nearly as well with free shipping as with 10% off, and free shipping costs less if your average parcel is under $7.

Run each as a 50/50 split over at least 400 flow entries per arm and measure on contribution margin per entrant, not conversion rate.


The benchmarks worth holding yourself to

On honest attribution (click-only, 3-day campaigns / 5-day flows) and after incrementality adjustment:

  • Email share of total revenue: 15-24% is healthy for a non-subscription brand. Above 30% on honest attribution usually means your acquisition is underfunded, not that your email is elite.
  • Flow share of email revenue: 45-60%
  • True contribution ROI on total email spend: 3.5x-8x. Below 2.5x, something is structurally broken — usually discount depth or list quality.
  • Revenue per profile per month: $0.80-$2.40 depending on AOV and purchase frequency
  • List growth rate: 2.5-5% net monthly, after sunsetting
  • Engaged (90-day) segment: at least 35% of total list

A 30-day sequence to get your real number

Days 1-2. Change attribution to click-only, 3-day campaigns, 5-day flows. Screenshot your previous 90-day numbers first so you have a before-and-after.

Days 3-5. Pull a flow-by-flow revenue report. Calculate discount dollars redeemed per flow. Most brands have never seen this broken out and find one flow responsible for 60%+ of total discount leakage.

Day 6. Build and launch the 10% holdout segment. It runs in the background for the next 90 days.

Days 7-12. Build the PPR tracker. One row per send, columns for recipients, attributed revenue, discount dollars, unsubscribes, gross margin %, and calculated PPR. This replaces whatever open-rate report you currently review.

Days 13-20. Implement the sunset policy. Expect your active profile count to drop 15-30% and your Klaviyo bill to drop a tier.

Days 21-30. Launch the first discount architecture test — delayed welcome offer is usually the highest-payoff starting point.

At day 90 you read the holdout, apply the incrementality multiplier, and for the first time you have an email ROI number you can set next to your Meta and Google numbers without an asterisk.

Try ProfitAnalyzer free — no credit card required

Find your Shopify margin leaks in under 2 minutes. Now available on the Shopify App Store.

Install on Shopify →Try free online →

Related reading

Published by The Shopify Ops — profit operations for 6-7 figure Shopify brands.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *