Glossary

What is ROAS, and what Google’s ROAS leaves out

ROAS (return on ad spend) is revenue divided by ad spend. Google Ads computes it as conversion value ÷ cost, credited to the click date. ROAS does not subtract what the goods cost you, so on its own it cannot tell you whether a product made money.

Last checked · More glossary

The ROAS formula

ROAS = revenue ÷ ad spend. It is a ratio, usually written with a ×. For example, €4,500 of revenue on €1,000 of spend is a ROAS of 4.50×, sometimes written as 450%.

The formula never changes. What changes between tools is which revenue goes on top and which spend goes underneath — which is why the ROAS in your ad account and the ROAS you work out from Shopify usually differ.

What Google’s ROAS includes

Google’s ROAS is conversion value divided by cost, and both halves come from the ad account. Google calls the column “Conv. value / cost”.

Conversion value is the value your tag or import sends for each conversion (or the default value set on the conversion action), adjusted by any conversion value rules you have set. It is counted over the conversion window and attribution model you have configured — the default click-through window is 30 days — and credited to the day of the click rather than the day of the order: Google’s primary conversion columns are calculated on the time of the click, not the time of the conversion. For example, a click on 28 September that becomes an order on 3 October counts in September.

Everything is reported in the ad account’s currency. Conversion values sent in another currency are converted at Google’s average daily exchange rate.

For comparing two campaigns on the same day, that is a good measure of advertising performance — but not of what the sales were worth to you.

What Google’s ROAS leaves out

Google’s ROAS leaves out every fact that lives in Shopify, in your supplier’s invoices or in your bank rather than in the ad account:

  • VAT, if your conversion value is sent including it — which inflates every ROAS by the tax rate, a fifth at 20% VAT
  • Refunds and cancellations, unless you send conversion adjustments back to Google Ads to restate or retract the value
  • Cost of goods, unless you send cart data with your conversions and a cost_of_goods_sold value in your Merchant Center feed — and even then Google adds gross-profit metrics to its reports, while ROAS itself stays conversion value ÷ cost
  • Payment processing fees
  • Shipping you bear rather than charge
  • Your store’s currency: Google reports in the ad account’s currency, so if your store sells in another one, its ROAS will not line up with Shopify until one side is converted

None of these is an error on Google’s part. The ad platform simply has no access to facts it is never sent.

From Google’s ROAS to true ROAS, in order

True ROAS rebuilds the top of the fraction from Shopify and the bottom from converted spend. Do it in this order and you will not have to redo a step:

  1. Step 1: Start from orders, not conversions

    Take your Shopify sales for the period on the order date, after discounts (Shopify’s Gross sales minus Discounts). This anchors the calculation to orders rather than to credited conversions.

  2. Step 2: Subtract refunds

    Revenue is gross sales minus refunds, on the same period as the sales — a refund recorded in the period reduces it, even if the order is older.

  3. Step 3: Strip VAT if your figure includes it

    Shopify’s Gross sales and Net sales already exclude taxes; order totals do not. Revenue for this purpose is what you keep. Tax collected on behalf of a government was never yours.

  4. Step 4: Convert spend at each day’s rate

    If the ad account bills in another currency, convert day by day and then sum, rather than converting the period total.

  5. Step 5: Divide

    True ROAS is adjusted revenue divided by converted ad spend. If a day has ad activity and no usable exchange rate, leave the period unreported rather than estimating it.

Worked example: gross against adjusted ROAS

In this example, a 6.00× ROAS in the ad account becomes 4.50× once refunds and VAT come off — a quarter of it disappears. The figures are illustrative, not from any store. To isolate the adjustments, assume the month’s Shopify order totals, including VAT, exactly match the conversion value Google recorded; in practice they rarely do, because of click-date crediting and attribution.

  1. Step 1: Google’s ROAS: 6.00×

    Example: cost €1,000; conversion value €6,000, sent including 20% VAT. €6,000 ÷ €1,000 = 6.00×.

  2. Step 2: Refunds off: 5.40×

    €600 was refunded in the month. €6,000 − €600 = €5,400, and €5,400 ÷ €1,000 = 5.40×.

  3. Step 3: VAT off: 4.50×

    At 20% VAT, €5,400 ÷ 1.20 = €4,500 of revenue you keep. €4,500 ÷ €1,000 = 4.50×.

  4. Step 4: Spend converted: unchanged here

    The example ad account bills in euros, so spend stays €1,000. Had it billed in another currency, each day’s spend would be converted at that day’s rate before summing.

  5. Step 5: True ROAS: 4.50×

    Adjusted revenue ÷ converted spend = €4,500 ÷ €1,000 = 4.50×, against 6.00× in the ad account.

