ROAS looks good, but profit is negative
Community signal
A campaign can show a healthy ROAS while the order still loses money once COGS, shipping, fees and discounts are counted.
In real life: Meta reports 4x ROAS, but the product is heavy, shipping is under-recovered and the margin is thin, so the net order is a loss.
Shopify / DTCAgency
Data you need
- requiredAd spend by campaign or SKU. Attributed spend, not just account total.
- requiredCOGS. To know real margin per order.
- requiredShipping and fees. Often the gap between ROAS and POAS.
Formula
POAS (Profit on Ad Spend)
(Revenue - COGS - Shipping - Fees - Discounts) / Ad SpendROAS uses revenue; POAS uses profit. Only POAS tells you if the ad made money.
Key insight
- ROAS above 3 can still be a loss when the denominator ignores costs.
- One SKU often carries most of the spend but the least margin.
Action checklist
- 1Switch the scoreboard from ROAS to POAS · medium · 1 hour
Judge campaigns by profit per ad dollar. - 2Pull the highest-spend SKU in the campaign · easy · 15 min
Check its margin alone. - 3Recover shipping or raise price on thin SKUs · medium · 1 day
Close the gap before scaling spend. - 4Pause campaigns with POAS under 1 · easy · 30 min
Below 1 means the ad loses money after costs.
Money impact · Cut a loss
Stops spend that converts but loses money after the full cost stack.
Loss avoided = Ad Spend x (1 - POAS) on campaigns with POAS < 1POAS needs real ad-spend data. With no ad data, Okiela shows AOV instead of a fabricated POAS.
Common mistakes
- Scaling a campaign on ROAS without checking margin.
- Blending all SKUs into one campaign average.
How Okiela helps
POAS in the 5D waterfalllive
Okiela places ad spend as the final deduction so you see profit before and after ads.
Trust & sources
- Community signalPOAS vs ROAS is a documented DTC operator gap
Last reviewed 2026-06-22 · Confidence 4/5