Glossary
What is POAS? Profit on ad spend: formula, break-even and examples
POAS (profit on ad spend) is the gross profit an advert's sales left after cost of goods, divided by the ad spend: POAS = (revenue − cost of goods) ÷ ad spend. Its break-even is 1.00× for every product. Above it, the advertising paid for itself once the goods were paid for. Below it, the advertised sales lost money.
Last checked · More glossary
POAS in one line, and the formulas around it
POAS measures whether advertising paid for itself once the goods were paid for. ROAS divides revenue by ad spend. POAS divides gross profit (revenue minus cost of goods) by the same spend.
- POAS = (revenue − cost of goods) ÷ ad spend
- ROAS = revenue ÷ ad spend
- Gross margin = (revenue − cost of goods) ÷ revenue
- POAS = ROAS × gross margin
- Net profit after advertising = revenue − cost of goods − ad spend = ad spend × (POAS − 1)
Here gross margin is the period's gross profit as a share of revenue. Opteno's Gross Margin column is something else: a per-unit amount from the product's lowest-margin variant. ROAS × that column does not give POAS.
POAS is usually written as a multiple, such as 1.33×. Some sources multiply it by 100 and write 133%. The ratio is the same, and break-even then becomes 100%.
Why break-even is 1.00× for every product
POAS breaks even at 1.00× whatever the product's margin, because cost of goods is already inside the numerator. At 1.00× the gross profit exactly equals the ad spend, so the net profit after advertising is zero.
ROAS has no fixed break-even. Its numerator is revenue, which still includes the cost of the goods, so the ROAS a product needs depends on its margin. On gross margin alone, the ROAS at which POAS reaches 1.00× is 1 ÷ gross margin: 2.50× at 40%, 4.00× at 25%. The break-even ROAS page also takes off shipping, payment fees and returns, so its figure for the same product is higher.
One line for the whole catalogue
A catalogue with hundreds of different margins has hundreds of gross-margin break-even ROAS figures but only one break-even POAS. That is the practical reason to read POAS beside ROAS. A product below 1.00× is losing money on its advertised sales whatever its ROAS looks like, and there is no per-product target to look up.
Worked example: the same ROAS, opposite results
The two products below have the same revenue, the same ad spend and so the same ROAS. One makes money and the other loses it. The figures are an example and work in any currency.
Step 1: Product A: revenue 1,000, cost of goods 600, ad spend 300
ROAS = 1,000 ÷ 300 = 3.33×. Gross profit = 1,000 − 600 = 400. POAS = 400 ÷ 300 = 1.33×. Net profit after advertising = 400 − 300 = 100, which is 300 × (1.333… − 1). The gross margin is 40%, so POAS reaches 1.00× at a ROAS of 2.50×, and 3.33× clears it.
Step 2: Product B: revenue 1,000, cost of goods 750, ad spend 300
ROAS is still 3.33×. Gross profit = 1,000 − 750 = 250. POAS = 250 ÷ 300 = 0.83×. Net profit after advertising = 250 − 300 = −50. The gross margin is 25%, so POAS reaches 1.00× only at a ROAS of 4.00×, and 3.33× falls short.
Added together, as they would be in one campaign, the two products show a ROAS of 3.33× and a POAS of 1.08× (650 of gross profit on 600 of spend). The total is profitable, and you cannot see Product B's loss of 50 until you measure each product on its own.
POAS vs ROAS
ROAS tells you how the advert performed on revenue. POAS tells you whether the sale was worth making. They answer different questions, so read them together.
Numerator
ROAS uses revenue. POAS uses revenue minus cost of goods, which is gross profit.
What it answers
ROAS: how much revenue each unit of ad spend brought in. POAS: once the goods were paid for, did the advertising pay for itself?
Break-even
ROAS: POAS reaches 1.00× at a ROAS of 1 ÷ gross margin, which changes with each product's margin (2.50× at 40%, 4.00× at 25%). POAS: 1.00× for every product.
Where it is shown
ROAS: in Google Ads as conversion value per cost (Conv. value / cost). POAS: calculated from gross profit. Opteno shows it on every product row, alongside ROAS and net profit.
What it needs
ROAS: revenue and ad spend. POAS: the cost of the goods sold as well. Without it you have revenue but no gross profit.
What counts as revenue and cost of goods in Opteno
By default, POAS in Opteno is (revenue after refunds − cost of goods) ÷ ad spend, and it breaks even at 1.00×. A store can switch to a True Profit setting, which also subtracts ad spend and breaks even at 0, and can choose to leave refunds out. It is worked out for each product. When costs are tracked per variant and a sold variant has no cost-per-item, or a day with ad activity has no usable exchange rate, Opteno shows it as unavailable and names the reason.
- Revenue = the product's gross sales − refunds from all its Shopify orders in the window, not only the orders Google credits to an ad
- Cost of goods = each variant's cost-per-item × the units sold, added up, or a store-wide percentage if you set one. Cost-of-goods tracking is off by default in the store settings, and while it is off cost of goods counts as zero
- Ad spend = Google Ads spend per product offer. Each day's spend is converted at that day's rate, then the days are added up
- Break-even = 1.00× in the default POAS setting. Sort the POAS column, or set a minimum or maximum on it in the filters, to find the products below it
- Windows = rolling 7, 14, 30 and 60 days ending yesterday, with variant, country and market breakdowns
POAS cannot be calculated when a product had no ad spend in the window, because there is nothing to divide by. The honest answer is 'not computable', not zero.
In the default setting, a product that had ad spend and zero gross profit shows 0.00×, a real figure far below break-even, not a gap.
Opteno's formula subtracts refunds and cost of goods and nothing else. You can include shipping and packaging you pay for in each variant's cost-per-item. Payment fees are not in the formula, and neither is VAT if your prices include it, so a product just above 1.00× may still lose money once they are paid.
Other definitions you will meet
The three definitions below all divide a profit figure by ad spend, but they differ on which costs that profit has already paid for, and one writes the result as a percentage. Only compare two POAS figures when you know what each numerator includes.
ProfitMetrics defines POAS as the gross profit of your ads after all your variable order costs, divided by ad spend, and says break-even is always 1. (ProfitMetrics says it holds a registered trademark on POAS®.) AdLibrary's explainer subtracts returns, payment processing, platform fees and fulfilment as well as cost of goods. ClickGuard's glossary subtracts cost of goods only and multiplies the ratio by 100 to give a percentage.
The more costs a definition subtracts, the lower the POAS for the same sales, and the closer 1.00× gets to your true break-even. For any definition written as a ratio that breaks even at 1, ad spend × (POAS − 1) is what remains after the costs that definition subtracts and the ad spend itself. Once you know which costs another tool has already subtracted, you can compare its figure with this one.
POAS and Google Ads
Google Ads reports ROAS as conversion value per cost. Its route to profit is conversions with cart data, which report gross profit for supported campaigns once you supply cost of goods sold.
Google's cart-data reporting combines the items in each purchase with the cost of goods sold (COGS) in your Merchant Center feed. It reports revenue, gross profit, orders and average cart size. The item IDs passed in your conversion tag must exactly match the id attribute in the feed, and Google processes only items from a Merchant Center account linked to the Google Ads account. Divide that gross profit by cost and you have POAS for the campaigns it covers.
Opteno takes a different route. It reads Shopify orders, refunds and cost-per-item, plus Google Ads spend per product offer, through each provider's own sign-in. There is no script or pixel on the storefront. It then works out POAS from those figures. Because Opteno counts all of a product's orders and Google's cart data counts only ad-attributed ones, the two POAS figures will differ.
Questions about POAS
What is a good POAS?
Anything above 1.00× means the advertising paid for itself after cost of goods. Below 1.00×, the advertised sales lost money. How far above 1.00× you need to be depends on the costs your numerator leaves out, such as fees and overheads, and on the profit you want to keep. Each 0.10 above 1.00× keeps 10% of the ad spend as profit: as an example, 1.25× on 1,000 of spend leaves 250 after goods and advertising.
What is the difference between POAS and ROAS?
ROAS divides revenue by ad spend. POAS divides revenue minus cost of goods by the same spend. On gross margin, POAS reaches 1.00× at a ROAS of 1 ÷ gross margin, which changes with each product's margin, while POAS breaks even at 1.00× for every product. The two are linked: POAS = ROAS × gross margin.
Does Google Ads show POAS?
Google Ads shows ROAS as conversion value per cost. It can report gross profit if you use conversions with cart data and provide cost of goods sold in your Merchant Center feed. Dividing that gross profit by cost gives POAS for the campaigns it covers. Opteno works out POAS from Shopify orders and costs instead.
POAS or ROAS: which should drive decisions?
Judge products on POAS, because it has a fixed break-even: a product below 1.00× is losing money whatever its ROAS. Google's Target ROAS bidding aims for a ratio of conversion value to ad spend. If you bid on ROAS, put products with similar margins in their own campaigns so that each target can come from its margin band (on gross margin, POAS reaches 1.00× at a ROAS of 1 ÷ gross margin), rather than one target for the whole account. Then check each product against POAS.
When can POAS not be calculated?
When there was no ad spend in the period, because there is nothing to divide by. The answer is 'not computable', not zero. POAS also needs a cost for the goods sold. When Opteno tracks cost per variant and a sold variant has no cost-per-item, it shows POAS as unavailable and names the reason. If cost-of-goods tracking is off in the store settings, which is the default, cost of goods counts as zero until you switch it on.
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.