Skip to content
  1. Home
  2. Glossary
  3. Return on marketing investment
Revenue & return

Return on marketing investment

What marketing gave back for every euro spent — and the four things that quietly change the number without anything changing in your marketing.

Formula
(revenue − spend) / spend
Unit
Percentage
Direction
Higher is better
Across periods
Recomputed from totals, never averaged
In KO
romi

ROMI answers one question: for every euro you put into marketing, how much came back on top of it. A ROMI of 150% means each euro of spend returned €1.50 in revenue beyond the euro itself.

It is the most quoted marketing number and the easiest to move without improving anything. This page is mostly about that second part.

The formula

ROMI = (revenue − spend) / spend × 100%

€10,000 spent, €25,000 in attributed revenue:

(25,000 − 10,000) / 10,000 = 1.5 → 150%

The break-even point is 0%, not 100% — at 0% the campaign returned exactly what it cost. This is the first place ROMI gets confused with ROAS, which is a ratio of revenue to spend and breaks even at 100% (or 1×). The same campaign is 150% ROMI and 250% ROAS. Both are right; a dashboard that mixes them is not.

FormulaBreak-even
ROMI(revenue − spend) / spend0%
ROASrevenue / spend100%
ROI(profit − investment) / investment0%

ROI uses profit, ROMI uses revenue. That difference is the subject of the next section, and it is the reason a healthy-looking ROMI can sit on a loss-making campaign.

What it does not show

It does not know your margin. ROMI counts revenue, not what is left after cost of goods, delivery and support. At a 20% gross margin, a 150% ROMI campaign returns €0.50 of gross profit per euro spent — it loses money. At 80% margin the same campaign is excellent. ROMI cannot distinguish those two businesses, and it will not warn you.

It does not know when the money arrives. Spend lands the day you pay for it; revenue lands when the deal closes. If your sales cycle is 60 days, this month’s ROMI is this month’s spend against revenue driven by spend from two months ago. During a budget increase, the number will look worse than reality; while you are cutting, it will look better. Neither movement is performance.

It does not survive a change of attribution model. ROMI’s numerator is attributed revenue, and attribution is a choice, not a measurement. Switch the same period from first-touch to last-touch and revenue moves between channels — every channel’s ROMI changes while nothing about the marketing did. A ROMI figure without a stated model and window is not comparable to any other ROMI figure, including your own from last quarter.

It does not tell you whether to scale. ROMI is an average over money already spent. The question “should I add €10,000?” is about the marginal return of the next euro, which is usually lower — the cheapest, highest-intent audience is already being bought. Campaigns with excellent ROMI on a small budget routinely fail to hold it at triple the spend, and average ROMI cannot see that coming.

How it breaks

Averaging it across periods. This is the most common reporting bug, and it is silent. ROMI is a ratio, so a quarter’s ROMI is not the average of its three monthly ROMIs — it is recomputed from the quarter’s totals:

Correct:   (Σrevenue − Σspend) / Σspend
Wrong:     (ROMI_jan + ROMI_feb + ROMI_mar) / 3

The two disagree whenever spend is uneven between periods, which it always is. A month with tiny spend and a lucky deal produces a huge ROMI that then drags the “average” up with a weight it never earned.

Dividing by zero spend. Organic and direct traffic produce revenue against no spend. ROMI is undefined there — not infinite, not 0%. A tool that prints 0% is telling you your best channel returned nothing; one that prints a huge number is inventing a winner.

Revenue and spend measured in different places. Ad-platform “conversion value” and CRM revenue are different numbers: the platform counts what its own pixel saw, in its own attribution window, before refunds and cancellations. Mixing platform revenue into the numerator and platform cost into the denominator produces a ROMI that no one in finance recognises.

Counting the same revenue twice. When several channels each claim a deal under last-touch, summing per-channel revenue exceeds total revenue, and the blended ROMI computed from that sum is inflated. The total has to come from deals, not from adding up channel rows.

How KO calculates it

KO computes ROMI from CRM revenue, not from ad-platform conversion values — the numerator is money that a deal actually recorded.

romi is a derived metric: it is recomputed from summed inputs at every level of a report — per row, per segment, and for the grand total — never averaged from the level below. The quarter figure is (Σrevenue − Σspend) / Σspend by construction, so the averaging bug above cannot happen in a KO report.

Where spend is zero, the result is empty (), not zero. An undefined ratio is reported as undefined rather than being rounded into a claim.

The numerator depends on the attribution model applied to the report (first touch, last touch, or any touch), which is exactly why the model belongs next to the number when you share it.