Where it sits on the path: Ad · Revenue

Free tool

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

Campaign
SAR

What the platforms charged for this campaign. Add the VAT on ad invoices only if your business can't reclaim it; the platform ROAS here will then read lower than the dashboard's.

Orders the store got from this campaign, before cancellations and refusals. The platform's count is often higher.

SAR

Products only, as the customer pays (VAT included). Leave out the delivery fee the customer pays; it belongs in net delivery cost.

Cost per order
%

Landed cost (purchase, freight, customs) as a % of the pre-VAT selling price.

SAR

Courier, packaging and any flat COD fee per delivered order, minus the delivery fee the customer pays.

%

Card gateway, Tabby or Tamara, or a COD fee charged as a %. A flat fee per order goes in delivery cost.

%

Standard rate: 15% in Saudi Arabia, 16% in Jordan (some goods lower), 5% in the UAE. Enter 0 if your store isn't registered.

Cancellations, refusals and returns
%

As a % of the orders above, such as orders cancelled when you confirm them on WhatsApp. They cost no shipping.

%

As a % of orders shipped. If some are prepaid by mada or card, use the rate across all the campaign's shipped orders.

SAR

Shipping out and back, plus any return fee you don't get back.

Campaign fixed costs
SAR

Costs that disappear if you stop the campaign. Enter 0 if you have none.

Everything is calculated in your browser. Your numbers are not sent to this site or anyone else.

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

Platform ROAS4

Break-even ROAS4.21

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 itSAR 40,000
Cancelled, refused and returned ordersSAR −7,200
VATSAR −4,278
Product costSAR −12,835
Payment feesSAR −820
Delivery and returnsSAR −5,360
Contribution before adsSAR 9,507
Ad spendSAR −10,000
Campaign fixed costsSAR 0
Campaign profit before overheadsSAR −493

What moves your profit most?

Sorted by size, not by effort, with everything else held equal.

  1. Raise average order value by 10%SAR +1,487 a month
  2. Same orders for 10% less spendSAR +1,000 a month
  3. A quarter fewer refusals and returnsSAR +906 a month
  4. 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.

Want this applied to your business?

Tell me where things stand. I usually reply within two working days with what I need to start.