Where it sits on the path: Ad · Revenue
Campaign profit calculator: is your store really making money after returns, delivery and VAT?
Put in one month of a campaign's numbers. You'll see what's left of the sales the platform reports, the ROAS you need to stay above, and which change moves your profit most.
The calculator
Result
The numbers shown are a hypothetical example with round numbers. Replace them with yours.
The campaign loses money
Campaign profit for the month, before overheads
SAR −493
0.21 below break-even
- ROAS on net revenue
- 2.85
- Actual cost per order
- SAR 50
- Most an order can cost
- SAR 47.53
- Profit per delivered order
- SAR −3.01
- Profit as % of net revenue
- −1.7%
- Delivered orders
- 164 / 200
From the platform's number to profit
| Order value as the platform records it | SAR 40,000 |
|---|---|
| Cancelled, refused and returned orders | SAR −7,200 |
| VAT | SAR −4,278 |
| Product cost | SAR −12,835 |
| Payment fees | SAR −820 |
| Delivery and returns | SAR −5,360 |
| Contribution before ads | SAR 9,507 |
| Ad spend | SAR −10,000 |
| Campaign fixed costs | SAR 0 |
| Campaign profit before overheads | SAR −493 |
What moves your profit most?
Sorted by size, not by effort, with everything else held equal.
- Raise average order value by 10%SAR +1,487 a month
- Same orders for 10% less spendSAR +1,000 a month
- A quarter fewer refusals and returnsSAR +906 a month
- Product cost 3 points lowerSAR +856 a month
The short answer
Break-even ROAS is the lowest return on ad spend the platform can report without the campaign losing money. It equals the order value the platform records divided by what's left of it after VAT, product cost, delivery, payment fees, cancelled or refused orders and any campaign fixed fees. If your campaign's ROAS sits below it, you're paying to sell, however good the number looks in the ads dashboard.
How to read the result
The first thing to look at isn't the profit. It's the gap between two lines: platform ROAS and break-even ROAS. The first is what Google Ads, Meta or Snapchat shows you. The second is where profit starts for your store, with your costs.
- If platform ROAS sits comfortably above break-even, the campaign makes money, and the real question becomes how far you can raise spend before the gap closes.
- If the two are close, the campaign is paying for itself and little more. One season with more refusals or pricier clicks will tip it into a loss. That's why the calculator calls a campaign "barely pays for itself" when its profit is under 15% of its ad spend plus campaign fees. Put another way, platform ROAS is less than about 15% above break-even, so a 15% rise in cost per order wipes the profit out.
- If platform ROAS is below break-even, a bigger budget makes the loss bigger. It doesn't fix it.
Two cautions before you act on the gap. Each platform counts the orders it claims, and Google and Meta can both claim the same one, so check the platform's order count against the store's. And a first order that loses money can still pay off if those customers buy again; that call rests on customer acquisition cost and lifetime value, not on this calculator.
My view: break-even ROAS belongs on the first line of every weekly ads report, above anything the platform says. Without it, nobody in the meeting knows whether a ROAS of 4 is good news or a slow leak.
Why platform ROAS flatters cash-on-delivery stores
The platform records an order's value the moment it's placed. Whatever happens after that never reaches it unless you send it back yourself. For a store in Saudi Arabia or Jordan that relies on cash on delivery, a lot happens after that moment:
| After the order | What it does to profit | What you enter |
|---|---|---|
| The order is cancelled before it ships | No revenue, but no shipping either | Orders cancelled before shipping |
| The customer refuses delivery or returns the item | No revenue, but you pay shipping out and back | Refusal rate, cost per refused order |
| Tax is inside the price | 15% VAT in Saudi Arabia, 16% general sales tax in Jordan (the general rate; some goods carry less), and none of it is yours | VAT or sales tax rate |
| Product cost | Two products at the same price with different margins show the same ROAS and very different profit | Product cost as % of the pre-VAT price |
| Delivery, COD collection and payment fees | Paid on every order that's delivered | Net delivery cost, payment fees |
I'm not saying platform ROAS is a false number. It's accurate about what it measures: the value of orders placed. The trouble is that the decision built on it, more budget or less, needs the value of what's left, not what was placed.
The worked example: a ROAS of 4 that loses money
The calculator opens on a hypothetical example with round numbers, chosen to show how a ROAS that looks healthy can hide a loss:
A hypothetical example with round numbers: a store in Saudi Arabia spends SAR 10,000 on ads in a month and gets 200 orders at an average of SAR 200 including VAT. The platform reports SAR 40,000 in sales: a ROAS of 4.
Then the calculator starts subtracting. 18% of orders were refused at the door, leaving 164 delivered orders worth SAR 32,800. About SAR 4,278 of that is VAT, which isn't the store's money. Product cost is 45% of the pre-VAT price. Delivery is SAR 25 per delivered order and SAR 35 per refused one. Payment fees are 2.5%.
The result: about SAR 9,507 is left before ads, and the ads cost SAR 10,000. The store lost roughly SAR 493 to deliver 164 orders, and its break-even ROAS is about 4.2. The campaign needed more than 4.2 on the platform just to not lose money.
Now drop the refusal rate from 18% to 13% and the loss turns into a small profit of about SAR 513. Here, five points of refusals are worth about as much as getting the same orders for 10% less ad spend. One condition: those five points have to become delivered orders. If confirming on WhatsApp only cancels them before they ship, enter 5% in cancellations and change the refusal rate to 13.7% (the same 26 refusals, now out of 190 shipped orders, because the refusal rate is counted on shipped orders). You save the return shipping (about SAR 350), the loss shrinks to about SAR 140, and the campaign still loses money.
The formulas behind the calculator
Nothing is hidden. Here is the arithmetic in order, for one month and the campaign's orders only:
| Line | Formula |
|---|---|
| Shipped orders | orders × (1 − cancellation rate) |
| Refused orders | shipped orders × refusal rate |
| Delivered orders | shipped orders − refused orders |
| Collected from customers | delivered orders × average order value |
| Net revenue | collected ÷ (1 + VAT rate) |
| Product cost | net revenue × product cost % |
| Payment fees | collected × fee % |
| Delivery | delivered × delivery cost + refused × cost per refused order |
| Contribution before ads | net revenue − product cost − fees − delivery |
| Campaign profit | contribution − ad spend − campaign fixed costs |
| Platform ROAS | (orders × average order value) ÷ ad spend |
| Break-even ROAS | (orders × average order value) ÷ (contribution − fixed costs) |
| Maximum cost per order | (contribution − fixed costs) ÷ orders |
I assume a refused item goes back into stock in sellable condition, so its product cost isn't counted. If your products spoil or can't be resold, raise the cost per refused order by what you lose.
It's the same formula I walk through in High ROAS, losing money: break-even ROAS is 1 divided by the contribution margin, as long as that margin is calculated on the value the platform records and the campaign has no fixed costs; with fixed costs, subtract them from the contribution first.
Before you compare it with a dashboard, check two things. The break-even here is based on the orders and order value you entered. If the platform reports a different conversion value for the month, because it claims more orders or its tag sends values before VAT or with shipping, multiply the break-even by (the platform's conversion value ÷ (your orders × average order value)) before you compare. And dashboards show cost before tax: if your business pays VAT on its ad invoices and can't reclaim it, multiply the break-even ROAS by (1 + that rate) before you compare.
What to do with the result
Under the result, the calculator ranks four changes by what each adds to your profit: a quarter fewer refusals, a 10% higher order value, the same orders for 10% less spend, or product cost three points lower. The list is sorted by size, not by effort, and each change is calculated with everything else held equal.
In the example, a higher order value adds the most (about SAR 1,487 a month), then lower spend (about SAR 1,000) and a quarter fewer refusals (about SAR 906). Two cautions: a bigger basket can raise refusals on cash on delivery, and confirming orders on WhatsApp turns some refusals into cancellations before shipping, which saves the return shipping but not the sale. For the moves that need work outside the ad account, see raising average order value without discounting and following up leads on WhatsApp.
If the calculator shows a loss and you can't tell where to start, that's what I do in a revenue-based marketing audit: I match each platform's numbers against the store's and the courier's, and find where the money leaks before anyone touches the budget.
Questions
How is this different from other ROAS calculators?
Most ask you for one ready-made margin and divide 1 by it. This one builds the margin from its parts: VAT inside the price, cancellations before shipping, the cash-on-delivery refusal rate, return shipping both ways, and payment fees. Those are the lines that eat profit for stores in Saudi Arabia and Jordan, and a ready-made margin usually leaves them out.
Where do I find my refusal rate?
In your store's order report or your courier's statement: orders that came back undelivered or were returned, divided by all orders shipped in the same month. Use the campaign's orders if you can. Orders from people who don't know you yet are often refused more than orders from returning customers. If some orders are prepaid by mada or card, use the rate across all shipped orders, not the cash-on-delivery rate alone.
Should average order value include VAT?
Yes, as the customer pays it for the products, without the delivery fee. The calculator strips VAT out at the rate you set, because VAT isn't your revenue. Then check what your tag sends to Google Ads or Meta: some store integrations send the value before VAT or with shipping, and the break-even ROAS has to be read on the same basis.
Why doesn't it include salaries and rent?
Because the question here is whether this campaign brings in more than it costs. Salaries and rent get paid whether it runs or not, so the calculator shows campaign profit before overheads. If the campaign has costs that would disappear if you stopped it, like account management or creative fees, put them in the campaign's fixed costs.
Are my numbers sent anywhere?
No. Everything is calculated in your browser, and no figure is sent to this site or its analytics. The "Copy link to this result" button puts the numbers after the # at the end of the link, a part browsers never send to any server, so only the people you send it to can see them.
Related articles
-
Where it sits on the path: Ad · Revenue
High ROAS, Losing Money: What Return on Ad Spend Leaves Out
A platform's ROAS is a claim that needs a bank statement beside it. Here is how to find the point where profit starts, and a four-line sheet to read every week.
· 11 min read
-
Where it sits on the path: Offer · Revenue
How to Increase Average Order Value Without Discounts
A worksheet that splits average order value three ways, the arithmetic for placing a free-shipping threshold, and what changed at a Saudi store when I did not start with a discount.
· 9 min read
-
Where it sits on the path: Ad · Revenue
How to Calculate CAC and LTV for a Store or a Service Business
Customer value measured on revenue can look like three times its acquisition cost while barely covering it. Here is an honest way to calculate both, in riyals and dinars.
· 10 min read
Want this applied to your business?
Tell me where things stand. I usually reply within two working days with what I need to start.