How to calculate marketing ROI
The formula, the inputs, and the attribution choices that change the answer.
Marketing ROI looks like a single number. It isn't. The same campaign can show a 4x return or break even, depending on which costs you include, which conversions you count, and how you split credit across channels. The formula is simple. The honesty is the hard part.
The formula and what it hides
The base formula is unambiguous: ROI = (revenue attributed to marketing − marketing cost) ÷ marketing cost. A 100% ROI means you doubled your money. A 300% ROI means you made three dollars for every dollar spent. The variables in the formula are where the disagreement lives.
Three questions determine whether the same campaign looks like a winner or a loser. What counts as marketing cost? What revenue are you allowed to claim? And how is credit split when a customer touched five channels before buying? Get any one of those wrong and the number is fiction.
What goes in the cost side
The honest cost number includes more than ad spend. Teams that report only "media cost" produce ROI numbers that flatter the channel and mislead leadership. The full cost stack:
- Media spend — ads, sponsorships, paid placements. The obvious bucket.
- Production cost — creative, video, photography, copywriting, design. A campaign that needed a $40k shoot has a different ROI than one assembled from existing assets.
- Tooling and platform fees — your analytics platform, your testing tool, your form builder, ad platform fees beyond CPM. Annualize and allocate.
- Loaded labor cost — the marketer's time spent planning, running, and reporting on the campaign. Use a fully-loaded hourly rate, not just salary.
- Agency or contractor fees — usually obvious, occasionally hidden in retainer line items.
- Promotional cost of goods — discounts, free samples, free shipping, prize values for giveaways. Real money, often forgotten.
If your "ROI" only divides revenue by media spend, you're calculating ROAS — return on ad spend — not ROI. Both are useful. They are not the same number, and confusing them in a board deck is a fast way to lose credibility.
What counts as revenue
The revenue side has its own traps. Gross revenue is the easy number; it's also usually wrong. Marketing teams that report on gross revenue overstate impact compared to teams reporting on contribution margin. The right number depends on your business and how the conversation is framed.
For ecommerce, revenue minus COGS minus refunds is closer to the truth. For SaaS, the right denominator is often new ARR or net new MRR, sometimes discounted by expected churn over an LTV window. For lead-gen businesses, you have to multiply qualified leads by close rate and average deal size — and you should report the leads number alongside the revenue number, because the lag between lead and close hides recent campaign performance for months.
Attribution: the choice that changes the answer
The hardest variable is which marketing touch gets credit. A buyer saw a paid social ad, then a podcast mention, then read three blog posts, then clicked a retargeting email, then bought. Which channel "drove" the sale?
The honest answer is "all of them, partially." The practical answer depends on which attribution model you pick. Six attribution models walk through the trade-offs. The shortest version:
- Last-touch overcredits closing channels (retargeting, branded search). Easy to compute. Hides upper-funnel value.
- First-touch overcredits awareness channels and ignores the work that closed the deal.
- Linear and time-decay spread credit across touches with different weighting rules.
- Data-driven models use your conversion data to assign credit. They need volume and clean tracking to mean anything.
You can run multiple models in parallel and report a range. That feels less satisfying than a single number, but it's closer to the truth, and good leadership teams learn to read it.
A worked example
A B2C brand spends $20k on a paid social campaign over four weeks. Direct attributable revenue (last-click) is $80k — 4x ROAS, easy story. Plug in the rest of the math: $5k of creative production, $2k of platform tooling, $3k of marketing salary loaded, and $8k of margin lost to a 20% promo code that was the campaign hook. Total cost: $38k. Revenue at 50% gross margin: $40k. ROI: ($40k − $38k) / $38k = ~5%. Same campaign, very different story.
- Decide cost stack and revenue definition before you launch — not after the data lands.
- Pick a primary attribution model and a secondary one for sanity check.
- Tag every campaign source consistently with a UTM taxonomy so attribution data is trustworthy.
- Report ROI alongside ROAS and contribution margin so leadership sees the full picture.
- Re-run the math at 30, 60, and 90 days post-campaign for SaaS or considered-purchase categories.
The fastest way to lift ROI: lift conversion rate
The cheapest ROI improvement isn't more spend — it's a higher conversion rate on the traffic you already paid for. Doubling conversion doubles ROI without touching the cost side. That's why a serious CRO program usually outperforms an extra channel, and why running tests with real statistical rigor earns its keep over a quarter.