Shopify ROAS calculator

Shopify ROAS calculator: a worked Shopify study

An example of Shopify ROAS calculator. Replace the figures with your own before you decide.

Key takeaways

  • Break-even ROAS in this example is 1.47.
  • Fees are excluded until you add them. Excluding them makes the target look easier than the payout.
  • Recalculate when the offer changes. The target belongs to this unit, not to the store.

One sale, with the target written out

Say you sell a 30ml vitamin C serum at $42, with $9 of product cost and $4.50 of shipping you pay. This is not a result from a live store.

  • Left before ads. $28.50, which is price minus product minus shipping
  • Break-even ROAS. 1.47. That is price divided by what is left before ads
  • Gross margin, before shipping and ads. 78.6 percent, which is (price − product cost) ÷ price

Fees are not in this example. Add the payment fee you actually pay before you treat 1.47 as the target. The order can spend up to $28.50 on ads and fees together and still cover product and shipping. Anything above that comes out of the sale.

You would write 1.47 on the brief as the return this sale needs, then refuse a campaign goal below it unless lifetime contribution covers the difference on purpose. A larger order only helps if the added items still leave contribution after their own cost and shipping.

What you would change first

If a bundle raises the price and the cost, this target is stale the moment the bundle goes live. Run the pair as its own unit in the ROAS calculator. Do not average it with the single.

One serum, with rates that are placeholders

This is one invented serum, used to extend a single stack. It is not a shop, not a category claim, and not a campaign that ran. Say the price is 42 dollars. Example product cost is 9 dollars. Example shipping you pay is 4.50 dollars. No fee is included in the base. The ad sketch uses three placeholders: CPM of 12 dollars, CTR of 1.2 percent, and CVR of 2 percent. Those rates are placeholders. They are not typical rates. They are not recommended rates. They exist so the formula can be watched.

Hold this serum as one unit. Do not turn the placeholders into a monthly forecast. Every step below either computes the base or changes one line and then restores it. The base plan, once the sketch is finished, loses money. That loss is the point of the illustration, not a finding about serums.

How the placeholder rates become an ad cost

Ad cost per purchase equals CPM divided by (1000 times CTR) divided by CVR. CTR of 1.2 percent enters as 0.012. CVR of 2 percent enters as 0.02. One thousand times 0.012 is 12. CPM of 12 dollars divided by 12 is 1 dollar, which is the placeholder cost per click. Divide that 1 dollar by 0.02 and the ad cost per purchase is 50 dollars. The 50 dollars is a sketch from placeholders, not an observed cost from an account.

If someone drops the decimals and types 1.2 and 2, they are no longer using this example. The formula needs the decimal form. Write 0.012 and 0.02 next to the words 1.2 percent and 2 percent so the translation stays visible. Then write placeholder beside all three rates.

Contribution before ads on this unit

Contribution before ads is price minus product minus shipping minus fees you include. Fees in the base are none. 42 minus 9 is 33. 33 minus 4.50 is 28.50. Contribution before ads is 28.50 dollars. That figure is not profit, because the ad sketch has not been subtracted yet. It is the amount the ad cost must fit inside if the unit is going to break even.

Gross margin would stop even earlier, after product only. This contribution continues through shipping. Do not call 28.50 a margin percentage. It is dollars left before ads, on this invented unit, with no fee. The margin page is a different reading.

The placeholder plan loses money

Subtract the 50 dollar placeholder ad cost from the 28.50 dollar contribution. 28.50 minus 50 is negative 21.50. The unit loses 21.50 dollars in this example. The plan loses money. There is no second interpretation in which 50 dollars of ad cost fits inside 28.50 dollars of contribution. Any note that calls this base acceptable has ignored the subtraction.

Observed-style ROAS, if this one unit's revenue is 42 and the ad cost is 50, is 42 divided by 50, which is 0.84. The ratio is below 1. Revenue does not cover ad spend, even before you remember that product and shipping were real costs too. The loss of 21.50 already included those costs. The 0.84 ratio is the revenue multiple only.

Break-even ROAS for the same unit

