Pull up your last quarter of SMS data and split it into two buckets: automated flows (welcome, cart, browse, post-purchase, win-back) versus one-off campaigns (the Tuesday sale blast, the new-drop announcement). Then look at revenue per bucket next to send volume per bucket.
For most DTC brands the numbers land somewhere near this: automated flows account for roughly 10–15% of total SMS sends but drive 35–45% of SMS revenue. Campaigns are the other 85–90% of your volume and produce a majority of revenue too — but they do it by brute force, sending a lot to earn a little per message. Flows earn more per send because they hit someone at the exact moment intent is highest.
Full disclosure: I work for Ready, an SMS platform. That colors how I think about this, but the math below is math — it holds no matter whose tool you send through.
The revenue-per-send gap, made concrete
Numbers below are illustrative round figures, not a study — but they mirror what I see across accounts. Say a store did 500,000 SMS segments last quarter and $180,000 in attributed SMS revenue.
| Bucket | Segments sent | Share of sends | Revenue | Share of revenue | Revenue per segment |
|---|---|---|---|---|---|
| Automated flows | 60,000 | 12% | $72,000 | 40% | $1.20 |
| One-off campaigns | 440,000 | 88% | $108,000 | 60% | $0.25 |
Flows earn roughly 4.8x more per segment than campaigns in this example. That's the whole argument. A cart-abandonment text reaches someone who literally just tried to buy. A browse-abandonment text catches active interest. A blast reaches everyone regardless of whether they were thinking about you five minutes ago — so most of that spend lands on people who weren't going to convert today.
Before you over-index on that ratio, one caveat: attribution windows inflate flow revenue. A cart text sent to someone who was coming back anyway still gets credit. If your platform claims the sale on a 24-hour window, some of that $1.20 was going to happen regardless. Worth reading the attribution-window breakdown before you treat the per-send number as gospel. Even discounted, though, the gap survives.
Why your instinct pushes you toward blasts anyway
Campaigns feel productive. You write one, you hit send, you watch the revenue tick up in real time. Dopamine. A flow you built six months ago just quietly runs and you never think about it — which is exactly the point, and exactly why it gets neglected.
The other reason: campaigns are the easy fill for a content calendar. "We need to send something this week" turns into a blast. That's how you end up sending a 5th text in a month that earns less than it costs you in unsubscribes. Every marginal blast dilutes your per-send average and raises fatigue. Every well-placed trigger does the opposite.
The framework: fix the flows before you write the next blast
Here's the order I'd work in if I inherited an SMS program tomorrow.
1. Audit which flows actually exist and fire
Most brands think they have a full flow stack. They have a welcome text and a single cart reminder. Check for:
- Welcome / first-purchase incentive
- Cart abandonment (usually 2–3 texts)
- Browse abandonment (with the consent path it actually requires — this is the one that's quietly non-compliant)
- Post-purchase (thank-you, shipping, cross-sell)
- Win-back for lapsed buyers
- Back-in-stock
If any of those are missing, that's your highest-ROI work. A new flow that catches even 2% of the traffic it targets outperforms the next three blasts combined.
2. Tune the flows you already have
The cart flow that's been "done" since launch is usually leaving money on the table. Test the delay, the number of touches, the offer. Cart-recovery strategy runs deeper than one reminder — timing and sequence move the number more than copy does.
3. Only then, plan campaigns
Campaigns still matter — they're most of your revenue in absolute terms. But they should be the layer you add on top of a working flow foundation, not the whole program.
The staffing tell: what your next hire should do
If you're hiring for SMS or reallocating someone's time, the job description usually reads "send weekly campaigns." That's backwards. The higher-leverage role builds and maintains triggers — the automation architect, not the blast operator.
Concretely, a trigger-builder's week looks like:
- Reviewing flow conversion rates and killing dead branches
- Adding a missing flow (win-back, back-in-stock, post-purchase upsell)
- Fixing the consent paths that gate browse and quiz-capture triggers
- Segmenting so flows fire differently for new vs. repeat buyers — frequency tolerance inverts by lifecycle stage, and your flows should reflect it
A blast operator produces one send a week. A trigger-builder produces infrastructure that runs 24/7 for months. Same salary, wildly different compounding.
Why per-seat pricing quietly punishes trigger-building
Here's a structural reason flow-building gets underinvested: on a lot of platforms, giving another person access to build automations costs a per-seat fee. So the flow work bottlenecks on one overloaded person, and the org defaults to whoever can just fire off a campaign.
Ready doesn't charge per seat. The CRM, pipeline, automations, unified inbox, and — for connected accounts — the native two-way GoHighLevel sync are all included at the per-segment rate. That means you can put the person who understands your customer lifecycle in the tool without a line-item negotiation. If you run this through an agency, the per-seat math gets even worse — we broke down the bundled-platform breakeven here.
The send cost itself: $0.02/segment on Standard (0–50,000/mo), dropping automatically to $0.016 past 50,000 in a calendar month, plus a transparent $0.0045/segment carrier pass-through. So the illustrative 500,000-segment quarter above runs roughly 167,000 segments/month — comfortably past the 50K automatic-discount line, at $0.0205 all-in. Whether those segments are flows or blasts, they cost the same to send. The difference is entirely in what each one earns.
The math that should reorder your quarter
Go back to the table. Flows in that example earned $1.20/segment; blasts earned $0.25. If you could shift even 40,000 segments' worth of effort from planning marginal blasts to building and tuning triggers, and those triggers earned at anything close to flow-level rates:
- 40,000 segments × $1.20 = $48,000 in flow-attributed revenue
- The same 40,000 as extra blast volume × $0.25 = $10,000
That's a $38,000 swing in the same quarter, at the same send cost, from the same headcount. Discount the flow number heavily for attribution overlap and it's still not close.
The reason this works isn't magic — it's that a trigger only fires when someone has shown intent. You're not paying to reach people who weren't thinking about you. You're paying to reach the ones who were, at the moment they were.
The practical takeaway
Campaigns aren't the enemy. They're most of your absolute revenue and they'll stay that way. But on a per-send basis they're your least efficient channel, and every marginal blast makes the average worse while raising fatigue.
So the move is simple to state and slow to do: build and maintain the flow stack first, tune it relentlessly, and add campaigns as a layer — not a substitute. Staff for triggers, not blasts. And pick a platform where building another automation doesn't cost you a seat fee.
If you want to see what the flow-vs-campaign split looks like on your own numbers, the honest first step is just pulling the two buckets and dividing revenue by segments. If you're setting this up fresh, the GHL SMS setup guide walks through connecting triggers, and you can start on Ready with 2,500 free credits, no card required. Build one flow you're missing before you write the next blast — that's the whole play.