Email Campaign ROI: Math + AcelleMail Data Points

Email ROI = (Revenue − Cost) / Cost. This guide shows the math, which AcelleMail data points feed each variable, the costs people forget to count, and a working revenue-attribution pattern using UTMs + your store.

What this is for

Email ROI is the metric that justifies the channel. "Open rates are up" is interesting; "every dollar spent on email returns $42" is the conversation you have with your finance team. This guide shows the actual math, the AcelleMail data that feeds it, and the costs people forget to count.

The formula

ROI = (Revenue from email − Cost of email) / Cost of email × 100

Multiply by 100 to express as a percentage. 300% ROI means every $1 spent returned $3 in profit. −50% ROI means every $1 spent lost 50¢.

Revenue — pull from your store, not from AcelleMail

AcelleMail tells you how many clicks happened. Your e-commerce store / CRM tells you how many of those clicks converted into purchases. The reliable path:

  1. Tag every email link with UTMs (UTM Parameters article)
  2. Your store records utm_campaign on every order (Shopify, WooCommerce, Stripe, etc. all support this natively or via plugin)
  3. Filter orders by the campaign's UTM to get revenue attributable to that campaign

Without UTMs, you cannot reliably attribute revenue to specific campaigns — "email referrals" in Google Analytics is too coarse. Set up UTMs first.

Attribution windows — pick one and stick

Same campaign drives revenue over time. You need a rule for when to "stop" counting.

Window What it captures Best for
Click → 1 hour Direct, immediate purchases Flash sales
Click → 24 hours Same-day conversions including comparison shopping Most consumer campaigns
Click → 7 days Considered purchases, multi-touch B2B / high-ticket
Click → 30 days Full LTV influence Long-cycle products

For most consumer emails, 24-hour attribution is the right default. For B2B / SaaS, 7-day. Pick a window per industry and apply it consistently — comparing 24-hour ROI on one campaign to 30-day ROI on another is misleading.

Cost — the components people forget

Email feels "free" because there's no per-email cost (unlike paid ads). But there's a real cost stack:

Cost component Typical range Why people miss it
AcelleMail subscription / hosting $20-200/month Fixed cost, but real
Sending server fees (SES, SendGrid, etc.) $0.10-1.00 per 1,000 emails Variable, ignored if low
Design time (template + email creation) 2-8 hours per campaign × hourly rate "Internal" so feels free
Copy / strategy time 1-4 hours per campaign Same
List management (segmentation, cleaning) 2-5 hours/month Spread across all campaigns
Image / asset purchase $0-100 per campaign Often ignored if reusing stock
Tooling (verification service, deliverability monitoring) $0-500/month Subscription that "just runs"

A campaign's fully-loaded cost — not just the send fee — is what you divide revenue by.

A worked example

Item Cost
Pro-rated AcelleMail subscription (1 campaign out of 4 monthly) $25
Sending fees: 10,000 emails × $0.30/1k $3
Designer's time: 4 hours × $50 $200
Copywriter's time: 2 hours × $60 $120
Total cost $348

Campaign drove $2,800 revenue (40 orders × $70 avg, attributed via UTM utm_campaign=spring_sale_2026 filter in store).

ROI = ($2,800 − $348) / $348 × 100
    = $2,452 / $348 × 100
    = 705%

Each $1 returned $7.05. Strong campaign.

Reading AcelleMail's numbers in context

AcelleMail's campaign report doesn't show revenue — that's intentional (it doesn't know what each subscriber did at your store). But it gives you the clicks that feed the calculation:

Campaign Overview report stat cards showing RECIPIENTS 14,794, DELIVERED 3,838, OPENED 931, CLICKED 146

(Screenshot from Read the Campaign Report.)

The flow:

  1. AcelleMail says: 146 unique clicks across X UTM-tagged URLs
  2. Your store says: 12 orders had utm_campaign=spring_sale_2026 in the last 24 hours, totalling $840
  3. You compute: ROI = ($840 − $52 cost) / $52 × 100 = 1,515%

Cross-checking: 146 clicks → 12 orders = 8.2% click-to-order conversion rate. That's healthy (typical 3-15% for warmed audiences). If you see <1%, something's off — bad landing page, mismatch between subject promise and offer, etc.

Per-campaign vs per-subscriber-per-year

Two ways to look at email ROI:

View When to use Calculation
Per-campaign ROI Evaluate a single send Revenue from this campaign / Cost of this campaign
Per-subscriber-per-year (RPY) Evaluate the whole program Total annual revenue / Subscribers on list

