Profit on ad spend: bidding to margin, not revenue.
Two orders of the same value are not worth the same. Until your bidding knows that, it will keep buying turnover and calling it growth.
Here is a question most ecommerce dashboards cannot answer: which of your campaigns made money last month. Not which reported the best ROAS — which actually generated profit after the cost of goods. For most accounts these are different lists, and the difference is where growth quietly goes wrong.
A 4x ROAS sounds excellent. On a product with 15% gross margin, it is a loss once you account for the ad cost. A 2.5x ROAS sounds mediocre. On a 70% margin product, it is a profit engine. Revenue-based ROAS treats these two as the wrong way around, and Smart Bidding, optimizing on revenue values, obediently follows. The algorithm scales the impressive-looking loser and constrains the boring winner. This is not a bidding flaw. It is a values flaw. The machine optimizes exactly what you feed it.
The mental model: POAS
Profit on ad spend is the same arithmetic as ROAS with one substitution: margin instead of revenue in the numerator. Gross profit generated per unit of ad spend. It is a small change to a formula and a large change to behavior, because it re-ranks everything. Campaigns, products, audiences, and channels all reorder when judged on what they contribute rather than what they turn over. The first time a team sees its account ranked by POAS, at least one flagship campaign usually drops from hero to passenger.
You do not need perfect unit economics to start. Even margin bands — high, mid, low — applied to your catalogue will re-rank your campaigns more truthfully than exact revenue ever will.
Teach the machine: margin-aware conversion values
The mechanical fix is to change what a conversion is worth. Instead of sending the platform the order revenue, send a value that reflects margin — either true per-product profit if your data supports it, or a margin-weighted revenue figure if it does not. Target ROAS then becomes, in effect, target POAS without the platform needing to know the difference. The algorithm starts chasing the baskets that matter.
- Best: pass per-order gross profit as the conversion value, computed from product-level cost data
- Good: weight revenue by category-level margin bands where per-SKU cost data is not available
- Minimum: exclude or down-weight the pathological cases — heavy discounting, high-return categories, loss-leader SKUs
- Always: document what the value means, so nobody reads a profit-based number as revenue
Structure follows margin
Values are half the answer; structure is the other half. When high-margin and low-margin products share a campaign, they share a target, and the blended average mis-serves both. Segmenting structure by margin tier — the custom-label work we covered in the Shopping feed essay — lets each tier carry a target its economics can support. High-margin lines get room to be aggressive. Thin-margin lines get held to the efficiency they require to exist. Returns deserve the same honesty: a product line with a 30% return rate has a very different true margin than its spreadsheet suggests, and its bidding should know that too.
What changes when you make the switch
Expect reported ROAS to look worse on the campaigns that were flattered by the old math, and expect that to be uncomfortable in the first month. Expect a shift of budget toward products nobody was excited about, because they quietly earn. And expect the conversation with finance to get easier, because for the first time the ad platform and the P&L are speaking the same language. Revenue is what the dashboard celebrates. Margin is what the business keeps. Bid to what the business keeps.
Written by The ADSRUNNER team. If this resonated and you want to apply it to your own account, you can book a strategy call or run a free audit.