Fundusze Europejskie Województwo Łódzkie Unia Europejska
Measurement

What is POAS, and how it differs from ROAS

In short

ROAS divides revenue by ad spend. POAS divides gross profit by ad spend, so it tells you whether a campaign made money rather than whether it made revenue. On a 25% margin, a 4.0 ROAS is a 1.0 POAS — exactly break-even.

What is POAS?

POAS — profit on ad spend
Gross profit generated by a campaign divided by what the campaign cost. POAS = gross profit ÷ ad spend. A POAS of 1.0 is break-even on the campaign: the profit it produced exactly equals what was paid for it.
ROAS — return on ad spend
ROAS = revenue ÷ ad spend. Reported natively by every ad platform, because revenue is the only number the platform can see. It says nothing about whether the revenue was profitable.

The distinction only matters because margin is not constant across a catalogue. If every product you sold carried an identical margin, ROAS and POAS would be the same number scaled by a constant, and ranking campaigns by either would give the same order. That is almost never true. A store selling both a 62% margin own-brand line and a 9% margin resale line has two businesses inside one ad account, and ROAS averages them into a figure that describes neither.

The arithmetic, on one catalogue

Take three campaigns on the same account, same month, same spend. ROAS ranks them one way. Margin reorders them completely.

CampaignSpendRevenueROASGross marginGross profitPOAS
A — resale electronics10,00048,0004.89%4,3200.43
B — mixed catalogue10,00032,0003.234%10,8801.09
C — own brand10,00021,0002.162%13,0201.30

The same three campaigns, ranked by profit instead of revenue

The same three campaigns, ranked by profit instead of revenueBar chart of profit on ad spend for campaigns A, B and C, showing campaign A below the break-even line at 1.0 while B and C sit above it.00.511.520.43A — resaleelectronics1.09B — mixed catalogue1.30C — own brandbreak-even
Every number here is the POAS column of the table above. Campaign A has the best ROAS in the account and is the only one losing money.

By ROAS the ranking is A, B, C, and A looks like the campaign to scale. By POAS the ranking is exactly inverted. Campaign A returns 43 groszy of profit for every złoty spent — it is losing money at speed, and the faster it scales the faster it loses. Campaign C, the one a ROAS-led review would have cut first, is the only one comfortably above water.

This is not a corner case. Any store carrying both resale and own-brand lines has this shape. The wider the margin spread across the catalogue, the more violently ROAS and POAS disagree — and the spread is usually widest exactly where the volume is.

What ROAS do I need to break even?

Rearranging POAS = 1.0 gives the break-even ROAS for any margin: break-even ROAS = 1 ÷ gross margin. This is the single most useful line in the article, because it converts a margin you already know into a threshold you can put straight into a rule.

Gross marginBreak-even ROASA 4.0 ROAS is…
10%10.0a heavy loss
20%5.0a loss
25%4.0exactly break-even
40%2.5profitable
60%1.67comfortably profitable

The row that catches people is the third. A 4.0 ROAS is the number most agencies report as a good month, and on a 25% margin it produced exactly zero profit.

Where the margin number actually comes from

POAS is only as honest as its margin input, and this is where most implementations quietly break. Three ways to source it, in ascending order of truth:

  • Catalogue margin from the price list. Cheap, and wrong on any store with real discounting. It ignores every code redeemed, every return, and every shipping subsidy, so it flatters every campaign uniformly — which means it also fails to reorder them, defeating the point.
  • Settled margin per order line. Revenue after refunds and discounts, minus cost of goods, at the line level. This is the number worth having. It needs cost of goods in the store, which is the part most catalogues are missing.
  • Contribution margin. Settled margin minus the variable costs that scale with an order — payment fees, pick and pack, outbound shipping, expected returns handling. Harder, and the only version that answers "should I spend more" rather than "did this wash its face".

If cost of goods is not in your store today, start with a per-category margin estimate rather than waiting. A campaign-level POAS built on category averages is still far closer to the truth than a ROAS built on nothing, and it makes the missing data visible.

What changes in budget allocation

Three concrete shifts, in the order they usually show up:

  1. The best campaign changes. As above — often the reverse of what ROAS said. Expect to defend this to whoever has been reporting ROAS.
  2. The floor moves per campaign, not per account. One account-wide target ROAS is incoherent once margins differ; each campaign gets its own threshold from 1 ÷ margin.
  3. Scaling decisions invert on the margin tail. High-ROAS, low-margin campaigns are the ones that look safest to scale and are the most expensive mistake available, because the loss compounds with the budget.

The reason this is worth the effort is that none of it is visible from inside the ad platform. The platform knows revenue because the pixel reports it; it does not know cost of goods, refunds, or which SKU the order contained. Margin has to come from the store, which means the join has to happen somewhere that can see both.

How to calculate POAS on your own data

Minimum viable version, no tooling required, roughly an afternoon:

  1. Pull spend per campaign for a closed month. Use a closed month — attribution windows are still moving inside the last seven days.
  2. Pull orders for the same month with their line items, discounts and refunds.
  3. Attach cost of goods per line. Per-category averages are acceptable for the first pass; mark that they are estimates.
  4. Attribute orders to campaigns with whatever model you already use, and keep using the same one — POAS is a margin correction, not an attribution fix, and changing both at once makes the result unreadable.
  5. Sum gross profit per campaign, divide by spend, and sort ascending. The bottom of that list is the finding.

Two failure modes worth naming. Mixing attribution models between the spend pull and the order pull produces a POAS that is wrong in an unpredictable direction. And computing POAS on a window shorter than your purchase cycle charges the whole cost of acquisition against the first order only, which understates every campaign that acquires repeat buyers — the fix for which is measuring against the payback period instead.

Common questions

Is POAS better than ROAS?

POAS answers a question ROAS cannot: did this campaign make money. ROAS is still useful as a fast, comparable signal — every platform reports it natively and it needs no cost data. Use ROAS to compare campaigns against each other and POAS to decide whether to keep spending at all.

What is a good POAS?

A POAS of 1.0 means gross profit exactly equals ad spend — you broke even on the campaign before any fixed costs. Anything below 1.0 loses money on every order. Where the target sits above 1.0 depends on what else the profit has to cover, which is why the honest version of this question is answered on contribution margin rather than gross margin.

Does POAS account for returns and discounts?

Only if your margin input does. Gross margin taken from a price list overstates profit on any catalogue with meaningful returns, discount codes or shipping subsidy. Compute margin from settled order lines after refunds, not from the product's list price.

Can I calculate POAS per ad rather than per campaign?

Yes, and it is where the metric earns its keep — margin varies far more between products than between campaigns, so two ads at the same ROAS can sit on opposite sides of break-even if they sell different catalogue segments. It requires joining ad-level spend to order lines, which last-click platform reporting cannot do on its own.

KM

Karol Majewski

Founder, Loyalz · 12 years running paid acquisition at zest.agency

See it on your data

Loyalz joins ad spend to settled order lines, so POAS is a column rather than a spreadsheet you rebuild every month.

Book a demo