ROAS, ROI, and profit: what each one tells a Shopify store owner
By the AdZoom team · Published
ROAS divides the revenue your ads brought in by what you spent on the ads. ROI divides the profit by what you spent on the ads. Profit is the money left once every cost is paid.
ROAS and ROI are ratios. Profit is an amount in dollars. They can rank the same campaigns in opposite orders, because ROAS never sees what the products cost you, what you paid to ship them, or the tax inside the order total.
The three formulas
ROAS = revenue ÷ ad spend. How to calculate ROAS has more examples of this one.
Profit = revenue − cost of goods − shipping − tax − ad spend.
ROI = profit ÷ ad spend, written as a percentage. It is the return on the money you put into ads.
Revenue is what customers paid for the orders, with the tax still in it. Shipping is what you paid to send the orders, not what you charged for it.
Which costs go under ROI
ROI has no single definition, and the versions differ in the denominator. This article divides by ad spend, because the ad budget is the money you choose to put in. Cost of goods, shipping, and tax follow from the orders, and the profit on top of the fraction already has them taken out. This version is also called ROMI, return on marketing investment.
Another convention divides the profit by every cost of the orders, which is ad spend plus cost of goods, shipping, and tax. On the pour-over campaign in the next section, with its profit of $0, that is $0 ÷ ($1,000 + $1,400 + $350 + $250) = 0%. The two versions agree only when profit is zero. The rest of this article uses profit ÷ ad spend.
Ask what is in the denominator before you set someone else's ROI beside yours.
One campaign under all three measures
A Shopify store sells coffee beans and brewing gear. Last month its campaign for a pour-over kit had these numbers.
- Ad spend: $1,000
- Revenue from the campaign's orders: $3,000
- Cost of goods: $1,400
- Shipping: $350
- Tax: $250
| Measure | Working | Result |
|---|---|---|
| ROAS | $3,000 ÷ $1,000 | 3.00 |
| Profit | $3,000 − $1,400 − $350 − $250 − $1,000 | $0 |
| ROI | $0 ÷ $1,000 | 0% |
One campaign, one month, three verdicts. ROAS says every ad dollar came back as three. Profit says nothing was left. ROI says the $1,000 put into ads returned no profit at all.
Three campaigns, ranked two ways
The same store ran two more campaigns that month, one for an electric grinder and one for its coffee beans. Each spent $1,000, so every difference below comes from the orders.
| Last month | Pour-over kit | Grinder | Beans |
|---|---|---|---|
| Ad spend | $1,000 | $1,000 | $1,000 |
| Revenue | $3,000 | $4,000 | $2,400 |
| Cost of goods | $1,400 | $2,400 | $600 |
| Shipping | $350 | $520 | $216 |
| Tax | $250 | $320 | $192 |
| ROAS | 3.00 | 4.00 | 2.40 |
| Profit | $0 | −⁠$240 | $392 |
| ROI | 0% | −⁠24% | 39.2% |
The grinder campaign
- ROAS: $4,000 ÷ $1,000 = 4.00
- Profit: $4,000 − $2,400 − $520 − $320 − $1,000 = −⁠$240
- ROI: −⁠$240 ÷ $1,000 = −⁠24%
The beans campaign
- ROAS: $2,400 ÷ $1,000 = 2.40
- Profit: $2,400 − $600 − $216 − $192 − $1,000 = $392
- ROI: $392 ÷ $1,000 = 39.2%
The rankings
| Rank | By ROAS | By profit | By ROI |
|---|---|---|---|
| 1 | Grinder, 4.00 | Beans, $392 | Beans, 39.2% |
| 2 | Pour-over kit, 3.00 | Pour-over kit, $0 | Pour-over kit, 0% |
| 3 | Beans, 2.40 | Grinder, −⁠$240 | Grinder, −⁠24% |
Sorted by ROAS, the grinder campaign gets more budget and the beans campaign gets cut. Sorted by profit, it is the other way round. ROI is profit per ad dollar, and each campaign spent the same, so it gives the same order as profit.
The grinder costs a lot to buy in and to ship. Its $4,000 of revenue leaves $760 once cost of goods, shipping, and tax are paid, which doesn't cover $1,000 of ads. The beans campaign's $2,400 leaves $1,392.
Why the order flips
Each campaign has its own break-even ROAS, set by the costs of what it sells. It is 1 ÷ margin after costs, where margin after costs is the share of revenue left after cost of goods, shipping, and tax. In dollars that is revenue ÷ (revenue − cost of goods − shipping − tax).
- Pour-over kit: $3,000 ÷ $1,000 = 3.00. The campaign ran at 3.00, exactly at break-even.
- Grinder: $4,000 ÷ $760 = 5.26. The campaign ran at 4.00, below break-even.
- Beans: $2,400 ÷ $1,392 = 1.72. The campaign ran at 2.40, above break-even.
A ROAS means something only beside the break-even of the products behind it. Break-even ROAS has the formula and a way to find yours from Shopify's reports.
What each measure tells you
| Measure | The question it answers | What it can't see |
|---|---|---|
| ROAS | How much revenue did each ad dollar bring in | Every cost except the ads |
| ROI | How much profit did each ad dollar return | How many dollars that is |
| Profit | How much money is left | How much had to go out to earn it |
ROAS is quick, and it is fair between ads for the same product, where the costs behind each order are the same. Across products it misleads, as the grinder shows.
Profit is the one to sort by when you decide which campaign to cut and which to grow. It is also the only one of the three you can pay a bill with.
ROI is for comparing campaigns of different sizes, or for weighing ads against another use of the same money, such as more stock.
ROI and profit can disagree too
Suppose the beans campaign had spent $2,000 at the same rates. Revenue would be $4,800, cost of goods $1,200, shipping $432, and tax $384.
- Profit: $4,800 − $1,200 − $432 − $384 − $2,000 = $784
- ROI: $784 ÷ $2,000 = 39.2%
Profit doubled and ROI stayed where it was. ROI is a rate, so it puts a small campaign and a large one on the same scale. Profit is an amount, so it says what the campaign added to your bank balance. To run your own numbers for one order, use the Shopify profit calculator.
What people mean by true ROAS
True ROAS is a term people use, not a metric with an official definition. It names a ROAS that has been corrected in one of two ways, or in both.
On the store's real orders
The ROAS in Ads Manager or Google Ads rests on each platform's own count of the revenue it credits to its ads. The first correction swaps that for the revenue of the orders your Shopify store recorded and can tie to the campaign. Why ad platforms and Shopify report different sales explains the gap between the two.
AdZoom's ROAS column is this kind, the revenue of the Shopify orders matched to a Meta or Google Ads campaign divided by that campaign's ad spend. Beside it are Profit, after tax, cost of goods, shipping, and the ad spend, and ROMI, which is profit ÷ ad spend, the ROI of this article.
After costs
The second correction takes cost of goods, shipping, and tax out of the revenue before dividing by ad spend.
- Pour-over kit: ($3,000 − $1,400 − $350 − $250) ÷ $1,000 = 1.00
- Grinder: ($4,000 − $2,400 − $520 − $320) ÷ $1,000 = 0.76
- Beans: ($2,400 − $600 − $216 − $192) ÷ $1,000 = 1.39
On this version, break-even is 1.00 for every campaign, whatever it sells. Subtract 1 and you have the ROI. For the grinder that is 0.76 − 1 = −⁠0.24, its −⁠24%.
Since the term has no fixed meaning, ask which correction was made before you rely on anyone's true ROAS.