Break-even ROAS is price divided by contribution. 42 divided by 28.50 is about 1.47. At that ratio, ad spend would equal 28.50 dollars and profit after product, shipping, and ads would be zero. The hurdle is a property of this unit. It is not a bid. The placeholder sketch, at 0.84, sits under the hurdle. That is the same fact as the 21.50 dollar loss, seen as a ratio.

A target of 1 would still lose money on this unit, because 1 is below 1.47. Revenue equaling ad spend leaves nothing for the 9 dollar product and the 4.50 dollar ship cost. This is why a ratio above 1 is not the hurdle. The hurdle comes from the unit. Write 1.47 next to the words break-even for this example, and do not reuse it on a different price.

Add one fee, then take it away

Add an example fee of 1.50 dollars, as a line you choose to include for this step only. Contribution becomes 28.50 minus 1.50, which is 27 dollars. The loss against the 50 dollar placeholder ad cost becomes 23 dollars. Break-even ROAS becomes 42 divided by 27, about 1.56. The hurdle got harder because the unit kept less, not because the placeholder rates changed.

Remove the fee. Contribution returns to 28.50, the loss returns to 21.50, and break-even returns to about 1.47. The fee step shows that an unnamed processor charge would make this already losing sketch worse. It does not provide a fee to copy onto a live shop. Read a real schedule before you type a real fee.

Replace the sketch with a typed observed cost

Put the base unit back, with no fee. Now replace only the ad cost. Say an export for a window you are willing to use shows an example ad cost of 20 dollars per purchase, and you type 20 for this unit as that observed attachment. This 20 is still an example input, not a result from a store, and it is not a typical cost. Contribution remains 28.50. Profit after ads becomes 28.50 minus 20, which is 8.50 dollars.

ROAS on that alternate input is 42 divided by 20, which is 2.1. The hurdle is still about 1.47. In this alternate example, 2.1 is above 1.47, so the typed ad cost fits inside the contribution. The placeholder plan at 50 dollars still loses money. The alternate input is a different typed cost, not proof that the placeholders were 'conservative' or that a real account will see 20 dollars. If you do not have an export, you do not get to type 20.

Restore the losing base on purpose

Put the ad cost back to the 50 dollar placeholder. The unit loses 21.50 dollars again. Do this restore in the note so a reader cannot walk away remembering only the 8.50 dollar alternate. The alternate was a sensitivity. The base of this example is the placeholder stack, and the placeholder stack loses money.

State the rates one more time as placeholders: CPM 12 dollars, CTR 1.2 percent used as 0.012, CVR 2 percent used as 0.02. They are not typical. Anyone who copies them into a live account as expected rates has left the example and started spending on a fiction.

The note that keeps the two ad costs apart

The note has two labeled blocks. Block one: placeholders, ad cost 50, contribution 28.50, loss 21.50, ROAS 0.84, break-even about 1.47, plan loses money. Block two: alternate typed ad cost 20, profit 8.50, ROAS 2.1, same hurdle, still an example input. A fee sensitivity of 1.50 dollars sits in a margin of the first block, then comes back off.

The note does not recommend a bid of 20 or a bid of 50. It does not say serums lose money. It does not say a 1.47 ROAS is a goal for any other product. It says this unit, with these typed lines, behaves like this. A real export replaces block two's 20 with a real figure and replaces block one's sketch entirely. It does not edit this page into a history.

Where this serum stops

Do not add a subscription, a second bottle, or a lifetime value onto this unit inside the same breath. Repeat revenue is a different calculator, at /lifetime-value/, and its output is revenue, not a repair for a 21.50 dollar loss. A loss on the first unit is still a loss on the first unit if the repeat never arrives. Do not bury the loss under an assumed second order.

Do not carry 1.2 percent or 2 percent into another worksheet as starting rates. If another sheet needs a sketch, it must choose its own placeholders and call them placeholders again. Better, it waits for spend divided by purchases. The serum's job was to show a hurdle, a sketch that loses, and an alternate typed cost that does not. That job is finished.

Shopify questions

Is this a store’s result?

No. The costs are an example, so you can see which input moves the target. Use your price and your supplier quote.

Does a higher price always lower the break-even return?

Only if the extra price is not eaten by extra cost, shipping, or fees. A bundle can raise the price and still worsen the return.