Every ecommerce marketing report has the same slide. Owned channels, attributed revenue, big number, arrow pointing up.
“Email drove $312,000 last quarter.”
Nobody in the room asks the two questions that would make that number mean something:
How much of it was margin? And how much of it would have arrived anyway?
This is the strange thing about email and SMS. They are, structurally, the most profitable channels most ecommerce brands own — and they are almost universally measured with the tool designed for the least profitable one. Attributed revenue is a paid-media metric. It exists because in paid media, revenue and cost scale together, so revenue is a reasonable proxy for value.
In owned channels, revenue and cost do not scale together at all. Which means the proxy breaks, and everybody keeps using it anyway.
Here is how to measure these channels on what they actually deliver.
Table of Contents
The cost structure is the whole story
Start with the number nobody puts on the slide: what it costs you to send one message.
Email is effectively free at the margin. Your ESP charges by contact count or send volume, so the incremental cost of one more email to a list you already maintain rounds to a fraction of a cent. Call it $0.0002–$0.002 per send depending on your plan and list size. Check your own rate card, because the range is wide — but the shape is always the same: near-zero marginal cost.
SMS is not free. In the US, A2P messaging runs roughly $0.0075–$0.02 per segment once you include carrier fees, plus 10DLC registration and campaign vetting costs. MMS costs several times that. A long message splits into multiple segments and you pay for each one.
That gap — email being something like 10 to 50 times cheaper per message — is not a detail. It is the reason these two channels cannot be held to the same standard, and the reason a single “owned channel revenue” line in your reporting is actively misleading.
Compare either one to paid acquisition, where you’re paying for every single click at whatever the going CPC in your category happens to be, and the strategic position of owned channels becomes obvious. They are not another source of volume. They are the part of your marketing where margin survives.
So measure them on margin.
The metric: contribution margin per thousand sends
Replace attributed revenue with this:
CM per 1,000 sends = ((Attributed revenue × contribution margin %) − channel cost) / sends × 1,000
Three inputs, and each one is a place where the standard report lies to you.
Attributed revenue is inflated by overlap — the same order claimed by email, by Meta, and by Google. If you have ever summed your channel reports and found you sold 130% of what you actually sold, you have met this problem. The same assisted-conversion logic that muddies paid reporting applies here, and email is often the last touch before a purchase that four other channels built.
Contribution margin % is where discounting hides. If 70% of your email revenue arrives with a 20% off code attached, your real margin on that revenue is nowhere near your catalog gross margin. Load in COGS, shipping, payment processing, expected returns, and the discount. Most brands discover their owned-channel contribution margin is 8–15 points below their blended margin, entirely because of promo codes.
Channel cost is the easy one, and it’s the one that reveals why SMS deserves separate scrutiny.
A worked example, in three passes
Same quarter, same brand, three different lenses. Numbers are illustrative — the arithmetic is what to copy.
Pass 1: the volume view (what your report shows)
Pass 2: the margin view
Broadcasts run heavy on promo codes, so contribution margin lands at 52%. The cart flow uses a lighter 10% incentive, so 55%.
Pass 3: the incrementality view
Now run holdouts. Most modern ESPs let you withhold a random percentage of eligible recipients from a flow or campaign — use 10% and let it accumulate for four to six weeks.
The cart flow still wins on efficiency per send — of course it does, it’s cheap and it’s aimed at people with items in a cart. But in absolute incremental margin it contributes $2,455 against email broadcast’s $20,118. It is a rounding error dressed up as a headline.
Three conclusions fall out, and none of them are visible in Pass 1:
- Broadcast email is the actual engine. Low efficiency per send, enormous reach, and the largest pile of incremental margin in the business.
- SMS earns its premium cost. Do not judge it against email’s cost per message; judge it against its margin per message.
- Stop over-investing in flow optimization. Your cart flow does not need a fourth message. It needs to keep existing, cheaply, while you spend your attention on the channel producing eight times the incremental margin.
Treat those incrementality percentages as illustrative. Measure your own — the whole point is that nobody can hand you these numbers.
| Program | Sends | Attributed revenue | Revenue / 1,000 sends |
|---|---|---|---|
| Email broadcast | 100,000 | $60,000 | $600 |
| SMS broadcast | 20,000 | $24,000 | $1,200 |
| Cart-recovery flow | 6,000 | $18,000 | $3,000 |
| Program | Contribution | Channel cost | Net | CM / 1,000 sends |
|---|---|---|---|---|
| Email broadcast | $31,200 | $250 | $30,950 | $310 |
| SMS broadcast | $12,480 | $240 | $12,240 | $612 |
| Cart-recovery flow | $9,900 | $80 | $9,820 | $1,637 |
| Program | Incrementality | Per 1,000 sends | Incremental margin |
|---|---|---|---|
| Email broadcast | 65% | $201 | $20,118 |
| SMS broadcast | 60% | $367 | $7,344 |
| Cart-recovery flow | 25% | $409 | $2,455 |
Which programs generate, and which just harvest
Once you start running holdouts, owned-channel programs sort themselves into two piles almost immediately.
Harvesters intercept demand that already exists. High attributed revenue, low incrementality.
- Cart abandonment — many of these people were coming back
- Browse abandonment — weaker intent, often weaker still on incrementality
- Order confirmations and shipping notifications with product blocks attached
- Post-purchase cross-sell within 48 hours
Generators create demand that wasn’t scheduled to happen.
- Broadcast campaigns announcing genuinely new products
- Win-back sequences at 90 and 180 days of inactivity
- Replenishment reminders timed to actual consumption cycles
- Back-in-stock alerts
- Educational sequences that build consideration over weeks
Harvesters are worth keeping — they cost almost nothing and they do recover some orders. The mistake is strategic: crediting them with revenue in board decks, and letting their inflated numbers justify headcount and tooling that belong somewhere else.
Generators are where growth lives, and they’re consistently under-resourced because their attributed-revenue numbers look modest next to a cart flow’s.
This maps cleanly onto the same structure as paid media. Understanding where each program sits in the marketing funnel tells you what to expect from it — and harvesting the bottom of the funnel is not the same activity as filling the top of it, even when both show up in the same revenue column.
Where email and SMS genuinely differ
They get grouped as “owned channels” and treated as interchangeable levers. They are not. Five real differences:
Latency. SMS is read in minutes; email in hours. That makes SMS the correct channel for anything genuinely time-boxed — a flash sale ending tonight, a restock with 40 units — and the wrong one for anything that isn’t. Send a non-urgent SMS and you’ve spent your urgency budget on nothing.
Richness. Email carries merchandising, education, multiple products, user-generated content and social proof. SMS carries one idea and one link. Trying to merchandise over SMS costs you segments and money.
Regulatory weight. CAN-SPAM asks relatively little of you. SMS in the US sits under TCPA, requires express written consent, carries quiet-hour restrictions, and needs 10DLC registration. The compliance exposure is materially higher, and “we’ll ask forgiveness later” is a genuinely expensive posture in SMS.
Fatigue curve. SMS lists churn faster under pressure than email lists. Over-send email and people ignore you; over-send SMS and they opt out permanently. One is recoverable, one isn’t.
Cost, again. Every extra sentence in an SMS may cost you another segment across the entire send. Brevity is a margin decision, not a style preference.
The practical rule: email is the default, SMS is the exception you pay for. If a message doesn’t need speed, it doesn’t need SMS.
Deliverability is a margin lever
Here’s the trap that undermines everything above: sending to your whole list inflates attributed revenue in the short run and destroys the channel in the medium run.
Since early 2024, Google and Yahoo have enforced bulk-sender requirements — authenticated sending via SPF, DKIM and DMARC, one-click unsubscribe, and spam complaint rates held below 0.3%. Cross those thresholds and your mail stops reaching the inbox, including mail to the engaged segment that was actually producing margin.
Which means engagement-based segmentation isn’t list hygiene housekeeping. It’s protecting the delivery of your most profitable messages. Sunsetting a disengaged segment usually raises revenue per send and lowers total revenue slightly — and the first of those two numbers is the one connected to profit.
The report to build
Replace the attributed-revenue slide with this. One row per program:
| Column | Why it's there |
|---|---|
| Program | Broadcast, flow name, or segment |
| Sends | Your denominator |
| Attributed revenue | Starting point, not the answer |
| % of orders with a discount code | Where margin quietly leaks |
| Contribution margin % | After COGS, shipping, returns, discounts |
| Channel cost | Send cost, meaningful for SMS |
| CM per 1,000 sends | Efficiency |
| Incrementality (last measured) | From holdouts, with a date |
| Incremental CM | The number that should drive decisions |
Two habits make it work. Stamp the incrementality figure with a date, because it drifts with seasonality and list composition — re-measure quarterly. And keep both efficiency and absolute columns, because efficiency alone tells you cart flows are your best asset, and absolute alone tells you broadcast is all that matters. You need both to allocate attention correctly.
The part that makes your paid media cheaper
The most underrated function of owned channels has nothing to do with the revenue they’re credited with.
They are your first-party data supply. In a landscape where targeting without third-party cookies is the baseline condition rather than a future problem, a consented, engaged, purchase-tagged list is a genuine competitive asset. Feeding it into enhanced conversions improves the signal your bidding algorithms learn from, which improves paid performance without touching a single bid.
They let you suppress. Excluding existing customers from prospecting campaigns stops you paying acquisition prices for people you already own. This shows up as a real CAC improvement, and it is credited entirely to paid media in every report ever written.
They set your affordable CAC. If email and SMS reliably convert first-time buyers into repeat buyers, your lifetime contribution margin rises, and the target ROAS you can afford loosens accordingly. That single number governs how aggressively you can scale acquisition — and it’s determined by retention, not by anything happening in the ad account.
None of that value appears in owned-channel attributed revenue. All of it is real.
Your first 30 days
- Week 1 — Get the margin number. Calculate true contribution margin on owned-channel revenue: COGS, shipping, processing, returns, and discount depth. Split it by discounted versus full-price orders. Expect an uncomfortable result.
- Week 2 — Turn on holdouts. 10% on your top three flows and on broadcast campaigns. Most ESPs support this natively. Set it and leave it alone.
- Week 3 — Audit deliverability and segmentation. Confirm SPF, DKIM, DMARC, one-click unsubscribe. Check your spam rate against the 0.3% threshold. Define an engaged segment and a sunset rule.
- Week 4 — Rebuild the report. Ship the table above. Include the CM-per-1,000-sends and incremental-CM columns even if incrementality is still an estimate — labelling an estimate as an estimate is fine, ignoring the dimension entirely is not.
- Week 7 — Read the holdouts and reallocate. You will almost certainly find that a flow you were proud of is mostly harvesting, and a program you under-resourced is generating. Move the effort.
We live, breathe & Dream Traffic
FAQ
Isn’t a 10% holdout leaving money on the table?
Slightly, and it’s the cheapest information you will ever buy. A holdout on 10% of a cart flow costs a small fraction of that flow’s revenue, and it tells you whether the other 90% is worth building on.
What if my ESP won’t do holdouts?
Split by a stable random attribute — customer ID modulo 10 works — and suppress that group from the flow for six weeks. Or run a time-based on/off test, accepting that seasonality contaminates it more than a randomized split would.
Should SMS revenue be compared to email revenue directly?
No. Compare margin per thousand sends, and compare incremental margin. Raw revenue comparison penalizes SMS for having a smaller opt-in list and flatters email for having a free one.
How much of my revenue “should” come from email?
There is no correct percentage, and chasing a benchmark leads directly to over-sending. The right question is how much incremental contribution margin the channel produces relative to what it costs to run.
Do discount codes just cannibalize full-price sales?
Frequently, yes — and a holdout on your discount-led campaigns is how you find out. If the holdout group buys at nearly the same rate without the code, the discount was a margin transfer, not a demand generator.
Measure it properly, then scale it
Owned channels are where ecommerce margin either survives or quietly disappears — and attributed revenue is not sensitive enough to tell you which is happening.
If you want an outside read on how your channels are actually performing once margin and incrementality are loaded in, start with an audit. If you’d rather build the measurement in-house with someone checking the design, coaching is the faster route.
Run the holdouts either way. The numbers will be smaller than your dashboard says, and they will be the first ones worth acting on.



