ROAS is the metric every PMax dashboard puts at the top, and the one every retail conversation starts with. It's also incomplete. A 3.0 ROAS can describe a healthy retail business or one that's quietly losing money on every transaction, and the metric itself can't tell you which.
What ROAS Actually Measures (and Doesn't)
ROAS is revenue divided by ad spend. If you spend €100 on ads and generate €300 in revenue, your ROAS is 3.0. The calculation is mechanical and the inputs are easy to find in Google Ads.
What ROAS does not include: what you paid for the inventory, the cost to manufacture or source the item, shipping to the customer, returns processing, credit card fees, marketplace fees, or anything else that happens between the sale and the bottom line.
A product with a 3.0 ROAS could be running on a 5% margin or a 45% margin. The dashboard treats both as identical performance. They are not.
Imagine a fashion retailer with two products. The first is a pair of jeans at €80: source cost €15, customer shipping €8, and a 35% return rate that eats into what actually sticks. Net out the cost of goods, the shipping subsidy, and the returns, and roughly 35% of the €80 ends up as profit.
The second is a t-shirt at €30: source cost €4, shipping €3, and an 8% return rate. Most of the revenue stays, and roughly 70% of the €30 ends up as profit.
But the jeans run a 3.0 ROAS and the t-shirt only 2.5. On the dashboard the jeans look like the stronger product, so PMax sends more budget their way. ROAS is doing exactly what it was built to do, and it is pointing at the wrong product, because it can't see that the t-shirt keeps twice the share of every euro it earns.
POAS: The Step Up From ROAS
POAS, or Profit on Ad Spend, is the correction. Instead of revenue, it uses profit:
POAS = Profit ÷ Ad Spend
The cleanest way to see it is that POAS is just ROAS multiplied by your margin: revenue per ad euro, times the share of that revenue you actually keep. Run the two products through it:
- Jeans: 3.0 ROAS × 35% margin = 1.05 POAS. Just over a euro of profit for every euro of ad spend.
- T-shirt: 2.5 ROAS × 70% margin = 1.75 POAS. Two-thirds more profit per euro of ad spend, on the lower ROAS.
The t-shirt's lower ROAS was never the real story. Its margin is twice the jeans', and on the number that pays your bills it wins comfortably. POAS surfaces that. ROAS hides it.
If you can move your bidding strategy from ROAS to POAS, you typically pick up a meaningful profit lift. Several profit-based bidding tools exist and they work better than ROAS-only optimization, because the bidding algorithm finally has the right number to optimize against.
That is a real improvement. It is also where most of the category stops.
Where Single-Dimension POAS Stops
Margin is one signal. Retail decisions are not.
Take the same two products. POAS has done its job and shifted budget toward the t-shirt, because it keeps more of every euro than the jeans do. Then January starts and three things change at once.
Stock cover on the t-shirts drops to under a week because last month's promotion sold through. Replenishment lead time is six weeks. Pushing more spend at them now will burn ad budget on impressions for a product that goes out of stock by mid-month.
The jeans are sitting on 90 days of supply because winter weather hurt sell-through. The buying team needs to move them before spring stock arrives in March.
You are also planning a new outerwear launch for early February and want to build acquisition into that category in January.
POAS can't see any of this. It is still optimizing on month-over-month margin, with no awareness of stock cover, no awareness of return rate variance over time, no awareness of your strategic calendar, and no awareness of which products you want to push for reasons that don't show up in last quarter's data.
The same gap appears in every retail account once you look. Pure margin optimization assumes inventory is stable, return rates are consistent, customer lifetime value is predictable, and seasonality is something you handle through bid adjustments rather than strategy. None of those assumptions hold.
Multi-Dimensional Prioritization
The argument is straightforward. Retail profitability is decided by margin, inventory, returns, and strategy together. Any approach that uses one of those four and ignores the other three leaves money on the table.
A product can have a 40% margin and a terrible inventory position. It can have a 20% margin and be a strategic priority for Q4 customer acquisition. It can have a 35% margin and a 50% return rate that destroys its real profitability. A bidding strategy that only sees margin will misallocate budget for the first two and overspend on the third.
What works in practice is a priority signal that takes all four dimensions and converts them into one decision per product per day. Margin is the largest weight in most retail models, but it is never the only weight, and the relative weights shift by category and season.
This is the architecture behind Reima's North American results. They had already invested in PMax and the campaigns were running cleanly. The platform was favoring rain gear that had historical traction and quietly underweighting strategic products: shoes, discounted lines, popular size variants in core ranges. Once margin and the other dimensions were wired into the priority signal, net profit lifted 32%, POAS lifted 32%, and revenue lifted 91% inside three weeks. (Full case study)
The numbers matter less than the mechanism. The algorithm did not change. The signal it was given did.
Building Margin Rules in Practice
Margin-aware prioritization starts with three pieces of data per SKU:
- Cost of goods sold (what you paid for the item)
- Gross margin (selling price minus COGS, optionally net of shipping and return processing for categories where those costs are non-trivial)
- A margin tier that converts the margin number into one of three priority labels
A reasonable starting tier for a fashion retailer could look like this:
| Margin Tier | Margin Range |
|---|---|
| High | Above 40% |
| Standard | 25–40% |
| Low | Below 25% |
The thresholds shift by category. An electronics retailer running on 18% blended margin would set High above 20%, Standard at 12–20%, Low below 12%. Furniture would run higher because the working margins are wider. The point of the tiers is to give the algorithm a coarse signal it can act on every day, not to model your P&L precisely.
Under the hood, each tier maps to one of your Google Merchant Center custom label fields, which PMax reads when it pulls your feed. That mapping is the part you don't need to think about. You decide what counts as High, Standard, and Low for your business, and the technical wiring sits behind the scenes.
That much is straightforward to set up. The work that matters is the layer on top.
A margin-only rule treats all 40%+ margin products as equivalent. That is wrong as soon as inventory pressure or strategic priorities enter the picture. The rule that actually performs in production looks more like this in plain language:
- If margin is above 40% and stock cover is between 14 and 90 days, set High priority.
- If margin is above 40% but stock cover is under 14 days, set Low priority. Replenishment can't keep up.
- If margin is 25–40% and the product is part of a defined Q4 acquisition push, set High priority.
- If margin is 25–40% and stock cover exceeds 120 days, set High priority. Clearance overrides margin.
- If margin is below 25% and there is no strategic flag, set Low priority by default.
These rules are not exotic. Every retail buyer knows the logic. The work is wiring it into a system that updates labels daily and survives feed changes, seasonal shifts, and inventory swings without manual maintenance.
You connect your product feed, cost data, and inventory feed. You define the priority rules in plain business language. Expanly writes priority labels to your Google Merchant Center feed every day. Setup is usually a single afternoon for a catalog of a few thousand SKUs, and the rules adjust automatically as your data changes.
The result is not a different algorithm. It is the same PMax, with the right signal.