The next step is POAS

Say the goods sold cost €2,000 (still the example). POAS = (€4,500 − €2,000) ÷ €1,000 = 2.50×, and net profit after ad spend is €4,500 − €2,000 − €1,000 = €1,500 — before payment fees and any shipping you bear.

Why ROAS cannot tell you profit, and where POAS takes over

ROAS measures revenue per unit of spend, and revenue is not profit: the same ROAS can be a profit on one product and a loss on the next, because margins differ.

Example: two products each take €1,000 of spend and bring €3,000 of revenue — 3.00× ROAS each. Product A’s goods cost 60% of revenue, a 40% margin; product B’s cost 75%, a 25% margin. A keeps €1,200 after cost of goods, which covers its €1,000 of spend with €200 left. B keeps €750 and loses €250. Same ROAS, opposite answers.

Break-even ROAS is 1 ÷ margin: 2.50× for A and 4.00× for B. It works, but it is a different target for every product and moves whenever a cost or a price does.

POAS removes that bookkeeping. POAS = (revenue − cost of goods) ÷ ad spend, and its break-even is 1.00× for every product. In the example, A’s POAS is €1,200 ÷ €1,000 = 1.20× and B’s is €750 ÷ €1,000 = 0.75× — below the line, whatever its ROAS looks like.

As Opteno defines it, POAS takes off cost of goods (each sold variant’s cost-per-item, or a store-wide percentage) and nothing else. Payment fees are not subtracted, and shipping you bear counts only if you include it in cost-per-item. Both belong in the margin you use for break-even ROAS; the break-even ROAS calculator takes both as inputs.

How Opteno reports ROAS

  • Revenue = gross sales − refunds, from Shopify
  • ROAS = revenue ÷ ad spend, with spend converted at each day’s own rate
  • POAS = (revenue − cost of goods) ÷ ad spend, shown beside ROAS on the product row, break-even at 1.00× in the default setting (a True Profit setting also subtracts ad spend)
  • Rolling 7, 14, 30 and 60-day windows, each ending yesterday, per product, variant, country and Shopify market
  • Where a day has ad activity and no usable exchange rate, the figure is shown as unavailable with the reason rather than estimated

Questions about ROAS

Why is ROAS unavailable with zero spend?

ROAS divides by ad spend, and dividing by zero has no answer — it is undefined, not zero. Printing 0 would make a product that sold without advertising look like a failing one.

Is a 3× ROAS good?

It depends on your margin. Break-even ROAS is 1 ÷ margin: at a 40% margin you need 2.50×, so 3× makes money; at a 25% margin you need 4.00×, so at 3× each €1 of ad spend brings back only €0.75 after cost of goods. Work out yours per product with the break-even ROAS calculator.

Why is my Google Ads ROAS higher than my real ROAS?

Common reasons: Google’s conversion value may include VAT, refunds may never have been sent back as conversion adjustments, and Google’s attribution model can credit ads with orders counted differently in Shopify — the example above loses a quarter of its ROAS to VAT and refunds alone. Google also credits each conversion to the click date, so a single week or month may not match Shopify’s order dates.

How do I compare Google Ads ROAS with Shopify revenue?

Match the dates first. Google’s standard conversion columns count a conversion on the day of the click; its “by conv. time” columns, such as “Conv. value (by conv. time)”, count it on the day it happened, and Google suggests them for comparing with Shopify. Then put both sides on the same basis: take refunds off the Shopify side, use a VAT-free figure on both (Shopify’s Gross and Net sales already exclude tax; remove VAT from Google’s conversion value if your tag sends it gross), and convert spend to the store’s currency day by day.

What is the difference between ROAS and POAS?

ROAS divides revenue by ad spend. POAS divides what is left after cost of goods by the same spend, so its break-even is 1.00× for every product instead of a different target per margin. ROAS tells you how the advert performed; POAS tells you whether the sale paid for its advertising.

See which products are losing you money

Connect Shopify and Google Ads in under five minutes. From $14.99 a month, cancel whenever you want, and no change to your store or your campaigns without your approval.

support@opteno.app