ROAS measures revenue returned per ad dollar. POAS measures gross profit returned per ad dollar. POAS equals gross profit divided by ad spend, where gross profit subtracts cost of goods, shipping and returns from revenue. Two campaigns with identical ROAS can have opposite POAS, which is why ROAS-led scaling quietly erodes margin.
Your ads look profitable. Your bank account disagrees. The platform reported a 3.0 return on ad spend last month and your contribution margin went backwards anyway. That gap is not bad luck. One metric counts the revenue that came back. The other counts what is left after the goods, the courier, the gateway and the refunds are paid for.
This is for the operator who owns a Shopify store after launch and signs the courier invoice. It is not for you if most of your orders come in by hand. On one store we run, 16 of 34 orders in a month were draft or manual and 3 were point of sale. A profit number built on ad spend would have described a minority of that business.
| Question | ROAS | POAS |
|---|---|---|
| What it divides | Attributed revenue by ad spend | Gross profit by ad spend |
| Break-even | Moves with your margin: at 55% cost of goods you need roughly 3.4 | Always 1 |
| Inputs it needs | Two, both already inside the ad platform | Six: the same two plus product cost, carrier shipping, payment fees and a returns rate |
| Who owns the data | The media buyer | Finance, operations and the media buyer together |
| Running cost | None beyond the ad account | One cost pass per variant, plus a monthly reconciliation against carrier and gateway invoices |
| What it hides | Everything below the revenue line | Everything below the gross profit line, including overhead and agency fees |
ROAS is a budget pacing number and it stops at the revenue line
Return on ad spend is attributed revenue divided by ad spend. A ROAS of 3.0 means the platform credits three dollars of revenue to every dollar you gave it. Nothing in that number knows what the goods cost, what the courier charged, what the gateway took or how many of those orders came back.
That is not a flaw if you use it for what it is good at. ROAS is the right instrument for pacing a budget inside a day. It also catches a creative that has stopped working, and compares two ad sets selling the same catalogue at the same margin. It is free, it updates hourly, and the media buyer already owns it.
It becomes dangerous the moment it is used to choose what to scale across products with different margins. Joining cost feeds to your order table is analytics and attribution work, not a dashboard setting.
POAS is gross profit divided by ad spend and break-even is always 1
POAS stands for profit on ad spend. ProfitMetrics, the tool that pushed the term into common use, defines it as gross profit divided by ad spend. Its gross profit is revenue minus discounts, cost of goods, shipping cost, payment cost, and packaging and handling. Break-even is always 1, whatever your margin is.
That single property is why the metric is worth the work. A break-even ROAS is a different number for every product, and nobody remembers it under pressure. A break-even POAS is 1 for the hoodie, the fragrance and the bundle. Anything under 1 spends a dollar to make less than a dollar.
Cost of goods sold, usually written COGS, is what you paid for the item you shipped, not what you listed it at. Gross profit is revenue minus those direct costs. Contribution margin is what survives after every cost that moves with the order, which is the number you should pace spend against.
Here is what that looks like on two campaigns that a ROAS report treats as identical twins. Both spend 10,000 and return 30,000 in attributed revenue. One sells a 55% cost of goods bestseller, the other a 30% cost of goods accessory.
| Line | Campaign A, 55% cost of goods | Campaign B, 30% cost of goods |
|---|---|---|
| Ad spend | 10,000 | 10,000 |
| Attributed revenue | 30,000 | 30,000 |
| ROAS | 3.0 | 3.0 |
| Cost of goods | 16,500 | 9,000 |
| Carrier shipping at 9% | 2,700 | 2,700 |
| Third-party gateway fee at 2% | 600 | 600 |
| Gross profit before returns | 10,200 | 17,700 |
| Returns at 19.3% | 1,969 | 3,416 |
| Gross profit after returns | 8,231 | 14,284 |
| POAS | 0.82 | 1.43 |
Campaign A is 1,769 short of break-even for the month. Campaign B clears it by 4,284. ROAS never flinches, because every figure that separates them sits below the revenue line. The return rate is the 19.3% of online sales the National Retail Federation and Happy Returns expected shoppers to send back in 2025, published on 15 October 2025. The gateway fee is Shopify’s published 2%.
Four cost inputs decide whether POAS is worth building
The formula is the easy part. Every input below lives outside the ad platform, and three of the four arrive late. Before you promise anyone a profit dashboard, price the work of keeping these four honest every month.
| Input | Where it lives in a Shopify store | What it costs to get right | What breaks if you skip it |
|---|---|---|---|
| Product cost | The Cost per item field on each variant | One pass per variant, then a rule for supplier price changes. Shopify reports profit only for variants that had a cost at the time of sale, so a late edit never restates old orders | POAS silently excludes every order sold before the cost existed |
| Shipping | The carrier invoice, not the shipping revenue collected at checkout | A monthly reconciliation of carrier charges back to order IDs, including surcharges and failed deliveries | Free shipping thresholds look free, because only the customer side is counted |
| Payment fees | The gateway statement. Shopify publishes a third-party payment provider fee of 2% on Basic, down to 0.2% on Plus, on top of the card rate | One fee rule per gateway and currency, refreshed when the plan changes | A 2% error on a 10% margin product is a fifth of the profit |
| Returns | Refunds and restocks that post weeks after the order | A reserve rate per category, restated monthly once the real refunds land | Any recent window reads optimistic by construction |
The Shopify limits are documented, not opinion. The Help Center states that profit is reported only for products and variants that had cost recorded at the time they were sold. The third-party gateway fees come from Shopify’s own pricing page, checked on 21 September 2026.
A break-even ROAS is a different number for every product. A break-even POAS is 1 for all of them.The rule this article is built on
What we check before writing a profit number, on a store we run
The money in this is not the dashboard. It is the spend you stop handing to campaigns that only look profitable. That is the job on Boop Body, a Pakistani activewear brand: Autonomous is a Shopify systems agency, and we run their store and the data behind it so the margin number they scale on is one they can defend. The Boop Body work is where this section comes from.
In September 2026 we ran read-only source checks before adding any margin line to their rolling report. Across 30 complete Karachi days to 9 September, Shopify held 34 non-test orders: 15 from the website, 16 draft or manual, 3 point of sale. Meta’s own account view for the same window showed 1,570 impressions, 57 link clicks and no attributed purchase at all. Platform ROAS read zero while the store shipped orders.
A profit metric layered on that feed would have inherited the zero and multiplied it by a margin. Two more findings made the case. First, 2,516 of 3,348 page rows in the customer data platform carried no source and no medium. Second, because most orders are cash on delivery, only 88% of placed order value had actually been received at the 10 September check. Profit booked on placement would have overstated cash by the rest.
The rule we wrote down that day is the one we still use: add margin and contribution only after product cost, shipping, returns and courier fee inputs exist. No invented profit.
The warning. POAS calculated on broken attribution is worse than ROAS, not better. It takes a revenue number you cannot trust and applies a margin to it, which makes a wrong answer look audited. Fix conversion delivery and order deduplication first, then layer the cost data on top.
POAS misleads in four places and one of them is Shopify’s own cost field
The metric is better. It is not honest by default.
Costs are frozen at the moment of sale. Shopify records profit only where a cost existed when the order was placed. Change a supplier price in March and every January order keeps the old margin. Your POAS history is a record of what you typed, not what you paid.
Gross profit is not profit. The numerator stops above overhead, salaries, agency fees, software and warehouse labour. A store can run at POAS 1.4 all quarter and still lose money at the company level. Decide once whether fixed costs sit in the model, write it down, then stop switching.
Recent windows flatter you. Refunds post weeks late, so last week’s POAS is always the optimistic version. Hold a reserve rate and restate it monthly.
It punishes acquisition that pays back later. POAS on a first order treats a customer who buys four times a year as one thin transaction. Run prospecting on the same break-even line as retargeting and you will switch off the campaigns that build the base.
None of this makes ROAS the better choice. It means POAS is a decision instrument with known blind spots, and you name them before you hand the number to someone who will act on it. Every campaign you cannot grade after cost is a campaign you fund on trust. The fastest money is usually in finding which of them is already losing, not in raising the budget on the rest.
Questions operators ask about ROAS and POAS
What is the difference between ROAS and POAS?
ROAS divides attributed revenue by ad spend. POAS divides gross profit by ad spend, after cost of goods, shipping, payment fees and returns come out of that revenue. ROAS tells you how much money came back. POAS tells you how much of it you kept.
What is the POAS formula?
POAS equals gross profit divided by ad spend. Worked through: spend 10,000 and take 30,000 in attributed revenue at a 55% cost of goods. Subtract 16,500 of goods, 2,700 of carrier shipping and 600 in gateway fees, which leaves 10,200. Take off 19.3% for returns and 8,231 survives. POAS is 0.82 while ROAS reads 3.0.
Is POAS better than ROAS for ecommerce?
For scaling decisions, yes, because break-even is always 1 whatever the product’s margin. For intraday pacing, no. ROAS is free, updates hourly and needs no cost feed. Most stores run both and let POAS settle the arguments about where money goes.
What is a good POAS?
Below 1 you lose money on the gross profit line. Above that the band is your own arithmetic, not a borrowed benchmark. Say overhead runs at 25% of revenue. Then 10,000 of spend returning 30,000 of revenue has to clear 7,500 of overhead on top of the spend itself. The target is a POAS of 1.75. Change the overhead assumption and the band moves with it.
What data do you need to track POAS?
Four feeds. Cost of goods per SKU recorded at the time of sale, carrier shipping per order, payment fees per gateway and currency, and a return rate per category. Shopify holds the first if the Cost per item field is filled. The other three arrive from invoices and refunds after the order, which is why POAS is a reconciliation job rather than a dashboard toggle.
If you want the wider picture of how these feeds get stitched together, and where they usually come apart, the walkthrough on spotting a Franken-stack covers the diagnosis.



