Email marketing remains one of the most effective digital channels, often boasting an average return of $36 to $42 for every $1 spent. However, to understand if your specific campaigns are profitable, you must track key performance indicators (KPIs) and calculate your Return on Investment (ROI).
The ROI Formula for Email Marketing
The basic formula for ROI is simple, but the variables that lead to it are what truly matter:
ROI (%) = [(Total Revenue – Campaign Cost) / Campaign Cost] x 100
Key Metrics Explained
Campaign Cost: Includes software fees (ESP), design costs, copywriting, and labor.
Conversion Rate: The percentage of users who clicked a link in your email and completed a desired action (e.g., a purchase).
Avg. Order Value (AOV): The average amount of money a customer spends when they make a purchase through your email.
Cost Per Acquisition (CPA): How much you paid in marketing spend to acquire one single customer.
Realistic ROI Example
Imagine you send a campaign to 10,000 subscribers. You have an Open Rate of 20% (2,000 opens) and a Click-Through Rate of 5% (100 clicks). If your conversion rate is 2%, you would have 2 sales. At an Average Order Value of $250, your revenue is $500. If your campaign cost was $100, your profit is $400, resulting in a 400% ROI.
function calculateEmailROI() {
var cost = parseFloat(document.getElementById('campaignCost').value);
var sent = parseFloat(document.getElementById('emailsSent').value);
var openRate = parseFloat(document.getElementById('openRate').value);
var clickRate = parseFloat(document.getElementById('clickRate').value);
var convRate = parseFloat(document.getElementById('convRate').value);
var avgValue = parseFloat(document.getElementById('avgValue').value);
if (isNaN(cost) || isNaN(sent) || isNaN(openRate) || isNaN(clickRate) || isNaN(convRate) || isNaN(avgValue)) {
alert('Please fill in all fields with valid numbers.');
return;
}
// Logic
var totalOpens = sent * (openRate / 100);
// CTR is usually calculated as clicks per total sent or clicks per total opens.
// Here we use clicks based on total emails sent for clarity.
var totalClicks = sent * (clickRate / 100);
var totalConversions = totalClicks * (convRate / 100);
var revenue = totalConversions * avgValue;
var profit = revenue – cost;
var roi = (cost > 0) ? (profit / cost) * 100 : 0;
var cpa = (totalConversions > 0) ? (cost / totalConversions) : 0;
// Display results
document.getElementById('resRevenue').innerText = '$' + revenue.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resProfit').innerText = '$' + profit.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resROI').innerText = roi.toFixed(2) + '%';
document.getElementById('resCPA').innerText = '$' + cpa.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resConv').innerText = Math.round(totalConversions);
document.getElementById('resClicks').innerText = Math.round(totalClicks);
// Styling the ROI based on performance
var roiEl = document.getElementById('resROI');
if (roi > 0) {
roiEl.style.color = '#27ae60';
} else if (roi < 0) {
roiEl.style.color = '#c0392b';
} else {
roiEl.style.color = '#333';
}
document.getElementById('roi-results').style.display = 'block';
}