Calculate SMS marketing ROI from incremental contribution, not attributed sales
To calculate SMS marketing ROI honestly, start with the profit that SMS caused—not revenue a platform credited to a text. The practical formula is: ROI = (incremental contribution margin − total SMS program cost) ÷ total SMS program cost × 100. It separates dashboard attribution from financial value after discounts, returns, product cost, fulfillment, payment fees, and messaging costs.
This distinction matters because an order can follow a text without being caused by it. A customer may already have a cart, search for the brand independently, receive an email, see paid social, and then buy within the text platform’s attribution window. That order may be useful evidence of engagement. It is not, by itself, proof of incremental revenue. Klaviyo, for example, says its SMS attribution can apply after delivery or a click within the configured window, and its multi-channel model credits the most recently interacted-with eligible message. Those are reporting rules, not a causal experiment. [1]
Use a formula the finance team can audit
Each input needs a shared definition. Incremental contribution is the profit from purchases that would not have happened without the SMS treatment, not gross merchandise value, gross sales, or every sale with text credit. Contribution margin is incremental net sales less the variable costs to earn and serve them. A revenue-only SMS marketing ROI formula can reward deeply discounted, high-return, low-margin orders.
| Input | Use in the calculation | Do not substitute |
|---|---|---|
| Incremental net sales | Treatment net sales less control net sales, normalized per eligible recipient | All platform-attributed sales |
| Net sales | Gross sales less discounts and sales reversals/returns | List-price merchandise value or tax-inclusive total sales |
| Incremental contribution | Incremental net sales less product, fulfillment, payment, and other variable costs | Gross margin before offer and service costs |
| Program cost | Message segments, carrier fees, platform and sender fees, creative, labor, offer cost, and applicable tools | Only the platform subscription |
| ROI | (Incremental contribution − program cost) ÷ program cost | Revenue ÷ message spend, which is ROAS |
Shopify’s finance reporting illustrates why the net-sales definition should be explicit: it defines net sales as gross sales minus discounts and sales reversals, excluding shipping. It records a returned good as a sales reversal when the return is processed. Its profit reports similarly treat discounts and refunds as factors that change net sales and gross margin. Align the test and reporting period with your actual return lag; otherwise a short-lived ROI report can overstate value. [2] [3]
For service, retail, B2B, and appointment businesses, adapt the same structure. Replace product cost with the variable cost of service delivery, sales commission, fulfillment, cancellation/refund exposure, and any incremental support or capacity expense. Do not force an ecommerce gross-margin model onto a business whose economics are different.
Measure the lift with a holdout before trusting attribution
The clearest practical test is a randomized holdout. Before a campaign or flow, assign eligible, consented subscribers to treatment, which receives the SMS, or control, which does not. Keep exclusions, timing, offer eligibility, and measurement horizon the same. Compare outcomes per eligible recipient, then apply the difference to the treated population. Random assignment makes the groups comparable before the send.
This is conversion-lift logic: Google compares randomized groups exposed and unexposed to ads to isolate impact that would not otherwise have occurred. It also warns that overlapping experiments and control-group contamination compromise accuracy. The medium changes; the measurement principle does not. [4]
- Define the decision: campaign or flow profitability, frequency, offer depth, or SMS versus email.
- Build the eligible audience after suppressing unsubscribes, invalid numbers, and people already in a mutually exclusive test. Maintain the SMS list hygiene rules.
- Reserve a stable randomized holdout. If volume is thin, run longer or aggregate comparable sends rather than calling noise a result.
- Keep calendar conditions equal. Do not give holdout members a near-identical email or second text with the same offer during the test.
- Wait through the agreed conversion and returns horizon. Export orders, discounts, refunds, costs, message segments, and campaign IDs.
- Report lift, cost, uncertainty where available, and the decision. Retain raw audience and order-level audit data.
Do not make a holdout permanent. Rotate membership across comparable cycles unless a longer holdout is needed for a defined learning agenda. For revenue-sensitive automations, smaller controls or longer aggregation can protect learning without an outsized commercial sacrifice.
Set attribution windows as reporting conventions, then test them
Attribution windows answer a bookkeeping question: how long after delivery or engagement will a platform credit a conversion? They do not answer the causal question. Set a window that reflects the buying cycle, document it, and keep it stable across comparisons. Then use holdouts to test whether the reported revenue resembles the incrementality you can defend.
Do not blindly inherit a vendor default. Klaviyo’s default SMS conversion window is five days and is editable. Its reporting can credit a purchase after delivery, even without a click, within that window. Klaviyo also notes that its reporting can differ from Google Analytics because the latter relies on link clicks. [1] Reconcile systems; do not choose the higher number.
| Situation | Useful reporting window | Measurement guardrail |
|---|---|---|
| Flash offer or replenishment | Short, based on observed purchase lag | Holdout test the immediate lift; do not claim every later order |
| Considered purchase | Long enough to capture the normal decision cycle | Use a consistent cutoff and wait for returns/cancellations |
| Flow with email and SMS | Channel windows documented side by side | Make channels mutually exclusive in a test when evaluating incremental role |
| Multi-touch launch | A documented campaign-level reporting rule | Use a broader experiment or marketing-mix approach; do not sum each platform’s claimed revenue |
Use tracking links and consistent names to diagnose journeys, not manufacture certainty. Make URLs readable, branded, and controlled; see the guide to branded SMS links. Retain a campaign and flow ID, send status, clicked link, order ID, refund status, and audience/test assignment.
Count every cost and every reason a sale is worth less
Most inflated SMS ROI calculations fail in the denominator as much as the numerator. Count the incremental cost of sending and operating the program, then allocate shared costs by a consistent rule. For example, Twilio states that SMS and MMS marketing costs can include a phone number, message segments sent and received, and passthrough carrier fees; its total cost can vary by volume, API, sender, and channel fees. A single per-message estimate is not a reliable substitute for your actual invoice and message-segment data. [5]
- Messaging costs: outbound and inbound segments, carrier fees, MMS or rich-message charges, sender/number fees, platform subscription, and link or data-enrichment tools.
- Program costs: agency or employee time, creative, QA, analytics, integrations, and the share of CRM operations required to run SMS.
- Offer costs: the revenue reduction from percentage or dollar discounts, free gifts, subsidized shipping, loyalty points, and any affiliate or marketplace commission triggered by the order.
- Order economics: cost of goods, pick-pack, packaging, incremental shipping, payment processing, customer service, fraud/chargeback exposure, and returns or cancellations.
- Acquisition and list costs: paid lead-generation spend, welcome incentives, and verification or validation services, allocated over the subscribers or expected lifetime they support.
Some costs are fully incremental; others are shared investments. Use a transparent allocation. For an annual channel decision, include full platform, people, and compliance-operations cost. For a marginal-send decision, include added send, offer, labor, and service costs, while stating that the platform is committed. These decisions should not share a hidden denominator.
Work a transparent example from lift to ROI
Assume 90,000 eligible subscribers are randomly split into 81,000 treatment and 9,000 holdout. During the agreed post-send period, treatment produces $486,000 of net sales and holdout produces $45,000. Per eligible subscriber, treatment net sales are $6.00 and holdout net sales are $5.00. The lift is $1.00 per person, so estimated incremental net sales for the 81,000 treated people are $81,000—not $486,000.
Now assume the incremental sales carry $32,400 in variable product, fulfillment, payment, service, and expected returns costs. Incremental contribution is $48,600. The campaign also incurred $7,200 in message, carrier, platform allocation, creative, and operational costs. The result is ($48,600 − $7,200) ÷ $7,200 = 575% ROI. The campaign created $41,400 after program cost under these assumptions. Revenue-based ROAS would be $81,000 ÷ $7,200 = 11.25x, which is useful but is not ROI.
This example intentionally uses net sales and estimated returns cost rather than a promised benchmark. Replace every number with your actual ledger and cohort data. If control conversion is unusually high because of an unrelated promotion, do not explain it away; investigate the overlap and decide whether the test should be rerun.
Handle overlap, frequency, and customer value without double-counting
SMS rarely works alone. Email, paid media, organic demand, loyalty, and sales outreach can touch the same customer. Do not add each channel’s attributed revenue as if an order has one touch. Use attribution to diagnose paths, mutual exclusion or holdouts for a specific causal question, and broader modeling for cross-channel allocation. Google recommends attribution, marketing-mix modeling, and incrementality experiments because each resolves a different problem. [6]
Frequency is an economics decision, not just an engagement setting. Compare higher frequency with normal cadence and calculate the change in incremental contribution per subscriber. Deduct incremental unsubscribes, complaint handling, deliverability loss, offer fatigue, and any evidenced loss in other channels. Segment around behavior and value; see the SMS engagement framework and SMS segmentation strategy.
For existing customers, a single-campaign holdout may understate or overstate long-run value. Track cohorts for repeat purchases, discount dependency, returns, and opt-outs over a defined period. Treat lifetime value as a separate forecast with assumptions—not as revenue to add immediately to a campaign’s ROI. The disciplined question is: did this program produce profitable incremental behavior after its total cost, compared with a credible alternative?
Make the scorecard useful for decisions
Show a fast operating view and a slower causal view. The fast view includes delivered messages, click rate, platform-attributed orders and revenue, message cost, unsubscribes, and complaints. The decision view includes holdout conversion lift, incremental net sales, contribution, program cost, ROI, return rate, and test conditions. Label them so attribution is never presented as incremental profit.
Review by campaign type, segment, offer, and automation—not only in aggregate. Welcome, replenishment, VIP, cart, and broad-promotion messages have different baselines and costs. Before scaling an automation, audit triggers, exclusions, and sequence design; start with the SMS automation flows guide. Reliable measurement also needs consented, reachable audiences and accurate suppression handling; use the SMS opt-out requirements guide.
The goal is not to make SMS look good. It is to know which messages, audiences, offers, and frequencies create profitable incremental customer action—and which should be changed or stopped. That makes SMS a managed commercial channel rather than a dashboard contest.
Frequently asked questions
Questions about calculate SMS marketing ROI
What is the basic SMS marketing ROI formula?
Use ROI = (incremental contribution margin − total SMS program cost) ÷ total SMS program cost × 100. Incremental contribution should reflect the profit from sales caused by SMS after discounts, returns, product and fulfillment costs, payment fees, and other variable costs. Revenue divided by spend is ROAS, not ROI.
Should I use attributed revenue to calculate SMS ROI?
Use attributed revenue as an operating metric, but do not treat it as proof of causation. Attribution windows and multi-channel rules determine reporting credit. A randomized holdout, where a comparable group does not receive the message, is the stronger way to estimate incremental lift. [1] [4]
How long should an SMS attribution window be?
Set it based on your normal purchase lag, document it, and keep it consistent when comparing results. A short window can miss delayed purchases, while a long window can collect more purchases that would have happened anyway. Test the business decision with a holdout rather than assuming a default window represents causal impact.
Which costs belong in SMS marketing ROI?
Include message segments, carrier and sender fees, platform and link or data tools, creative and labor, offer costs, and relevant variable order costs such as product, fulfillment, payments, service, returns, and cancellations. Include shared program costs for annual channel decisions; for a marginal-send decision, isolate incremental costs and state the scope. [5]
Free strategy teardown
Want a sharper answer than attributed revenue?
References
[1]Klaviyo Help Center: Understanding message conversion tracking
[2]Shopify Help Center: Finance reports
[3]Shopify Help Center: Profit reports
[4]Google Display & Video 360 Help: Set up Conversion Lift measurement
[5]Twilio: Messaging pricing and how it works
[6]Think with Google: Rethink ROI with AI-powered measurement