POAS vs ROAS: How to Bid Google Ads on Profit, Not Revenue in 2026
Your target ROAS sits at 400%, revenue is hitting plan, and gross profit has been flat for two quarters. That is not a reporting glitch. Smart Bidding optimises exactly the number you hand it, which is why a growing number of stores switch to POAS in Google Ads — bidding on profit instead of revenue. You handed it revenue, so it buys revenue — quietly underbidding the cheap high-margin items and pouring budget into the expensive ones that make you 4% per order.
This is a working guide to POAS bidding in Google Ads: how to calculate profit at order level, three ways to feed it into the account, how to convert your target so volume does not collapse on day one, and how to prove the change actually paid off. Concrete settings, concrete formulas, no theory for its own sake.
Why target ROAS steers budget the wrong way
Target ROAS is conversion value divided by cost. The operative word is value. In most stores, conversion value equals order total, sometimes net of tax and shipping. The algorithm has no idea what you paid for the goods, what shipping costs you, how many units come back, or what your call centre spends per order.
Take a catalogue with two product groups:
| Group | Average order | Margin | Profit per order | At 400% ROAS |
|---|---|---|---|---|
| Premium electronics | $700 | 7% | $49 | cost $175 → −$126 |
| Accessories | $40 | 55% | $22 | cost $10 → +$12 |
At a single 400% target, the first group loses money and the second makes it. To the algorithm both look identical — “on target”. Worse, premium generates more revenue per click, so Smart Bidding actively shifts budget toward it. You get revenue growth, impression share growth, and a profit decline. The figures above are illustrative, but the shape of the distortion in multi-category stores is exactly this.
A single ROAS target is only correct when margin is roughly uniform across the catalogue. Once the spread exceeds 10–15 percentage points, one target starts working against you.
The second distortion is returns. In parts of fashion, return rates reach 30–50% (a benchmark to sanity-check against your own data, not a constant). Google sees a placed order; you see a returned item and logistics paid twice. Until returns are reflected in conversion value, you are bidding on phantom revenue. The retroactive fix is covered in the guide to conversion adjustments in Google Ads.
What POAS is and how it is calculated
POAS (Profit on Ad Spend) is gross profit generated by advertising divided by ad spend.
POAS = Gross profit from orders / Ad spend
POAS = 1.0 means break-even: advertising ate the entire margin. POAS = 2.0 means every dollar spent returned two dollars of gross profit — one dollar of contribution before fixed costs. Unlike ROAS, POAS has a natural floor below which the activity is pointless, and that alone imposes discipline on planning.
Which profit figure to use
The most common implementation mistake is taking “profit” in the accounting sense and pushing it into the account. Don’t. What belongs in conversion value is gross profit per order — the part that genuinely varies with the sale:
- selling price excluding tax;
- minus cost of goods (COGS) at the time of the order;
- minus payment processing, typically 1.5–3%;
- minus shipping, if the store pays for it;
- minus expected returns — either as a category coefficient or as a later conversion adjustment;
- minus fulfilment cost (call centre, packing) where it is material and varies by category.
Do not subtract rent, salaries, SaaS subscriptions or the ad budget itself. Those are fixed costs. They do not change because you sold one more order, and they belong in the P&L, not in the bid.
Discounts and promo codes
When a promo code is applied, profit must be calculated from what was actually paid, not from list price. Otherwise you systematically overvalue discounted orders and teach the algorithm to chase them. The same applies to bundles and multipacks: profit follows the contents of the cart, not the “hero” product.
Three ways to send profit into Google Ads
Option 1. Replace conversion value with profit outright
The cleanest approach: the purchase event carries calculated gross profit instead of order total.
dataLayer.push({
event: 'purchase',
transaction_id: '10045',
value: 22.00, // gross profit, not order total
currency: 'USD',
order_revenue: 40.00 // keep revenue as a separate parameter for reporting
});
Profit is computed server-side at checkout, where the platform knows both selling price and cost per line item. If COGS does not live in the platform, load it from a reference table (Google Sheets, CSV, a database table) refreshed whenever purchasing prices change.
Upside: the account speaks profit natively, target ROAS becomes target POAS with no mental arithmetic, reports need no interpretation.
Downside: revenue disappears from the Google Ads UI (keep it in custom columns or GA4), campaigns need to relearn, and any error in the COGS table hits bids immediately.
Option 2. Two conversion actions: revenue and profit
Create “Purchase (revenue)” as a secondary action for reporting only, and “Purchase (profit)” as the primary action included in campaign goals and bidding. The split between primary and secondary actions is covered in detail in the piece on primary vs secondary conversions and lead quality.
This is the compromise I recommend for most stores at the start: you see both metrics side by side while the algorithm only counts profit. One critical detail — the secondary action must stay out of the campaign’s conversion goals, otherwise you get double counting and broken attribution, a scenario dissected in the guide to duplicate conversions and deduplication.
Option 3. Conversion value rules as a rough approximation
If engineering time is unavailable right now, you can move part of the way toward POAS with conversion value rules: reduce value for low-margin geographies and audiences, increase it for new customers whose lifetime value is higher.
Be honest about what this is: a workaround. Rules operate at segment level — device, location, audience — while margin lives at product level. No rule will separate premium electronics from accessories inside one campaign. Use rules as a one-to-two-month bridge while proper profit tracking is built, or as a layer on top of POAS — for example, +20% value for first-time buyers.
Implementation, step by step
- Build the COGS table. Minimum: SKU and cost. Better: SKU, cost, shipping cost, category return rate. Weekly refresh is enough for most niches; daily if purchase prices float with currency.
- Pick the calculation point. Ideally the backend at order confirmation, where cart, promo code and shipping method are all known. Front-end calculation in JavaScript works but exposes COGS in page source — unacceptable for many businesses.
- Pass profit into the tag. In GTM, set the Google Ads Conversion Tracking tag’s Conversion Value to your profit variable. If you run server-side tagging, calculate there: COGS never leaves your server and the event survives blockers.
- Turn on enhanced conversions. Once value drops to profit, every lost conversion hurts learning more than before because the data volume already shrank. Enhanced conversions recover part of that attribution.
- Handle returns. Weekly, export returned orders and send negative value adjustments keyed on GCLID or hashed email — the same mechanics as offline conversion import.
- Validate with a live test order. Place a real order with a promo code, then open Google Ads → Tools → Conversions → your action → recent conversions, and compare the recorded value with your spreadsheet. Cents of drift are fine; a multiple means a currency or tax error.
Converting the target: from tROAS to tPOAS
On switch day you will be tempted to leave the target number unchanged. Don’t. Conversion value drops several-fold while the target stays put, Smart Bidding slashes bids, and traffic collapses within 24 hours.
Convert using the campaign’s average margin over the past 30–60 days:
New tPOAS = Current tROAS × Average margin (as a decimal)
| Current tROAS | Average margin | Starting tPOAS | Meaning |
|---|---|---|---|
| 400% | 25% | 100% | break-even on gross profit |
| 600% | 25% | 150% | $1.50 profit per $1 spent |
| 800% | 30% | 240% | comfortable cushion |
| 300% | 40% | 120% | high-margin niche |
Start at the equivalent target, give campaigns two to three weeks to relearn, then move the target in steps no larger than 10–15%. Abrupt changes restart learning — the mechanics are covered in the article on the Smart Bidding learning period.
What breaks during the transition
Reported conversion value drops three to five times. Expected: $22 instead of $40 per order. The real risk is not the number but signal density. If a campaign generated fewer than 30 conversions a month, consolidate campaigns or pool data with portfolio bid strategies.
Historical reporting develops a step. Before date X the charts show revenue, after it profit. Annotate the switch date and run before/after comparisons in a separate sheet rather than in the account’s graph.
The product mix shifts. Three or four weeks in, some SKUs will have stopped receiving impressions almost entirely. That is POAS working. Check that none of them are loss-leaders that pull profitable baskets behind them; if they are, add a manual value bonus or split them into their own campaign with its own target.
Shopping and PMax need extra care. In product campaigns, margin is best expressed through labels on product groups — how to build them is covered in the guide to custom labels in Merchant Center. Segmenting by custom_label lets you set different targets for 8%-margin and 50%-margin groups inside one account.
Proving it worked
Month-over-month comparison will not settle this: seasonality, promotions and assortment all move at once. The correct test is an experiment.
- Create a campaign draft in Experiments and split traffic 50/50.
- Control: the existing tROAS campaign. Test: the same campaign on tPOAS.
- Hold budget and structure identical — only the strategy target and the value being sent change.
- Run at least four weeks and at least 100 conversions per arm.
- Judge on gross profit minus spend, not on ROAS or CPA.
If the test wins on absolute profit at comparable spend, roll it out. If it wins on profit but loses 30% of revenue, the decision becomes strategic: a company raising on growth metrics may not accept that trade. Splitting traffic correctly is covered in the piece on Google Ads experiments.
Rebuilding reporting around POAS in Google Ads
After the switch, the Google Ads interface shows profit where revenue used to be, which breaks every dashboard built on the old assumption. The minimum set of columns to rebuild:
| Column | What it shows | How to get it |
|---|---|---|
| Profit | value of the primary conversion | standard “Conv. value” column |
| Revenue | turnover for plan tracking | custom column on the secondary action |
| POAS | profit / spend | “Conv. value / cost” column |
| Contribution | profit minus spend | custom column: value − cost |
| Realised margin | profit / revenue | custom formula across both actions |
Contribution — profit minus spend — is the most underused of these. It shows how much money the campaign actually delivered to the business, and it is what budget reallocation should be based on. A campaign at POAS 3.0 contributing $4,000 a month beats one at POAS 6.0 contributing $800, even though the ratio flatters the second. Building these calculations is covered in the guide to custom columns and the report editor.
Set up an alert on margin drift as well: if realised margin for a campaign moves sharply within a week, it almost always means either a shift in which products are being served or an error in the COGS table. Checks like this sit naturally on Google Ads automated rules.
Five mistakes that kill the rollout
- Sending net profit instead of gross. Subtract rent and payroll from an order and half your catalogue goes to zero or negative value, at which point the algorithm stops treating those sales as conversions at all. Only costs that vary with the sale belong in the bid.
- Keeping the old ROAS target. The most common reason people conclude “POAS doesn’t work”: value dropped fourfold, the target stayed, traffic went to zero in 48 hours, the project was reverted.
- Flipping the whole account in one day. Without a control group you will never separate the effect of POAS from seasonality or competitor behaviour.
- Ignoring returns. In high-return categories, POAS without adjustments misleads just as much as ROAS did — only by a different amount.
- Leaving the COGS table unowned. Three months on, purchase prices have drifted and the algorithm is optimising to stale margins. It is a silent failure: nothing looks broken, the decisions are just wrong.
Who does not need POAS
- Single product or uniform margin. Target ROAS produces the same outcome at zero implementation cost.
- Lead generation with no immediate revenue. The problem there is lead qualification and value assignment, not order margin.
- Under 30 conversions a month. Build volume first, or you will train the algorithm on noise.
- Subscription businesses. The right metric is predicted cohort LTV; POAS on the first payment will chronically undervalue acquisition.
Implementation checklist
- COGS table built by SKU, with a named owner for updates.
- Gross profit formula agreed with finance.
- Profit passed into conversion value, ideally server-side.
- Enhanced conversions enabled, deduplication verified.
- Weekly return adjustments automated.
- Starting tPOAS computed as tROAS × margin.
- Switch date annotated in the account.
- 50/50 experiment running for at least four weeks.
- Acceptance metric is absolute gross profit, not ROAS.
POAS is not a new button in the interface. It is the decision to stop lying to yourself with a revenue metric. Operationally it demands the same things any serious paid-traffic programme demands: clean data, stable account access and discipline about changes. If the last two are shaky, look at how Google Ads agency accounts are structured and which PPC Rebels services cover the technical side, so a four-week experiment does not die halfway through over an access issue.
Two companion pieces sit directly next to this one: the Google CSS Shopping CPC advantage, which lowers the denominator of the POAS formula, and feed rules and supplemental feeds in Merchant Center, which raises the numerator through better-matched impressions.
FAQ: POAS bidding in Google Ads
What is the difference between POAS and ROAS in one sentence?
ROAS tells you how much revenue a dollar of advertising returned; POAS tells you how much gross profit. Revenue can climb while profit falls, and POAS closes that gap.
What counts as a good POAS?
POAS = 1.0 is break-even on gross profit — everything earned went back into ads. A working reference range for e-commerce is 1.5–2.5, depending on your fixed-cost base. There is no universal “good” number; it follows from your cost structure.
Do I need a different bid strategy for POAS?
No. The strategy stays Target ROAS. Only the number you send as conversion value changes. Google Ads has no separate “POAS strategy”.
Can I implement POAS without developer work?
Partially. Value rules and feed labels get you to segment- and product-group-level approximations, but accurate basket-level profit requires sending the figure from the backend.
How should returns be handled?
Two ways: bake a category return rate into the profit formula (simple but blunt), or send weekly negative value adjustments for orders actually returned (accurate, needs automation).
What about shipping costs?
If the customer pays shipping, it does not affect profit — leave it out. If the store absorbs it, it is a direct order cost and should be subtracted.
How long does relearning take?
Typically two to three weeks with adequate conversion volume. Do not touch targets, budgets or structure during that window, or learning restarts.
Will revenue drop after the switch?
Often yes, by 10–30%, as low-margin orders stop being subsidised. Profit rises. If revenue is a board-level KPI, agree the trade-off in advance.
Does POAS work in Performance Max?
Yes — PMax uses the same conversion value. It is also worth splitting asset groups by margin labels so different product tiers can carry different targets.
What if purchase prices change daily?
Sync the COGS table automatically from your ERP and lock profit at order time. There is no need to restate conversions already sent; what matters for bidding is accuracy at the moment of transmission.
Do I need a separate account to test this?
No. A 50/50 split inside one account via Experiments is the correct test. A separate account only introduces data discrepancies.
Where should a small team start?
One campaign with the most conversions, and the simplest formula: net price minus cost of goods. Add returns and processing fees later — even a rough POAS is usually more accurate than revenue-based ROAS.