Transparency
How we measure SMS ROI
Every number in your ReturnFlowHQ dashboard has a source. This page documents the exact attribution logic, conversion definition, ROI formula, and exclusions we use — so you can verify every claim.
Attribution Window
7-day post-send window
A purchase is attributed to an SMS campaign if a customer completes a transaction within 7 calendar days of receiving an outbound message. This is the industry-standard window for short-cycle, repeat-purchase businesses like food & beverage and personal care.
We deliberately chose 7 days (not 24 hours, not 30 days) because:
- 24-hour windows miss customers who need a few days to act on a message.
- 30-day windows over-attribute organic visits that would have happened anyway.
- 7 days captures the realistic decision lag for most repeat-visit categories.
Attribution rule:
order.phone = message.phone /* same customer */
AND order.completed_at >= message.sent_at /* after the send */
AND order.completed_at <= message.sent_at + 7 days /* within window */
AND order.status = 'COMPLETED' /* confirmed purchase */
Conversion Definition
What counts as a conversion?
A conversion is a completed Square order from a customer who received an outbound ReturnFlowHQ SMS message in the 7 days preceding that purchase.
We count distinct customers per month, not total messages. If one customer receives 3 messages and makes 2 purchases in the same window, they count as 1 conversion for the campaign count, but both purchases appear in attributed revenue.
Counts as a conversion
- ✓Completed Square order within 7 days of an SMS
- ✓Order from any matching phone number
- ✓In-store and online orders equally
- ✓Any order amount, including small ones
Does not count
- ✗Orders from customers who never received an SMS
- ✗Refunded or cancelled orders
- ✗Duplicate same-order entries from Square sync
- ✗Orders where the phone number is missing
ROI Formula
How we calculate ROI
The ROI figure shown in your dashboard is the return on your program spend — the ratio of attributed revenue to total program cost over the measurement period.
ROI=Attributed Revenue − Program CostProgram Cost×100
Attributed revenue — sum of completed Square order totals from customers who received an SMS in the prior 7 days.
Program cost — your ReturnFlowHQ plan fee plus the SMS delivery cost for the measurement period. Onboarding costs are excluded.
Exclusions
What we deliberately exclude
We exclude certain records to avoid inflating the numbers. Operators should know exactly what is removed and why.
Refunded and cancelled orders
Orders that are refunded or cancelled after the fact are removed from attributed revenue totals. The metric reflects real, kept revenue.
Customers imported before activation
When a new location connects to ReturnFlowHQ, we backfill historical customer data from Square. Customers who visited before the activation date are counted in the total baseline but do not appear as "new" customers in the growth metric.
Orders with no phone number
If Square does not have a phone number for a customer, their orders cannot be attributed to an SMS campaign. These purchases appear in total revenue but not in attributed revenue.
Duplicate sync records
Occasional Square sync retries can create duplicate order records. We deduplicate on Square order ID before any attribution calculation.
Messages sent during suppression
Any message sent while a phone number is in suppression (opted out) is excluded from attribution counts, even if a purchase happens to follow.
Confidence Floor
When we consider data reliable
Attribution numbers from locations in their first 30 days or with fewer than 50 total sends should be treated as directional, not definitive. Small sample sizes produce high variance, and early sends often include more initial-contact messages that behave differently from steady-state win-back campaigns.
50+
Minimum sends
Conversion rates stabilize meaningfully after 50 sends in a month.
30+
Days post-launch
Baseline comparisons require at least one full month of pre-campaign data.
Skeptic Test
Fair criticisms and our responses
“Aren't some of those customers just regulars who would have come in anyway?”
Yes — some will be. The 7-day window captures organic visits that happen to follow an SMS. We do not claim every attributed purchase was directly caused by the message. A more conservative interpretation: the campaign accelerated or reinforced a visit that was already probable. That still has measurable value.
“What if a customer receives multiple messages in one week?”
We attribute to the most recent message before the purchase. Each customer-month is counted once per conversion. We don't double-count purchases just because multiple messages were sent.
“Could the revenue numbers be inflated by seasonality?”
Yes. A campaign that runs during a seasonal peak will show higher attributed revenue than one in a slow period. We recommend comparing same-period YoY data when seasonality is material, rather than month-over-month.
“How do I know the attribution query is accurate?”
The attribution logic is a direct SQL join between the tenant_outbox and tenant_orders tables on matching phone number and the 7-day timestamp constraint. There is no ML prediction involved — it is a deterministic rule applied to raw transaction data.
See these metrics applied to a real business
The Straws case study shows every number in this methodology applied to a live location — baseline, intervention, attributed revenue, and verified ROI.