- POAS (profit on ad spend) is the gross profit from ad-driven orders divided by the ad spend that brought them in.
- Break-even POAS is always 1.0: above it the ads make money on those orders, below it they lose money.
- POAS equals ROAS times your gross margin rate, so a ROAS of 3.0 at a 52% margin is a POAS of 1.56.
- Profit after ads is ad spend × (POAS − 1): $2,000 of spend at a POAS of 1.56 leaves $1,120.
- Two campaigns with the same ROAS can have very different POAS when they sell products with different margins.
POAS stands for profit on ad spend. It is the gross profit your ads bring in for every dollar you spend on them: gross profit from ad-driven orders divided by the ad spend. A POAS of 1.0 is break-even, and anything above 1.0 means the ads made money.
ROAS counts revenue. POAS counts what is left of that revenue after you pay for the products, the shipping, the payment fees and the handling. This guide shows the formula, a worked example, how POAS relates to ROAS, which costs to include and how to measure POAS per campaign.
The POAS formula
POAS divides the gross profit of the orders your ads brought in by the ad spend that produced them:
- Gross profit
- Revenue (without VAT or sales tax, minus refunds) minus product cost (COGS), shipping you pay, payment fees and handling.
- Ad spend
- What you paid the ad platform for the campaign, ad set or ad you are measuring, in the same period.
$3,120 of gross profit from $2,000 of ad spend: 3,120 ÷ 2,000 = 1.56. Each $1 of ad spend brought back $1.56 of gross profit.
Ad spend is not part of gross profit. It is the bottom of the fraction, so subtracting it from the top as well would count it twice. Fixed costs such as salaries, rent and software also stay out, because they do not grow with each extra order.
A worked example: one week of Meta ads
A store spends $2,000 on Meta ads in one week. The ads bring in 80 orders with an average order value of $75, so revenue is $6,000. The ROAS is $6,000 ÷ $2,000 = 3.0.
Now the costs. Products cost 35% of the selling price. Shipping costs the store $6 per order. Payment fees are about 3% of revenue. Packing costs $1.50 per order.
| Line | Calculation | Amount |
|---|---|---|
| Revenue (without VAT) | 80 orders × $75 | $6,000 |
| Product cost (COGS) | 35% × $6,000 | −$2,100 |
| Shipping paid to the carrier | 80 × $6 | −$480 |
| Payment fees | 3% × $6,000 | −$180 |
| Packing and handling | 80 × $1.50 | −$120 |
| Gross profit | $6,000 − $2,880 | $3,120 |
| Ad spend | Meta, one week | $2,000 |
| POAS | $3,120 ÷ $2,000 | 1.56 |
| Profit after ads | $3,120 − $2,000 | $1,120 |
A ROAS of 3.0 sounds strong, but it does not say whether the store made money. The POAS of 1.56 does: each dollar of ad spend brought back $1.56 of gross profit. After the ads paid for themselves, every ad dollar left 56 cents.
POAS vs ROAS: what is the difference?
ROAS divides revenue by ad spend. POAS divides gross profit by ad spend. When the gross margin rate is measured on the same revenue, one formula links the two:
- Gross margin rate
- Gross profit ÷ revenue. In the example: $3,120 ÷ $6,000 = 52%.
3.0 × 0.52 = 1.56, the same POAS as in the table.
This link shows why ROAS alone can mislead. Here are two products, each sold at a ROAS of 3.0 for every $1,000 of ad spend:
An ad platform that bids on revenue treats both products the same, because both bring in $3,000 per $1,000 of spend. On your bank statement, one adds $800 and the other costs you $250. POAS shows the difference directly, without a separate margin table for every product.
Why break-even POAS is 1.0
A POAS of 1.0 means the gross profit from the orders exactly covers the ad spend. Profit after ads is zero. Above 1.0, the orders made money after paying for the ads. Below 1.0, they did not. You can turn any POAS into a profit figure:
$2,000 × (1.56 − 1) = $1,120. At a POAS of 0.8, the same spend would lose $400.
Break-even POAS also gives you break-even ROAS. POAS reaches 1.0 when ROAS equals 1 ÷ gross margin rate. With a 52% margin, that is 1 ÷ 0.52 = 1.92. The break-even ROAS guide works through this per product line and shows how to set a target ROAS.
A POAS below 1.0 is not always a mistake. A campaign that brings in new customers who order again can lose money on the first order and still pay off over the following months. Judge such campaigns on first-order POAS together with the repeat orders of the customers they brought in, which is what customer lifetime value tracks.
What is a good POAS?
Above 1.0, every campaign adds profit before fixed costs. How much higher you need to be depends on what the profit after ads has to pay for. Salaries, software and rent come out of it.
A simple check: if ad-driven orders must cover $12,000 of fixed costs a month and you spend $20,000 a month on ads, profit after ads must be at least $12,000. Then $20,000 × (POAS − 1) ≥ $12,000, so you need a POAS of at least 1.6. Orders from email, organic search and repeat customers also cover part of the fixed costs, so the real need is usually lower.
- Stores with many repeat buyers can accept a first-order POAS close to 1.0, because the second and third orders come at little or no ad cost.
- Stores whose customers rarely come back need a higher first-order POAS, because the first order has to pay for everything.
- Retargeting campaigns often show a high POAS because they reach people who were already about to buy. Compare them with prospecting campaigns with that in mind.
Which costs go into gross profit?
POAS is only as good as the gross profit behind it. These are the costs to subtract from revenue, order by order.
Product cost (COGS)
What you paid for the products in the order. On Shopify this is the cost per item on each variant. When supplier prices change, keep the old cost for old orders. Otherwise last year's margins change every time you update a price.
Shipping
Use what you pay the carrier, not what the customer paid. Shipping the customer pays is part of revenue. Orders with free shipping still have a shipping cost.
Payment fees
Card processors usually charge a percentage of the order plus a fixed fee per transaction. On small orders, the fixed part can take a large share of the margin.
Handling and other per-order costs
Packaging, pick-and-pack fees from a warehouse, and affiliate or influencer commissions tied to an order all belong here.
Refunds and taxes
Subtract refunded revenue. If returned items go back into stock, their product cost comes back too. VAT and sales tax you collect go to the government, so they are not part of revenue or gross profit.
| Step | What you subtract | Result |
|---|---|---|
| 1 | From order totals: refunds, VAT and sales tax | Revenue |
| 2 | COGS, shipping you pay, payment fees, handling | Gross profit (the top of POAS) |
| 3 | Ad spend | Profit after ads |
| 4 | Fixed costs: salaries, rent, software | Net profit |
How to measure POAS per campaign
To calculate POAS for a campaign you need three things: the orders the campaign brought in, the gross profit of each of those orders, and the campaign's spend. The first one is the hard part. Ad platforms report the revenue they credit to themselves. That number can include view-through purchases and orders another channel also claims, so the same order can count in two places.
- Attribute orders with your own tracking
Credit each order to a campaign with one attribution model for all channels, based on the ad clicks your store recorded.
- Calculate gross profit per order
Use the real product cost, shipping, payment fee and handling of each order, minus refunds and tax.
- Add up per campaign
Sum the gross profit of the orders credited to each campaign, and divide by the spend of that campaign in the same period.
- Compare every campaign with 1.0
Under 1.0 needs fixing or a reason, such as new customers who order again. Above 1.0 can get more budget.
ROASaurus does this in its profit analytics. It syncs product costs from Shopify's cost per item and applies your shipping, payment fee and handling rules to every order. The Marketing page then shows three columns per channel and campaign, under the attribution model you choose: Contribution is the gross profit of the credited orders, without tax. Profit is contribution minus ad spend, and POAS is contribution divided by ad spend.
The POAS tile on the profit dashboard does the same for the whole store. By default, its revenue and gross profit include the taxes you collect. To match this guide, set Taxes collected to Left out of revenue under Profit › Cost settings. Spend syncs automatically from the ad accounts you connect. For other channels, add it under Profit › Manual ad spend. To try the math on your own numbers first, use the free POAS calculator.
Can ad platforms bid on POAS?
Value-based bidding optimizes for the value you send with each conversion. With a standard Purchase event, that value is revenue. The platform then cannot tell a $100 order with a 60% margin from a $100 order with a 20% margin. If you send the order's gross profit as the value instead, the campaign optimizes for orders that leave more profit. Google Ads also allows conversion values that stand for profit margin instead of revenue.
In ROASaurus you can tick POAS bidding on the Meta pixel. ROASaurus then sends a ContributionMargin custom event with each purchase, next to the normal Purchase event. The event name says contribution margin, but its value is the order's gross profit as defined in this post: revenue minus refunds, COGS, handling, shipping, payment fees and tax. Orders that lose money send 0. In Ads Manager, you choose the event as the conversion goal for the campaigns that should bid on profit.
- Get your costs right first. If COGS is missing for some products, their margin looks too high and the campaign will push them.
- Test on one campaign. A new conversion event sends an ad set back into the learning phase, and it needs enough of those events each week to leave it.
- Keep the Purchase event. Your reporting and your other campaigns still use it.
Our guide to profit optimization on Meta covers the setup step by step, and the Meta integration page lists every event ROASaurus sends.
Sources
- Shopify Help Center: Profit reports
- Google Ads Help: About conversion values
- Meta for Developers: Conversions API, Standard Parameters