Web push notifications cost you nothing per send. Zero marginal cost, no carrier fee, no segment math. SMS costs real money every single time your thumb hits send. On a spreadsheet that compares channels by cost-per-message, push wins before the race starts.

That spreadsheet is lying to you. Not because push is bad, it's genuinely useful and I'll defend it below, but because "cost to send" is the wrong denominator. The number that pays your rent is cost per repeat purchase over a retention window. And once you divide by the people who actually opted in, actually received the message, and actually still had their attention 48 hours later, the free channel stops looking free.

Full disclosure: I work for Ready, so I sell one of the two channels in this comparison. I'm going to run the math honestly anyway, including the parts where push is the smarter spend.

The three multipliers that eat "free"

Cost-per-send is only the first term. Three things sit between a send and a conversion, and push and SMS perform very differently on each.

Opt-in rate. Web push opt-in, the browser permission prompt, typically lands somewhere around 5 to 10% of visitors agreeing (framing this as a rough industry range, not a measured stat). People have been trained to reflexively click "Block." SMS opt-in via a checkout checkbox or a keyword flow is smaller in absolute reach but the people who say yes gave you a phone number, which is a stronger signal of intent.

Deliverability / reachability. A push subscriber only receives your message if their browser is open, or their device is on and online, within your send window. Web push in particular evaporates, people clear cookies, switch devices, close the browser tab that held the subscription. A meaningful chunk of your "subscribers" are unreachable on any given send. SMS on a registered 10DLC route lands in a native inbox that syncs across the person's devices and waits for them. Reachability is close to delivered-rate, not open-rate.

Window of attention. A push notification lives in a tray that gets swiped away in minutes. If the person wasn't looking when it fired, it's often gone. A text sits unread until opened, and opted-in SMS open rates are commonly cited in the 90%+ range, usually within minutes. For a 90-day repeat-purchase nudge, the message that waits beats the message that expires.

Let's build the funnel, not the send

Say you want to reach 10,000 past buyers with a 90-day win-back message. Here's a rough, defensible funnel for each channel.

StepWeb pushSMS
Addressable audience10,000 buyers10,000 buyers
Opted in~8% = 800~25% = 2,500
Actually reachable on send~60% of opted-in = 480~98% deliverable = 2,450
Message seen in window~25% = 120~90% = 2,205
Convert at 2% of seen~2.4 orders~44 orders

Those opt-in and reachability numbers are approximations, your real figures will differ, and you should pull them from your own platform before trusting this. But the shape holds across every DTC catalog I've seen: push loses enormous volume at the opt-in and reach steps, so even a free send converts a tiny raw number.

Now put a cost on each conversion

Push: the send is free, so cost-per-conversion is basically your tooling subscription amortized. Call it effectively near-zero marginal cost per order. That's the whole pitch, and it's real.

SMS: a plain 90-day win-back under 160 GSM-7 characters is one segment. On Ready Standard that's $0.02 plus a $0.0045 carrier pass-through per segment. Reaching 2,500 opted-in contacts:

  • 2,500 × 1 segment × ($0.02 + $0.0045 carrier) ≈ $61.25 total send cost
  • 44 orders from that send
  • Cost per order ≈ $1.39

(If your message runs past 160 characters or carries an emoji, it splits into multiple segments and the cost rises proportionally, a 175-char promo with an emoji is 3 unicode segments, tripling the spend. Keep win-backs short.)

So push wins cost-per-order outright. Push: ~$0. SMS: ~$1.39. If cost-per-order were the only number, stop reading.

Why SMS still wins the 90-day math

It wins on total recovered revenue, which is what actually funds the business.

From the same 10,000 buyers, push recovered ~2.4 orders and SMS recovered ~44. At a $60 average order value:

  • Push recovered revenue: 2.4 × $60 = $144, at near-zero cost.
  • SMS recovered revenue: 44 × $60 = $2,640, at $61.25 cost.

Push's ROI ratio is enormous because the denominator is near-zero. But a 145x return on $1 is still only $144. SMS's ratio is "merely" ~43x, and it puts $2,580 of margin in the bank instead of $144. You can't pay salaries with a ratio. You pay them with the dollar figure after cost.

The gap isn't because SMS is a better message. It's because SMS reaches more of the people you already earned the right to contact. Push's zero cost is a discount on a channel that structurally can't reach your list.

Where push actually wins, and you should use it

I'm not telling you to kill push. It earns its keep in specific spots:

  • High-frequency, low-stakes nudges where one-segment SMS economics would get expensive and where a missed message costs you nothing. Back-in-stock teasers, flash-sale countdowns to engaged browsers.
  • Anonymous visitors you don't have a number for. Push captures people pre-checkout who'd never hand over a phone number. That's reach SMS simply can't touch, and it's free.
  • Layering on top of SMS, not replacing it. The browser-open subset gets a push and the text. Belt and suspenders at no extra cost on the push side.

Think of push as the top-of-funnel, low-commitment channel and SMS as the one you reserve for messages that must land. Treating SMS like free push, blasting it the same number of times, is exactly how you burn the list. The frequency cap that inverts by lifecycle stage matters far more on the paid, higher-intent channel.

The two numbers that flip the decision

Run these before you commit budget:

  1. Your real reachable rate per channel. Not subscribers, subscribers who actually received your last three sends. Push reachability is usually much lower than the dashboard subscriber count suggests. If your push reach is healthy and your audience is heavy app users, the gap narrows and push gets more attractive.
  1. Your contribution margin per recovered order. If your AOV is $25 and your margin after COGS is $6, a $1.39-per-order SMS spend is fine but tightening. If your AOV is $120, the SMS cost rounds to noise and you should be sending more of them to the people who convert. The VIP-segment cost math is the right frame for deciding who gets the paid channel.

And watch attribution. Both channels will happily claim orders a customer would've placed anyway. If your SMS platform credits every sale within 24 hours of a send, the $2,640 above is inflated. We wrote about the attribution window problem because it's the single most common way channel ROI gets overstated, push and SMS both.

The honest summary

  • Cost per send: push wins, decisively. It's free.
  • Cost per conversion: push still wins on ratio, because near-zero divided by anything is a huge multiple.
  • Total recovered revenue over 90 days: SMS wins, usually by a wide margin, because it reaches far more of your earned audience and waits in the inbox instead of expiring in a tray.

The right move for most DTC operators isn't either/or. Use push for free reach on anonymous and highly engaged browser-open visitors. Use SMS for the retention messages that have to land (win-backs, replenishment, VIP drops) and keep them one segment where you can so the per-order cost stays near a dollar.

If you want to plug your own AOV, list size, and opt-in rates into the SMS side, the ecommerce SMS ROI calculator and the live cost calculator will give you a real per-order figure instead of my illustrative one. Transparent per-segment pricing plus the itemized carrier pass-through is on the pricing page, so the math you run there is the math on the bill.