A subscriber whose lifetime value (LTV) is $500/year contributes — across all the campaigns they receive — that $500. If your list is 10,000 subscribers and your annual email revenue is $1,200,000, your RPY = $120/subscriber/year.

RPY Diagnosis
$50-100 Solid B2C program
$100-300 Strong; doing many things right
$300-1,000+ Best-in-class (high-LTV products, well-targeted lists)
<$25 Either low-LTV product OR list is mostly inactive — run re-engagement

Per-campaign ROI tells you which campaigns to repeat. RPY tells you whether the entire email program is worth investing in.

Hidden non-revenue value

ROI is one number, but email drives outcomes that don't show up as direct revenue:

Hidden value How to estimate
Brand recall / re-purchases RPY captures some of this
Customer support deflection ("How do I…?" emails answered preemptively) Survey CSAT post-campaign
Referrals generated by satisfied subscribers Track refer-a-friend codes
Reduced churn (subscribers who stayed because the email reminded them you exist) A/B test sending vs not sending for a quarter

Include these qualitatively when defending the email budget — "ROI is 700% direct, plus reduced churn by 12%".

Improving ROI

Three buckets of improvement, ranked by leverage:

Bucket Impact Effort
Reduce send cost Low — already cheap Switch to cheaper sending server only if usage is heavy
Increase conversion rate High — better targeting, copy, offer Focused A/B testing
Increase list quality Highest — better subscribers → higher RPY List hygiene + reduced churn

Don't optimise cost first. Email is one of the cheapest marketing channels by far. The leverage is in conversion + list quality.

Common issues

What you see What to do
Reported revenue doesn't match what store thinks Attribution window mismatch. Confirm both sides use the same window.
ROI looks great but business isn't growing You're cannibalising organic / direct traffic (same customers would have bought without email). Run a holdout test: don't email 10% of the audience, compare conversion rates.
AcelleMail says 200 clicks, store says only 50 referrals Most likely UTMs got stripped somewhere (browser tab restore, social-share rewrites). Audit step-by-step using UTM Parameters article §5.
ROI calculation says 4,000% (suspiciously high) You probably under-counted costs. Add design + copy hours; recompute.
ROI looks negative — should we stop emailing? NO — at least not based on one campaign. Look at trailing 3-month avg + RPY before pulling the plug.

A weekly / monthly review template

For a sustainable email program, run this review on a Friday afternoon:

Question Where to look
What was last week's per-campaign ROI? Store's UTM-filtered revenue / cost
What's our 3-month average ROI? Same, rolling
What's our current RPY? Annual revenue / subscriber count
Which campaign type drove the highest ROI? Cross-reference with category tags
Which subscribers have we never converted? Re-engagement article candidates

Related articles

13 コメント

コメント 3 件

  1. lucas.bernard.…
    We had to add custom UTM parameters to get the cross-campaign attribution we wanted — the defaults werent quite enough
    1. admin (編集済み)
      Confirming your experience matches what we see in support cases. We'll cite the cause-#5 'wait it out' guidance more prominently in the next revision
    2. admin (編集済み)
      Worth noting — your config diverges from the recommended one in one place that often bites people. We'll send a separate note with the suggested change...
    3. admin (編集済み)
      useful context. the fact that it took 3 weeks end-to-end is realistic; we sometimes get pushed to say 1-week timelines and they're not honest.
    4. admin (編集済み)
      Appreciate the data point. Your numbers align with what our larger-volume customers report; helpful to see a third confirmation
    5. admin (編集済み)
      Thanks for the breakdown. Saving for our customer-success team's reference library.
    6. admin (編集済み)
      thanks for the breakdown. Saving for our customer-sucess team's reference library.
  2. jmorrison.itop…
    Can the analytics be exported to a data warehouse? We feed everything into BigQuery for cross-channel reporting
    1. admin
      We're aware of the silent-bail-out on deleted customers — there's an open issue for it. Workaround for now: monitor the campaign:rerun log for absence of expected log lines, alert when silent for > 20 min.
    2. admin (編集済み)
      we tested this with up to 1m subscribers on a $40/mo vps. past that you start needing query optimization. below that, the defaults are fine
    3. admin (編集済み)
      Yes — strict alignment requires the From: domain to match exactly. Subdomain-level (`bounce.example.com` vs `example.com`) passes relaxed but fails strict. Most operators run relaxed; the rare strict-DMARC setups need explicit subdomain DKIM configuration.
  3. nadia.r.cl
    The funnel-attribution model explanation is the clearest I've read. The 'last-touch vs first-touch' framing especially.
    1. admin (編集済み)
      Appreciate it. If anything in this needs updating, ping us — we revisit articles every few months.

More in Analytics & Reporting