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 — SMS delivery cost (and any optional add-ons) for the measurement period. ReturnFlowHQ has no monthly platform fee. 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?

Attribution is a deterministic join of sent messages to completed Square orders on matching phone number and the 7-day timestamp window. There is no ML prediction involved — it is a rule applied to raw transaction data.

Use the same attribution rules on your Square data

Connect Square and we apply this methodology to your tickets — baseline, intervention, attributed revenue, and ROI. Customer texts start after carrier approval.